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
+}