diff --git a/app/assets/tpl/editAppSettings.html b/app/assets/tpl/editAppSettings.html index 32b333489..6c78ee716 100644 --- a/app/assets/tpl/editAppSettings.html +++ b/app/assets/tpl/editAppSettings.html @@ -111,6 +111,14 @@

Visuals

Controls

+
+ + Use two-finger scrolling to pan the editor and pinch gestures to zoom. +
+
+ +
+
This setting affects the zoom in/out speed when using the mouse wheel. @@ -186,4 +194,3 @@

Advanced options

- diff --git a/src/electron.common/Settings.hx b/src/electron.common/Settings.hx index 15838d08f..c7a64a489 100644 --- a/src/electron.common/Settings.hx +++ b/src/electron.common/Settings.hx @@ -27,6 +27,7 @@ typedef AppSettings = { var appUiScale : Float; var editorUiScale : Float; + var enableMacOsTouchPad : Bool; var mouseWheelSpeed : Float; var autoWorldModeSwitch : AutoWorldModeSwitch; var fieldsRender : FieldsRender; @@ -112,6 +113,7 @@ class Settings { nearbyTilesRenderingDist: 1, appUiScale: 1.0, editorUiScale: 1.0, + enableMacOsTouchPad: false, mouseWheelSpeed: 1.0, uiStates: [], @@ -344,4 +346,4 @@ class Settings { public function save() { ls.writeObject(v); } -} \ No newline at end of file +} diff --git a/src/electron.renderer/App.hx b/src/electron.renderer/App.hx index ce24bebc2..87ef14ef0 100644 --- a/src/electron.renderer/App.hx +++ b/src/electron.renderer/App.hx @@ -730,9 +730,9 @@ class App extends dn.Process { function onAppMouseWheel(e:js.html.WheelEvent) { if( hasPage() && !curPageProcess.isPaused() ) { - var spd = e.ctrlKey ? 0.20 : 0.01; + var spd = e.ctrlKey ? ( settings.v.enableMacOsTouchPad ? 0.10 : 0.20 ) : 0.01; var delta = spd * -e.deltaY; - curPageProcess.onAppMouseWheel(delta); + curPageProcess.onAppMouseWheel(delta, e.deltaX, e.deltaY, e.ctrlKey); } } diff --git a/src/electron.renderer/Page.hx b/src/electron.renderer/Page.hx index b643b47d6..192757937 100644 --- a/src/electron.renderer/Page.hx +++ b/src/electron.renderer/Page.hx @@ -17,7 +17,7 @@ class Page extends dn.Process { public function onAppBlur() {} public function onAppMouseDown() {} public function onAppMouseUp() {} - public function onAppMouseWheel(delta:Float) {} + public function onAppMouseWheel(delta:Float, deltaX:Float, deltaY:Float, ctrlKey:Bool) {} public function onAppFocus() {} public function onAppResize() {} public function onKeyDown(keyCode:Int) {} @@ -45,4 +45,4 @@ class Page extends dn.Process { JsTools.parseComponents(jPage); } -} \ No newline at end of file +} diff --git a/src/electron.renderer/page/Editor.hx b/src/electron.renderer/page/Editor.hx index 476a38120..8efd877b2 100644 --- a/src/electron.renderer/page/Editor.hx +++ b/src/electron.renderer/page/Editor.hx @@ -1298,14 +1298,27 @@ class Editor extends Page { } public var lastMouseWheelDelta = 0.; - override function onAppMouseWheel(delta:Float) { - super.onAppMouseWheel(delta); + var lastMouseWheelDeltaX = 0.; + var lastMouseWheelDeltaY = 0.; + var lastMouseWheelCtrlKey = false; + override function onAppMouseWheel(delta:Float, deltaX:Float, deltaY:Float, ctrlKey:Bool) { + super.onAppMouseWheel(delta, deltaX, deltaY, ctrlKey); lastMouseWheelDelta = delta; + lastMouseWheelDeltaX = deltaX; + lastMouseWheelDeltaY = deltaY; + lastMouseWheelCtrlKey = ctrlKey; } function onHeapsMouseWheel(e:hxd.Event) { - deltaZoom( lastMouseWheelDelta*settings.v.mouseWheelSpeed, getMouse() ); + if( settings.v.enableMacOsTouchPad && !lastMouseWheelCtrlKey ) { + camera.levelX += lastMouseWheelDeltaX / camera.adjustedZoom; + camera.levelY += lastMouseWheelDeltaY / camera.adjustedZoom; + camera.cancelAutoScrolling(); + App.ME.requestCpu(); + } + else + deltaZoom( lastMouseWheelDelta*settings.v.mouseWheelSpeed, getMouse() ); cursor.onMouseMove( getMouse() ); } diff --git a/src/electron.renderer/ui/Tileset.hx b/src/electron.renderer/ui/Tileset.hx index b8559bd82..2f539accd 100644 --- a/src/electron.renderer/ui/Tileset.hx +++ b/src/electron.renderer/ui/Tileset.hx @@ -684,16 +684,25 @@ class Tileset { function onPickerMouseWheel(ev:js.html.WheelEvent) { + var touchpadNavigation = App.ME.settings.v.enableMacOsTouchPad; + if( ev.deltaY==0 && (!touchpadNavigation || ev.deltaX==0) ) + return; - if( ev.deltaY!=0 ) { - ev.preventDefault(); - if( viewFitted ) - return; + ev.preventDefault(); + if( viewFitted ) + return; + if( touchpadNavigation && !ev.ctrlKey ) { + scrollX += ev.deltaX / zoom; + scrollY += ev.deltaY / zoom; + tx = ty = null; + } + else if( ev.deltaY!=0 ) { var oldLocalX = pageToLocalX(ev.pageX); var oldLocalY = pageToLocalY(ev.pageY); - zoom += -ev.deltaY*0.001 * zoom; + var zoomSpeed = touchpadNavigation && ev.ctrlKey ? 0.015 * App.ME.settings.v.mouseWheelSpeed : 0.001; + zoom += -ev.deltaY * zoomSpeed * zoom; var newLocalX = pageToLocalX(ev.pageX); var newLocalY = pageToLocalY(ev.pageY); @@ -806,4 +815,4 @@ class Tileset { } } } -} \ No newline at end of file +} diff --git a/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx b/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx index db8fa681e..a9eda0b11 100644 --- a/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx +++ b/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx @@ -186,6 +186,10 @@ class EditAppSettings extends ui.modal.Dialog { onSettingChanged(); }); + // macOS touchpad navigation + var i = Input.linkToHtmlInput(settings.v.enableMacOsTouchPad, jForm.find("#enableMacOsTouchPad")); + i.onChange = ()->onSettingChanged(); + // Mouse wheel speed var i = Input.linkToHtmlInput(settings.v.mouseWheelSpeed, jForm.find("#mouseWheelSpeed")); i.setBounds(0.25, 3); @@ -253,4 +257,4 @@ class EditAppSettings extends ui.modal.Dialog { updateForm(); dn.Process.resizeAll(); } -} \ No newline at end of file +}