summaryrefslogtreecommitdiffstats
path: root/native/src/widget/scrollable.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-01-08 20:17:11 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-01-08 20:17:11 +0100
commit19f4373863beb4a0d307dcd6f9632c1736b2355a (patch)
tree03b722b9184f385b817ce4536187800e48a212c3 /native/src/widget/scrollable.rs
parent0c2bcecd445820aa6bc92fb5cd507b419085d81e (diff)
downloadiced-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.rs18
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(),
}
}
}