@@ -6,7 +6,7 @@ use std::rc::Rc;
66use url:: Url ;
77use winit:: dpi:: PhysicalSize ;
88
9- use euclid:: { Box2D , Point2D , Size2D } ;
9+ use euclid:: { Box2D , Point2D , Scale , Size2D } ;
1010
1111use i_slint_core:: items:: { ColorScheme , PointerEvent , PointerEventKind } ;
1212use slint:: { ComponentHandle , platform:: PointerEventButton } ;
@@ -18,24 +18,21 @@ use servo::{
1818} ;
1919
2020use crate :: {
21- WebviewLogic ,
21+ MyApp , WebviewLogic ,
2222 adapter:: { SlintServoAdapter , upgrade_adapter} ,
2323} ;
2424
25- pub fn on_app_callbacks ( adapter : Rc < SlintServoAdapter > ) {
26- on_url ( adapter. clone ( ) ) ;
27- on_theme ( adapter. clone ( ) ) ;
28- on_resize ( adapter. clone ( ) ) ;
29- on_scroll ( adapter. clone ( ) ) ;
30- on_buttons ( adapter. clone ( ) ) ;
31- on_pointer ( adapter. clone ( ) ) ;
25+ pub fn on_app_callbacks ( app : & MyApp , adapter : Rc < SlintServoAdapter > ) {
26+ on_url ( app , adapter. clone ( ) ) ;
27+ on_theme ( app , adapter. clone ( ) ) ;
28+ on_resize ( app , adapter. clone ( ) ) ;
29+ on_scroll ( app , adapter. clone ( ) ) ;
30+ on_buttons ( app , adapter. clone ( ) ) ;
31+ on_pointer ( app , adapter. clone ( ) ) ;
3232}
3333
34- fn on_url ( adapter : Rc < SlintServoAdapter > ) {
35- let app = adapter. app ( ) ;
36-
34+ fn on_url ( app : & MyApp , adapter : Rc < SlintServoAdapter > ) {
3735 let adapter_weak = Rc :: downgrade ( & adapter) ;
38-
3936 app. global :: < WebviewLogic > ( ) . on_loadUrl ( move |url| {
4037 let adapter = upgrade_adapter ( & adapter_weak) ;
4138 let webview = adapter. webview ( ) ;
@@ -44,36 +41,38 @@ fn on_url(adapter: Rc<SlintServoAdapter>) {
4441 } ) ;
4542}
4643
47- fn on_theme ( adapter : Rc < SlintServoAdapter > ) {
48- let app = adapter. app ( ) ;
49-
44+ fn on_theme ( app : & MyApp , adapter : Rc < SlintServoAdapter > ) {
5045 let adapter_weak = Rc :: downgrade ( & adapter) ;
51-
5246 app. global :: < WebviewLogic > ( ) . on_theme ( move |color_scheme| {
5347 let theme = if color_scheme == ColorScheme :: Dark { Theme :: Dark } else { Theme :: Light } ;
5448
5549 let adapter = upgrade_adapter ( & adapter_weak) ;
5650
5751 let webview = adapter. webview ( ) ;
5852
59- // Theme not updating its the issue with servo itself until mouse move over it
53+ // Theme not updating until mouse move over it
6054 // https://github.com/servo/servo/issues/40268
6155 webview. notify_theme_change ( theme) ;
6256 } ) ;
6357}
6458
65- fn on_resize ( adapter : Rc < SlintServoAdapter > ) {
66- let app = adapter. app ( ) ;
67-
59+ // This will always called when slint window show first time and when resize so set scale factor here
60+ fn on_resize ( app : & MyApp , adapter : Rc < SlintServoAdapter > ) {
6861 let adapter_weak = Rc :: downgrade ( & adapter) ;
62+ let app_weak = app. as_weak ( ) ;
6963 app. global :: < WebviewLogic > ( ) . on_resize ( move |width, height| {
7064 let adapter = upgrade_adapter ( & adapter_weak) ;
7165
7266 let webview = adapter. webview ( ) ;
7367
74- let scale_factor = adapter. scale_factor ( ) ;
68+ let scale_factor =
69+ app_weak. upgrade ( ) . expect ( "Failed to upgrade app" ) . window ( ) . scale_factor ( ) ;
70+
71+ let scale = Scale :: new ( scale_factor) ;
7572
76- let size = Size2D :: new ( width, height) * scale_factor;
73+ webview. set_hidpi_scale_factor ( scale) ;
74+
75+ let size = Size2D :: new ( width, height) ;
7776
7877 let physical_size = PhysicalSize :: new ( size. width as u32 , size. height as u32 ) ;
7978
@@ -84,18 +83,14 @@ fn on_resize(adapter: Rc<SlintServoAdapter>) {
8483 } ) ;
8584}
8685
87- fn on_scroll ( adapter : Rc < SlintServoAdapter > ) {
88- let app = adapter. app ( ) ;
89-
86+ fn on_scroll ( app : & MyApp , adapter : Rc < SlintServoAdapter > ) {
9087 let adapter_weak = Rc :: downgrade ( & adapter) ;
9188 app. global :: < WebviewLogic > ( ) . on_scroll ( move |initial_x, initial_y, delta_x, delta_y| {
9289 let adapter = upgrade_adapter ( & adapter_weak) ;
9390
9491 let webview = adapter. webview ( ) ;
9592
96- let scale_factor = adapter. scale_factor ( ) ;
97-
98- let point = DevicePoint :: new ( initial_x * scale_factor, initial_y * scale_factor) ;
93+ let point = DevicePoint :: new ( initial_x, initial_y) ;
9994
10095 let moved_by = DeviceVector2D :: new ( delta_x, delta_y) ;
10196
@@ -106,9 +101,7 @@ fn on_scroll(adapter: Rc<SlintServoAdapter>) {
106101 } ) ;
107102}
108103
109- fn on_buttons ( adapter : Rc < SlintServoAdapter > ) {
110- let app = adapter. app ( ) ;
111-
104+ fn on_buttons ( app : & MyApp , adapter : Rc < SlintServoAdapter > ) {
112105 let adapter_weak = Rc :: downgrade ( & adapter) ;
113106 app. on_back ( move || {
114107 let adapter = upgrade_adapter ( & adapter_weak) ;
@@ -137,18 +130,14 @@ fn on_buttons(adapter: Rc<SlintServoAdapter>) {
137130 } ) ;
138131}
139132
140- fn on_pointer ( adapter : Rc < SlintServoAdapter > ) {
141- let app = adapter. app ( ) ;
142-
133+ fn on_pointer ( app : & MyApp , adapter : Rc < SlintServoAdapter > ) {
143134 let adapter_weak = Rc :: downgrade ( & adapter) ;
144135 app. global :: < WebviewLogic > ( ) . on_pointer ( move |pointer_event, x, y| {
145136 let adapter = upgrade_adapter ( & adapter_weak) ;
146137
147138 let webview = adapter. webview ( ) ;
148139
149- let scale_factor = adapter. scale_factor ( ) ;
150-
151- let point = DevicePoint :: new ( x * scale_factor, y * scale_factor) ;
140+ let point = DevicePoint :: new ( x, y) ;
152141
153142 let input_event =
154143 convert_slint_pointer_event_to_servo_input_event ( & pointer_event, point. into ( ) ) ;
@@ -166,7 +155,7 @@ fn convert_slint_pointer_event_to_servo_input_event(
166155 if pointer_event. is_touch {
167156 handle_touch_events ( pointer_event, point)
168157 } else {
169- _handle_mouse_events ( pointer_event, point)
158+ handle_mouse_events ( pointer_event, point)
170159 }
171160}
172161
@@ -180,8 +169,8 @@ fn handle_touch_events(pointer_event: &PointerEvent, point: WebViewPoint) -> Inp
180169 InputEvent :: Touch ( touch_event)
181170}
182171
183- fn _handle_mouse_events ( pointer_event : & PointerEvent , point : WebViewPoint ) -> InputEvent {
184- let button = _get_mouse_button ( pointer_event) ;
172+ fn handle_mouse_events ( pointer_event : & PointerEvent , point : WebViewPoint ) -> InputEvent {
173+ let button = get_mouse_button ( pointer_event) ;
185174 match pointer_event. kind {
186175 PointerEventKind :: Down => {
187176 let mouse_event = MouseButtonEvent :: new ( MouseButtonAction :: Down , button, point) ;
@@ -195,7 +184,7 @@ fn _handle_mouse_events(pointer_event: &PointerEvent, point: WebViewPoint) -> In
195184 }
196185}
197186
198- fn _get_mouse_button ( point_event : & PointerEvent ) -> MouseButton {
187+ fn get_mouse_button ( point_event : & PointerEvent ) -> MouseButton {
199188 match point_event. button {
200189 PointerEventButton :: Left => MouseButton :: Left ,
201190 PointerEventButton :: Right => MouseButton :: Right ,
0 commit comments