From 0a0ea30059b86ca70951aff535c078c1c4b2af0e Mon Sep 17 00:00:00 2001 From: Matt Woelfel Date: Mon, 13 May 2024 21:16:19 -0500 Subject: [PATCH] Enable horizontal scrolling without shift modifier Fixes #2359. --- widget/src/scrollable.rs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs index 47953741b0..c20893403e 100644 --- a/widget/src/scrollable.rs +++ b/widget/src/scrollable.rs @@ -706,15 +706,29 @@ where let delta = match delta { mouse::ScrollDelta::Lines { x, y } => { - // TODO: Configurable speed/friction (?) - let movement = if !cfg!(target_os = "macos") // macOS automatically inverts the axes when Shift is pressed - && state.keyboard_modifiers.shift() - { - Vector::new(y, x) - } else { + let is_shift_pressed = state.keyboard_modifiers.shift(); + + // macOS automatically inverts the axes when Shift is pressed + let (x, y) = + if cfg!(target_os = "macos") && is_shift_pressed { + (y, x) + } else { + (x, y) + }; + + let is_vertical = match self.direction { + Direction::Vertical(_) => true, + Direction::Horizontal(_) => false, + Direction::Both { .. } => !is_shift_pressed, + }; + + let movement = if is_vertical { Vector::new(x, y) + } else { + Vector::new(y, x) }; + // TODO: Configurable speed/friction (?) movement * 60.0 } mouse::ScrollDelta::Pixels { x, y } => Vector::new(x, y),