@@ -6,6 +6,7 @@ export component TestCase inherits Window {
66 height : 200px ;
77 in-out property <string > result ;
88 out property <bool > contains-drag <=> da.contains-drag;
9+ out property <bool > inner_touch_area_has_hover <=> inner_touch_area.has-hover;
910 VerticalLayout {
1011 Rectangle {
1112 background : inner_touch_area.has-hover ? yellow : red;
@@ -31,6 +32,8 @@ export component TestCase inherits Window {
3132 result += "D[" + event.data + "];" ;
3233 debug ("dropped" , event);
3334 }
35+
36+ TouchArea {}
3437 }
3538 }
3639 }
@@ -65,36 +68,75 @@ slint_testing::mock_elapsed_time(20);
6568assert_eq!(instance.get_result(), "D[Hello World];");
6669assert_eq!(instance.get_contains_drag(), false);
6770
71+ // Test a click on a touch area (without dragging)
6872instance.set_result("".into());
73+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
6974instance.window().dispatch_event(WindowEvent::PointerPressed { position: LogicalPosition::new(51.0, 50.0), button: PointerEventButton::Left });
75+ assert!(instance.get_inner_touch_area_has_hover());
7076slint_testing::mock_elapsed_time(20);
7177assert_eq!(instance.get_contains_drag(), false);
7278assert_eq!(instance.get_result(), "");
79+ assert_eq!(instance.get_inner_touch_area_has_hover(), true);
7380instance.window().dispatch_event(WindowEvent::PointerMoved { position: LogicalPosition::new(52.0, 50.0) });
81+ assert_eq!(instance.get_inner_touch_area_has_hover(), true);
7482slint_testing::mock_elapsed_time(20);
7583assert_eq!(instance.get_contains_drag(), false);
7684assert_eq!(instance.get_result(), "");
85+ assert_eq!(instance.get_inner_touch_area_has_hover(), true);
7786instance.window().dispatch_event(WindowEvent::PointerReleased { position: LogicalPosition::new(52.0, 50.0), button: PointerEventButton::Left });
7887slint_testing::mock_elapsed_time(20);
7988assert_eq!(instance.get_result(), "InnerClicked;");
8089assert_eq!(instance.get_contains_drag(), false);
90+ assert_eq!(instance.get_inner_touch_area_has_hover(), true);
8191
92+ // Dragging from the touch area should not result in a click
8293instance.set_result("".into());
8394instance.window().dispatch_event(WindowEvent::PointerPressed { position: LogicalPosition::new(51.0, 15.0), button: PointerEventButton::Left });
95+ assert_eq!(instance.get_inner_touch_area_has_hover(), true);
8496slint_testing::mock_elapsed_time(20);
8597assert_eq!(instance.get_contains_drag(), false);
8698assert_eq!(instance.get_result(), "");
8799instance.window().dispatch_event(WindowEvent::PointerMoved { position: LogicalPosition::new(58.0, 40.0) });
88100slint_testing::mock_elapsed_time(20);
89101assert_eq!(instance.get_contains_drag(), false);
90102assert_eq!(instance.get_result(), "");
103+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
91104instance.window().dispatch_event(WindowEvent::PointerMoved { position: LogicalPosition::new(58.0, 120.0) });
92105assert_eq!(instance.get_contains_drag(), true);
93106assert_eq!(instance.get_result(), "");
107+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
94108instance.window().dispatch_event(WindowEvent::PointerReleased { position: LogicalPosition::new(58.0, 20.0), button: PointerEventButton::Left });
109+ assert_eq!(instance.get_inner_touch_area_has_hover(), false); // FIXME: should be true without the need to make a move as well
95110slint_testing::mock_elapsed_time(20);
111+ instance.window().dispatch_event(WindowEvent::PointerMoved { position: LogicalPosition::new(58.0, 20.0) });
112+ assert_eq!(instance.get_inner_touch_area_has_hover(), true);
113+ assert_eq!(instance.get_contains_drag(), false);
114+ assert_eq!(instance.get_result(), "");
115+
116+
117+ // Dragging over the touch area shouldn't result in has-hover being true (only after it is released)
118+ instance.set_result("".into());
119+ instance.window().dispatch_event(WindowEvent::PointerMoved { position: LogicalPosition::new(11.0, 15.0) });
120+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
121+ assert_eq!(instance.get_contains_drag(), false);
122+ instance.window().dispatch_event(WindowEvent::PointerPressed { position: LogicalPosition::new(11.0, 15.0), button: PointerEventButton::Left });
123+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
96124assert_eq!(instance.get_contains_drag(), false);
97125assert_eq!(instance.get_result(), "");
126+ instance.window().dispatch_event(WindowEvent::PointerMoved { position: LogicalPosition::new(25.0, 35.0) });
127+ slint_testing::mock_elapsed_time(20);
128+ assert_eq!(instance.get_contains_drag(), false);
129+ assert_eq!(instance.get_result(), "");
130+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
131+ instance.window().dispatch_event(WindowEvent::PointerMoved { position: LogicalPosition::new(125.0, 28.0) });
132+ assert_eq!(instance.get_contains_drag(), false);
133+ assert_eq!(instance.get_result(), "");
134+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
135+ instance.window().dispatch_event(WindowEvent::PointerReleased { position: LogicalPosition::new(18.0, 20.0), button: PointerEventButton::Left });
136+ assert_eq!(instance.get_inner_touch_area_has_hover(), false);
137+ assert_eq!(instance.get_contains_drag(), false);
138+ assert_eq!(instance.get_result(), "");
139+
98140```
99141
100142*/
0 commit comments