mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
script: Reverse wheel event delta sign to match specification-defined behavior (#37461)
Fix wheel event, either dispatched from window or webdriver: - Positive deltaY means scrolling down, negative deltaY means scrolling up - Positive deltaX means scrolling right, negative deltaX means scrolling left Tests: Many scrolling interaction test will depend on this. Signed-off-by: PotatoCP <kenzieradityatirtarahardja18@gmail.com>
This commit is contained in:
parent
07ecf34e64
commit
55730e99df
2 changed files with 17 additions and 15 deletions
|
@ -693,28 +693,26 @@ impl IOCompositor {
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
CompositorMsg::WebDriverWheelScrollEvent(
|
CompositorMsg::WebDriverWheelScrollEvent(webview_id, x, y, dx, dy, message_id) => {
|
||||||
webview_id,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
delta_x,
|
|
||||||
delta_y,
|
|
||||||
message_id,
|
|
||||||
) => {
|
|
||||||
let Some(webview_renderer) = self.webview_renderers.get_mut(webview_id) else {
|
let Some(webview_renderer) = self.webview_renderers.get_mut(webview_id) else {
|
||||||
warn!("Handling input event for unknown webview: {webview_id}");
|
warn!("Handling input event for unknown webview: {webview_id}");
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
// The sign of wheel delta value definition in uievent
|
||||||
|
// is inverted compared to `winit`s wheel delta. Hence,
|
||||||
|
// here we invert the sign to mimic wheel scroll
|
||||||
|
// implementation in `headed_window.rs`.
|
||||||
|
let dx = -dx;
|
||||||
|
let dy = -dy;
|
||||||
let delta = WheelDelta {
|
let delta = WheelDelta {
|
||||||
x: delta_x,
|
x: dx,
|
||||||
y: delta_y,
|
y: dy,
|
||||||
z: 0.0,
|
z: 0.0,
|
||||||
mode: WheelMode::DeltaPixel,
|
mode: WheelMode::DeltaPixel,
|
||||||
};
|
};
|
||||||
let dppx = webview_renderer.device_pixels_per_page_pixel();
|
let dppx = webview_renderer.device_pixels_per_page_pixel();
|
||||||
let point = dppx.transform_point(Point2D::new(x, y));
|
let point = dppx.transform_point(Point2D::new(x, y));
|
||||||
let scroll_delta =
|
let scroll_delta = dppx.transform_vector(Vector2D::new(dx as f32, dy as f32));
|
||||||
dppx.transform_vector(Vector2D::new(delta_x as f32, delta_y as f32));
|
|
||||||
webview_renderer.dispatch_point_input_event(
|
webview_renderer.dispatch_point_input_event(
|
||||||
InputEvent::Wheel(WheelEvent::new(delta, point))
|
InputEvent::Wheel(WheelEvent::new(delta, point))
|
||||||
.with_webdriver_message_id(message_id),
|
.with_webdriver_message_id(message_id),
|
||||||
|
|
|
@ -2246,9 +2246,13 @@ impl Document {
|
||||||
EventCancelable::Cancelable,
|
EventCancelable::Cancelable,
|
||||||
Some(&self.window),
|
Some(&self.window),
|
||||||
0i32,
|
0i32,
|
||||||
Finite::wrap(event.delta.x),
|
// winit defines positive wheel delta values as revealing more content left/up.
|
||||||
Finite::wrap(event.delta.y),
|
// https://docs.rs/winit-gtk/latest/winit/event/enum.MouseScrollDelta.html
|
||||||
Finite::wrap(event.delta.z),
|
// This is the opposite of wheel delta in uievents
|
||||||
|
// https://w3c.github.io/uievents/#dom-wheeleventinit-deltaz
|
||||||
|
Finite::wrap(-event.delta.x),
|
||||||
|
Finite::wrap(-event.delta.y),
|
||||||
|
Finite::wrap(-event.delta.z),
|
||||||
event.delta.mode as u32,
|
event.delta.mode as u32,
|
||||||
can_gc,
|
can_gc,
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue