7
7
#include " flutter/shell/platform/tizen/logger.h"
8
8
#include " flutter/shell/platform/tizen/tizen_embedder_engine.h"
9
9
10
+ static const int DIRECTION_VERTICAL = 0 ;
11
+ static const int DIRECTION_HORIZONTAL = 1 ;
12
+
10
13
TouchEventHandler::TouchEventHandler (TizenEmbedderEngine *engine)
11
14
: engine_(engine) {
12
15
touch_event_handlers_.push_back (
13
16
ecore_event_handler_add (ECORE_EVENT_MOUSE_BUTTON_DOWN, OnTouch, this ));
14
17
touch_event_handlers_.push_back (
15
18
ecore_event_handler_add (ECORE_EVENT_MOUSE_BUTTON_UP, OnTouch, this ));
19
+ touch_event_handlers_.push_back (
20
+ ecore_event_handler_add (ECORE_EVENT_MOUSE_WHEEL, OnTouch, this ));
16
21
touch_event_handlers_.push_back (
17
22
ecore_event_handler_add (ECORE_EVENT_MOUSE_MOVE, OnTouch, this ));
18
23
touch_event_handlers_.push_back (ecore_event_handler_add (
@@ -28,6 +33,8 @@ TouchEventHandler::~TouchEventHandler() {
28
33
29
34
void TouchEventHandler::SendFlutterPointerEvent (FlutterPointerPhase phase,
30
35
double x, double y,
36
+ double scroll_delta_x,
37
+ double scroll_delta_y,
31
38
size_t timestamp) {
32
39
if (!engine_->flutter_engine ) {
33
40
return ;
@@ -53,7 +60,12 @@ void TouchEventHandler::SendFlutterPointerEvent(FlutterPointerPhase phase,
53
60
event.phase = phase;
54
61
event.x = new_x;
55
62
event.y = new_y;
56
- event.timestamp = timestamp;
63
+ if (scroll_delta_x != 0 || scroll_delta_y != 0 ) {
64
+ event.signal_kind = kFlutterPointerSignalKindScroll ;
65
+ }
66
+ event.scroll_delta_x = scroll_delta_x;
67
+ event.scroll_delta_y = scroll_delta_y;
68
+ event.timestamp = timestamp / 1000 ;
57
69
FlutterEngineSendPointerEvent (engine_->flutter_engine , &event, 1 );
58
70
}
59
71
@@ -63,25 +75,38 @@ Eina_Bool TouchEventHandler::OnTouch(void *data, int type, void *event) {
63
75
if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN) {
64
76
self->pointer_state_ = true ;
65
77
auto *button_event = reinterpret_cast <Ecore_Event_Mouse_Button *>(event);
66
- self->SendFlutterPointerEvent (kDown , button_event->x , button_event->y ,
78
+ self->SendFlutterPointerEvent (kDown , button_event->x , button_event->y , 0 , 0 ,
67
79
button_event->timestamp );
68
80
} else if (type == ECORE_EVENT_MOUSE_BUTTON_UP) {
69
81
self->pointer_state_ = false ;
70
82
auto *button_event = reinterpret_cast <Ecore_Event_Mouse_Button *>(event);
71
- self->SendFlutterPointerEvent (kUp , button_event->x , button_event->y ,
83
+ self->SendFlutterPointerEvent (kUp , button_event->x , button_event->y , 0 , 0 ,
72
84
button_event->timestamp );
73
85
} else if (type == ECORE_EVENT_MOUSE_MOVE) {
74
86
if (self->pointer_state_ ) {
75
87
auto *move_event = reinterpret_cast <Ecore_Event_Mouse_Move *>(event);
76
- self->SendFlutterPointerEvent (kMove , move_event->x , move_event->y ,
88
+ self->SendFlutterPointerEvent (kMove , move_event->x , move_event->y , 0 , 0 ,
77
89
move_event->timestamp );
78
90
}
79
91
} else if (type == ECORE_WL2_EVENT_WINDOW_VISIBILITY_CHANGE) {
80
92
auto *focus_event =
81
93
reinterpret_cast <Ecore_Wl2_Event_Window_Visibility_Change *>(event);
82
94
LoggerD (" Visibility changed: %u, %d" , focus_event->win ,
83
95
focus_event->fully_obscured );
96
+ } else if (type == ECORE_EVENT_MOUSE_WHEEL) {
97
+ auto *wheel_event = reinterpret_cast <Ecore_Event_Mouse_Wheel *>(event);
98
+ double scroll_delta_x = 0.0 , scroll_delta_y = 0.0 ;
99
+ if (wheel_event->direction == DIRECTION_VERTICAL) {
100
+ scroll_delta_y += wheel_event->z ;
101
+ } else if (wheel_event->direction == DIRECTION_HORIZONTAL) {
102
+ scroll_delta_x += wheel_event->z ;
103
+ }
104
+ const int kScrollOffsetMultiplier = 20 ;
105
+ scroll_delta_x *= kScrollOffsetMultiplier ;
106
+ scroll_delta_y *= kScrollOffsetMultiplier ;
107
+ self->SendFlutterPointerEvent (
108
+ self->pointer_state_ ? kMove : kHover , wheel_event->x , wheel_event->y ,
109
+ scroll_delta_x, scroll_delta_y, wheel_event->timestamp );
84
110
}
85
-
86
111
return ECORE_CALLBACK_PASS_ON;
87
112
}
0 commit comments