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:
Kenzie Raditya Tirtarahardja 2025-06-19 15:45:10 +08:00 committed by GitHub
parent 07ecf34e64
commit 55730e99df
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 15 deletions

View file

@ -693,28 +693,26 @@ impl IOCompositor {
);
},
CompositorMsg::WebDriverWheelScrollEvent(
webview_id,
x,
y,
delta_x,
delta_y,
message_id,
) => {
CompositorMsg::WebDriverWheelScrollEvent(webview_id, x, y, dx, dy, message_id) => {
let Some(webview_renderer) = self.webview_renderers.get_mut(webview_id) else {
warn!("Handling input event for unknown webview: {webview_id}");
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 {
x: delta_x,
y: delta_y,
x: dx,
y: dy,
z: 0.0,
mode: WheelMode::DeltaPixel,
};
let dppx = webview_renderer.device_pixels_per_page_pixel();
let point = dppx.transform_point(Point2D::new(x, y));
let scroll_delta =
dppx.transform_vector(Vector2D::new(delta_x as f32, delta_y as f32));
let scroll_delta = dppx.transform_vector(Vector2D::new(dx as f32, dy as f32));
webview_renderer.dispatch_point_input_event(
InputEvent::Wheel(WheelEvent::new(delta, point))
.with_webdriver_message_id(message_id),

View file

@ -2246,9 +2246,13 @@ impl Document {
EventCancelable::Cancelable,
Some(&self.window),
0i32,
Finite::wrap(event.delta.x),
Finite::wrap(event.delta.y),
Finite::wrap(event.delta.z),
// winit defines positive wheel delta values as revealing more content left/up.
// https://docs.rs/winit-gtk/latest/winit/event/enum.MouseScrollDelta.html
// 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,
can_gc,
);