77#include " flutter/shell/platform/tizen/logger.h"
88#include " flutter/shell/platform/tizen/tizen_embedder_engine.h"
99
10+ static const int DIRECTION_VERTICAL = 0 ;
11+ static const int DIRECTION_HORIZONTAL = 1 ;
12+
1013TouchEventHandler::TouchEventHandler (TizenEmbedderEngine *engine)
1114 : engine_(engine) {
1215 touch_event_handlers_.push_back (
1316 ecore_event_handler_add (ECORE_EVENT_MOUSE_BUTTON_DOWN, OnTouch, this ));
1417 touch_event_handlers_.push_back (
1518 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 ));
1621 touch_event_handlers_.push_back (
1722 ecore_event_handler_add (ECORE_EVENT_MOUSE_MOVE, OnTouch, this ));
1823 touch_event_handlers_.push_back (ecore_event_handler_add (
@@ -28,6 +33,8 @@ TouchEventHandler::~TouchEventHandler() {
2833
2934void TouchEventHandler::SendFlutterPointerEvent (FlutterPointerPhase phase,
3035 double x, double y,
36+ double scroll_delta_x,
37+ double scroll_delta_y,
3138 size_t timestamp) {
3239 if (!engine_->flutter_engine ) {
3340 return ;
@@ -53,7 +60,12 @@ void TouchEventHandler::SendFlutterPointerEvent(FlutterPointerPhase phase,
5360 event.phase = phase;
5461 event.x = new_x;
5562 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 ;
5769 FlutterEngineSendPointerEvent (engine_->flutter_engine , &event, 1 );
5870}
5971
@@ -63,25 +75,38 @@ Eina_Bool TouchEventHandler::OnTouch(void *data, int type, void *event) {
6375 if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN) {
6476 self->pointer_state_ = true ;
6577 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 ,
6779 button_event->timestamp );
6880 } else if (type == ECORE_EVENT_MOUSE_BUTTON_UP) {
6981 self->pointer_state_ = false ;
7082 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 ,
7284 button_event->timestamp );
7385 } else if (type == ECORE_EVENT_MOUSE_MOVE) {
7486 if (self->pointer_state_ ) {
7587 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 ,
7789 move_event->timestamp );
7890 }
7991 } else if (type == ECORE_WL2_EVENT_WINDOW_VISIBILITY_CHANGE) {
8092 auto *focus_event =
8193 reinterpret_cast <Ecore_Wl2_Event_Window_Visibility_Change *>(event);
8294 LoggerD (" Visibility changed: %u, %d" , focus_event->win ,
8395 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 );
84110 }
85-
86111 return ECORE_CALLBACK_PASS_ON;
87112}
0 commit comments