Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions winit-wayland/src/seat/pointer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ impl PointerHandler for WinitState {
// Get the current phase.
let mut pointer_data = pointer.winit_data().inner.lock().unwrap();

let has_value120_scroll = horizontal.value120 != 0 || vertical.value120 != 0;
let has_discrete_scroll = horizontal.discrete != 0 || vertical.discrete != 0;

// Figure out what to do about start/ended phases here.
Expand All @@ -206,7 +207,7 @@ impl PointerHandler for WinitState {
} else {
match pointer_data.phase {
// Discrete scroll only results in moved events.
_ if has_discrete_scroll => TouchPhase::Moved,
_ if has_value120_scroll || has_discrete_scroll => TouchPhase::Moved,
TouchPhase::Started | TouchPhase::Moved => TouchPhase::Moved,
_ => TouchPhase::Started,
}
Expand All @@ -217,7 +218,13 @@ impl PointerHandler for WinitState {

// Mice events have both pixel and discrete delta's at the same time. So prefer
// the discrete values if they are present.
let delta = if has_discrete_scroll {
let delta = if has_value120_scroll {
// NOTE: Wayland sign convention is the inverse of winit.
MouseScrollDelta::LineDelta(
(-horizontal.value120) as f32 / 120.,
(-vertical.value120) as f32 / 120.,
)
} else if has_discrete_scroll {
// NOTE: Wayland sign convention is the inverse of winit.
MouseScrollDelta::LineDelta(
(-horizontal.discrete) as f32,
Expand Down
1 change: 1 addition & 0 deletions winit/src/changelog/unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,3 +268,4 @@ changelog entry.
- On Windows, `Window::set_theme` will change the title bar color immediately now.
- On Windows 11, prevent incorrect shifting when dragging window onto a monitor with different DPI.
- On Web, device events are emitted regardless of cursor type.
- On Wayland, `axis_value120` scroll events now generate `MouseScrollDelta::LineDelta`