diff --git a/examples/servo/Cargo.toml b/examples/servo/Cargo.toml index 03cdcf8a7e..fe98602256 100644 --- a/examples/servo/Cargo.toml +++ b/examples/servo/Cargo.toml @@ -43,8 +43,8 @@ wgpu-hal = "27.0.2" wgpu-core = "27.0.1" wgpu = { version = "27.0.1", features = ["metal"] } -libservo = { git = "https://github.com/servo/servo", rev = "6357fc8" } -embedder_traits = { git = "https://github.com/servo/servo", rev = "6357fc8", features = ["baked-default-resources"] } +libservo = { git = "https://github.com/servo/servo", rev = "8433bdab" } +embedder_traits = { git = "https://github.com/servo/servo", rev = "8433bdab", features = ["baked-default-resources"] } i-slint-core = { path = "../../internal/core" } diff --git a/examples/servo/src/on_events.rs b/examples/servo/src/on_events.rs index 83cdb87d7b..b4693ae6c7 100644 --- a/examples/servo/src/on_events.rs +++ b/examples/servo/src/on_events.rs @@ -6,18 +6,15 @@ use std::rc::Rc; use url::Url; use winit::dpi::PhysicalSize; -use euclid::{Box2D, Point2D, Size2D, Vector2D}; +use euclid::{Box2D, Point2D, Size2D}; use i_slint_core::items::{ColorScheme, PointerEvent, PointerEventKind}; use slint::{ComponentHandle, platform::PointerEventButton}; use servo::{ - InputEvent, MouseButton, MouseButtonAction, MouseButtonEvent, MouseMoveEvent, Theme, - TouchEvent, TouchEventType, TouchId, - webrender_api::{ - ScrollLocation, - units::{DevicePixel, DevicePoint}, - }, + InputEvent, MouseButton, MouseButtonAction, MouseButtonEvent, MouseMoveEvent, Scroll, Theme, + TouchEvent, TouchEventType, TouchId, WebViewPoint, + webrender_api::units::{DevicePixel, DevicePoint, DeviceVector2D}, }; use crate::{ @@ -88,11 +85,12 @@ fn on_scroll(adapter: Rc) { let point = DevicePoint::new(initial_x * scale_factor, initial_y * scale_factor); - let moved_by = Vector2D::new(delta_x, delta_y); + let moved_by = DeviceVector2D::new(delta_x, delta_y); + // Invert delta to match Servo's coordinate system let servo_delta = -moved_by; - webview.notify_scroll_event(ScrollLocation::Delta(servo_delta), point.to_i32()); + webview.notify_scroll_event(Scroll::Delta(servo_delta.into()), point.into()); }); } @@ -148,7 +146,8 @@ fn on_pointer(adapter: Rc) { let point = DevicePoint::new(x * scale_factor, y * scale_factor); - let input_event = convert_slint_pointer_event_to_servo_input_event(&pointer_event, point); + let input_event = + convert_slint_pointer_event_to_servo_input_event(&pointer_event, point.into()); webview.notify_input_event(input_event); }); @@ -158,7 +157,7 @@ fn on_pointer(adapter: Rc) { /// Distinguishes between touch and mouse events for proper handling. fn convert_slint_pointer_event_to_servo_input_event( pointer_event: &PointerEvent, - point: DevicePoint, + point: WebViewPoint, ) -> InputEvent { if pointer_event.is_touch { handle_touch_events(pointer_event, point) @@ -167,7 +166,7 @@ fn convert_slint_pointer_event_to_servo_input_event( } } -fn handle_touch_events(pointer_event: &PointerEvent, point: DevicePoint) -> InputEvent { +fn handle_touch_events(pointer_event: &PointerEvent, point: WebViewPoint) -> InputEvent { let touch_id = TouchId(1); let touch_event = match pointer_event.kind { PointerEventKind::Down => TouchEvent::new(TouchEventType::Down, touch_id, point), @@ -177,7 +176,7 @@ fn handle_touch_events(pointer_event: &PointerEvent, point: DevicePoint) -> Inpu InputEvent::Touch(touch_event) } -fn _handle_mouse_events(pointer_event: &PointerEvent, point: DevicePoint) -> InputEvent { +fn _handle_mouse_events(pointer_event: &PointerEvent, point: WebViewPoint) -> InputEvent { let button = _get_mouse_button(pointer_event); match pointer_event.kind { PointerEventKind::Down => {