Handle touchpad scroll events
This commit is contained in:
parent
29588f604a
commit
bd5d871eb6
4 changed files with 46 additions and 11 deletions
|
|
@ -3,4 +3,4 @@ mod button;
|
|||
mod event;
|
||||
|
||||
pub use button::Button;
|
||||
pub use event::Event;
|
||||
pub use event::{Event, ScrollDelta};
|
||||
|
|
|
|||
|
|
@ -34,11 +34,22 @@ pub enum Event {
|
|||
},
|
||||
|
||||
/// The mouse wheel was scrolled.
|
||||
WheelScrolled {
|
||||
WheelScrolled { delta: ScrollDelta },
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
pub enum ScrollDelta {
|
||||
Lines {
|
||||
/// The number of horizontal lines scrolled
|
||||
delta_x: f32,
|
||||
x: f32,
|
||||
|
||||
/// The number of vertical lines scrolled
|
||||
delta_y: f32,
|
||||
y: f32,
|
||||
},
|
||||
Pixels {
|
||||
/// The number of horizontal pixels scrolled
|
||||
x: f32,
|
||||
/// The number of vertical pixels scrolled
|
||||
y: f32,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,11 +64,16 @@ where
|
|||
// TODO: Event capture. Nested scrollables should capture scroll events.
|
||||
if is_mouse_over {
|
||||
match event {
|
||||
Event::Mouse(mouse::Event::WheelScrolled {
|
||||
delta_y, ..
|
||||
}) => {
|
||||
// TODO: Configurable speed (?)
|
||||
self.state.scroll(delta_y * 15.0, bounds, content_bounds);
|
||||
Event::Mouse(mouse::Event::WheelScrolled { delta }) => {
|
||||
match delta {
|
||||
mouse::ScrollDelta::Lines { y, .. } => {
|
||||
// TODO: Configurable speed (?)
|
||||
self.state.scroll(y * 15.0, bounds, content_bounds);
|
||||
}
|
||||
mouse::ScrollDelta::Pixels { y, .. } => {
|
||||
self.state.scroll(y, bounds, content_bounds);
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ pub trait Application {
|
|||
..
|
||||
} => match window_event {
|
||||
WindowEvent::CursorMoved { position, .. } => {
|
||||
// TODO: Remove when renderer supports HiDPI
|
||||
let physical_position =
|
||||
position.to_physical(window.hidpi_factor());
|
||||
|
||||
|
|
@ -143,10 +144,28 @@ pub trait Application {
|
|||
delta_y,
|
||||
) => {
|
||||
events.push(Event::Mouse(
|
||||
mouse::Event::WheelScrolled { delta_x, delta_y },
|
||||
mouse::Event::WheelScrolled {
|
||||
delta: mouse::ScrollDelta::Lines {
|
||||
x: delta_x,
|
||||
y: delta_y,
|
||||
},
|
||||
},
|
||||
));
|
||||
}
|
||||
winit::event::MouseScrollDelta::PixelDelta(position) => {
|
||||
// TODO: Remove when renderer supports HiDPI
|
||||
let physical_position =
|
||||
position.to_physical(window.hidpi_factor());
|
||||
|
||||
events.push(Event::Mouse(
|
||||
mouse::Event::WheelScrolled {
|
||||
delta: mouse::ScrollDelta::Pixels {
|
||||
x: physical_position.x as f32,
|
||||
y: physical_position.y as f32,
|
||||
},
|
||||
},
|
||||
));
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
WindowEvent::CloseRequested => {
|
||||
*control_flow = ControlFlow::Exit;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue