diff options
author | 2023-01-08 20:17:11 +0100 | |
---|---|---|
committer | 2023-01-08 20:17:11 +0100 | |
commit | 19f4373863beb4a0d307dcd6f9632c1736b2355a (patch) | |
tree | 03b722b9184f385b817ce4536187800e48a212c3 /native/src/widget/scrollable.rs | |
parent | 0c2bcecd445820aa6bc92fb5cd507b419085d81e (diff) | |
download | iced-19f4373863beb4a0d307dcd6f9632c1736b2355a.tar.gz iced-19f4373863beb4a0d307dcd6f9632c1736b2355a.tar.bz2 iced-19f4373863beb4a0d307dcd6f9632c1736b2355a.zip |
Enable horizontal scrolling with `Shift+MouseWheel`
Diffstat (limited to 'native/src/widget/scrollable.rs')
-rw-r--r-- | native/src/widget/scrollable.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 63e7312f..efd66d1b 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -1,5 +1,6 @@ //! Navigate an endless amount of content with a scrollbar. use crate::event::{self, Event}; +use crate::keyboard; use crate::layout; use crate::mouse; use crate::overlay; @@ -479,13 +480,26 @@ pub fn update<Message>( return event::Status::Captured; } + if let Event::Keyboard(keyboard::Event::ModifiersChanged(modifiers)) = event + { + state.keyboard_modifiers = modifiers; + + return event::Status::Ignored; + } + if mouse_over_scrollable { match event { Event::Mouse(mouse::Event::WheelScrolled { delta }) => { let delta = match delta { mouse::ScrollDelta::Lines { x, y } => { // TODO: Configurable speed/friction (?) - Vector::new(x * 60.0, y * 60.0) + let movement = if state.keyboard_modifiers.shift() { + Vector::new(y, x) + } else { + Vector::new(x, y) + }; + + movement * 60.0 } mouse::ScrollDelta::Pixels { x, y } => Vector::new(x, y), }; @@ -906,6 +920,7 @@ pub struct State { y_scroller_grabbed_at: Option<f32>, offset_x: Offset, x_scroller_grabbed_at: Option<f32>, + keyboard_modifiers: keyboard::Modifiers, } impl Default for State { @@ -916,6 +931,7 @@ impl Default for State { y_scroller_grabbed_at: None, offset_x: Offset::Absolute(0.0), x_scroller_grabbed_at: None, + keyboard_modifiers: keyboard::Modifiers::default(), } } } |