From e2cf2a5754f6ee51a37fbe6e1f8b5ff8bd98da49 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Sun, 6 Sep 2020 07:41:19 -0700 Subject: [PATCH] Fix inverted horizontal scroll on macOS In winit the swipe from left to right on touchpad should generate positive horizontal delta change, however on macOS it was the other way around without natural scrolling. This commit inverses the horizontal scrolling delta in 'MouseScrollDelta' events to match other platforms. Fixes #1695. --- CHANGELOG.md | 1 + src/platform_impl/macos/view.rs | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2eb312ca..3658c23d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ - On NetBSD, fixed crash due to incorrect detection of the main thread. - **Breaking:** The virtual key code `Subtract` has been renamed to `NumpadSubtract` - **Breaking:** On X11, `-` key is mapped to the `Minus` virtual key code, instead of `Subtract` +- On macOS, fix inverted horizontal scroll. # 0.22.2 (2020-05-16) diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index 35751500..2c379e0a 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -1003,7 +1003,8 @@ extern "C" fn scroll_wheel(this: &Object, _sel: Sel, event: id) { let state = &mut *(state_ptr as *mut ViewState); let delta = { - let (x, y) = (event.scrollingDeltaX(), event.scrollingDeltaY()); + // macOS horizontal sign convention is the inverse of winit. + let (x, y) = (event.scrollingDeltaX() * -1.0, event.scrollingDeltaY()); if event.hasPreciseScrollingDeltas() == YES { let delta = LogicalPosition::new(x, y).to_physical(state.get_scale_factor()); MouseScrollDelta::PixelDelta(delta)