mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Implement wheel action in webdriver (#36744)
https://w3c.github.io/webdriver/#wheel-actions Test: `tests/wpt/tests/webdriver/tests/classic/perform_actions/wheel.py::{test_null_response_value,test_params_actions_origin_outside_viewport[element],test_params_actions_origin_outside_viewport[viewport]}, tests/wpt/tests/webdriver/tests/classic/perform_actions/perform.py` Fixes: https://github.com/servo/servo/issues/36720 cc: @xiaochengh @longvatrong111 @yezhizhen Signed-off-by: PotatoCP <kenzieradityatirtarahardja.18@gmail.com> Co-authored-by: PotatoCP <kenzieradityatirtarahardja.18@gmail.com>
This commit is contained in:
parent
f47e69c112
commit
eaf9224799
9 changed files with 255 additions and 51 deletions
|
@ -26,9 +26,9 @@ use crossbeam_channel::{Receiver, Sender};
|
|||
use dpi::PhysicalSize;
|
||||
use embedder_traits::{
|
||||
CompositorHitTestResult, Cursor, InputEvent, MouseButtonEvent, MouseMoveEvent, ShutdownState,
|
||||
TouchEventType, UntrustedNodeAddress, ViewportDetails,
|
||||
TouchEventType, UntrustedNodeAddress, ViewportDetails, WheelDelta, WheelEvent, WheelMode,
|
||||
};
|
||||
use euclid::{Point2D, Rect, Scale, Size2D, Transform3D};
|
||||
use euclid::{Point2D, Rect, Scale, Size2D, Transform3D, Vector2D};
|
||||
use fnv::FnvHashMap;
|
||||
use ipc_channel::ipc::{self, IpcSharedMemory};
|
||||
use libc::c_void;
|
||||
|
@ -646,6 +646,26 @@ impl IOCompositor {
|
|||
.dispatch_input_event(InputEvent::MouseMove(MouseMoveEvent { point }));
|
||||
},
|
||||
|
||||
CompositorMsg::WebDriverWheelScrollEvent(webview_id, x, y, delta_x, delta_y) => {
|
||||
let Some(webview_renderer) = self.webview_renderers.get_mut(webview_id) else {
|
||||
warn!("Handling input event for unknown webview: {webview_id}");
|
||||
return;
|
||||
};
|
||||
let delta = WheelDelta {
|
||||
x: delta_x,
|
||||
y: delta_y,
|
||||
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));
|
||||
webview_renderer
|
||||
.dispatch_input_event(InputEvent::Wheel(WheelEvent { delta, point }));
|
||||
webview_renderer.on_webdriver_wheel_action(scroll_delta, point);
|
||||
},
|
||||
|
||||
CompositorMsg::SendInitialTransaction(pipeline) => {
|
||||
let mut txn = Transaction::new();
|
||||
txn.set_display_list(WebRenderEpoch(0), (pipeline, Default::default()));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue