From 3e0e71b42c91c00f7fe96fda924593948c867430 Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Mon, 4 Jul 2022 09:52:14 +0900 Subject: [PATCH] Fix a pointer event bug * Calculate relative coordinates before delegating to the FlutterTizenView. Signed-off-by: Boram Bae --- shell/platform/tizen/flutter_tizen_view.cc | 4 +- shell/platform/tizen/tizen_view_elementary.cc | 96 ++++++++++--------- 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/shell/platform/tizen/flutter_tizen_view.cc b/shell/platform/tizen/flutter_tizen_view.cc index 87a6a67d02581..64e0003c117cc 100644 --- a/shell/platform/tizen/flutter_tizen_view.cc +++ b/shell/platform/tizen/flutter_tizen_view.cc @@ -342,8 +342,8 @@ void FlutterTizenView::SendFlutterPointerEvent( FlutterPointerEvent event = {}; event.struct_size = sizeof(event); event.phase = phase; - event.x = new_x - geometry.left; - event.y = new_y - geometry.top; + event.x = new_x; + event.y = new_y; if (delta_x != 0 || delta_y != 0) { event.signal_kind = kFlutterPointerSignalKindScroll; } diff --git a/shell/platform/tizen/tizen_view_elementary.cc b/shell/platform/tizen/tizen_view_elementary.cc index 6ccce64e33f93..b68fd4a9b317c 100644 --- a/shell/platform/tizen/tizen_view_elementary.cc +++ b/shell/platform/tizen/tizen_view_elementary.cc @@ -141,10 +141,11 @@ void TizenViewElementary::RegisterEventHandlers() { if (self->event_layer_ == object) { auto* mouse_event = reinterpret_cast(event_info); + TizenGeometry geometry = self->GetGeometry(); self->view_->OnPointerDown( - mouse_event->canvas.x, mouse_event->canvas.y, - mouse_event->timestamp, kFlutterPointerDeviceKindTouch, - mouse_event->button); + mouse_event->canvas.x - geometry.left, + mouse_event->canvas.y - geometry.top, mouse_event->timestamp, + kFlutterPointerDeviceKindTouch, mouse_event->button); } } }; @@ -163,10 +164,11 @@ void TizenViewElementary::RegisterEventHandlers() { elm_object_scroll_hold_pop(self->event_layer_); self->scroll_hold_ = false; } - self->view_->OnPointerUp(mouse_event->canvas.x, mouse_event->canvas.y, - mouse_event->timestamp, - kFlutterPointerDeviceKindTouch, - mouse_event->button); + TizenGeometry geometry = self->GetGeometry(); + self->view_->OnPointerUp( + mouse_event->canvas.x - geometry.left, + mouse_event->canvas.y - geometry.top, mouse_event->timestamp, + kFlutterPointerDeviceKindTouch, mouse_event->button); } } }; @@ -174,53 +176,55 @@ void TizenViewElementary::RegisterEventHandlers() { evas_object_callbacks_[EVAS_CALLBACK_MOUSE_UP], this); - evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE] = + evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE] = [](void* data, Evas* evas, + Evas_Object* object, + void* event_info) { + auto* self = reinterpret_cast(data); + if (self->view_) { + if (self->event_layer_ == object) { + auto* mouse_event = + reinterpret_cast(event_info); + mouse_event->event_flags = Evas_Event_Flags(mouse_event->event_flags | + EVAS_EVENT_FLAG_ON_HOLD); + if (!self->scroll_hold_) { + elm_object_scroll_hold_push(self->event_layer_); + self->scroll_hold_ = true; + } + TizenGeometry geometry = self->GetGeometry(); + self->view_->OnPointerMove( + mouse_event->cur.canvas.x - geometry.left, + mouse_event->cur.canvas.y - geometry.top, mouse_event->timestamp, + kFlutterPointerDeviceKindTouch, mouse_event->buttons); + } + } + }; + evas_object_event_callback_add( + event_layer_, EVAS_CALLBACK_MOUSE_MOVE, + evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE], this); + + evas_object_callbacks_[EVAS_CALLBACK_MOUSE_WHEEL] = [](void* data, Evas* evas, Evas_Object* object, void* event_info) { auto* self = reinterpret_cast(data); if (self->view_) { if (self->event_layer_ == object) { - auto* mouse_event = - reinterpret_cast(event_info); - mouse_event->event_flags = Evas_Event_Flags( - mouse_event->event_flags | EVAS_EVENT_FLAG_ON_HOLD); - if (!self->scroll_hold_) { - elm_object_scroll_hold_push(self->event_layer_); - self->scroll_hold_ = true; + auto* wheel_event = + reinterpret_cast(event_info); + double delta_x = 0.0; + double delta_y = 0.0; + + if (wheel_event->direction == kScrollDirectionVertical) { + delta_y += wheel_event->z; + } else if (wheel_event->direction == kScrollDirectionHorizontal) { + delta_x += wheel_event->z; } - self->view_->OnPointerMove( - mouse_event->cur.canvas.x, mouse_event->cur.canvas.y, - mouse_event->timestamp, kFlutterPointerDeviceKindTouch, - mouse_event->buttons); + TizenGeometry geometry = self->GetGeometry(); + self->view_->OnScroll( + wheel_event->x - geometry.left, wheel_event->y - geometry.top, + delta_x, delta_y, kScrollOffsetMultiplier, + wheel_event->timestamp, kFlutterPointerDeviceKindTouch, 0); } } }; - evas_object_event_callback_add( - event_layer_, EVAS_CALLBACK_MOUSE_MOVE, - evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE], this); - - evas_object_callbacks_[EVAS_CALLBACK_MOUSE_WHEEL] = [](void* data, Evas* evas, - Evas_Object* object, - void* event_info) { - auto* self = reinterpret_cast(data); - if (self->view_) { - if (self->event_layer_ == object) { - auto* wheel_event = - reinterpret_cast(event_info); - double delta_x = 0.0; - double delta_y = 0.0; - - if (wheel_event->direction == kScrollDirectionVertical) { - delta_y += wheel_event->z; - } else if (wheel_event->direction == kScrollDirectionHorizontal) { - delta_x += wheel_event->z; - } - - self->view_->OnScroll(wheel_event->x, wheel_event->y, delta_x, delta_y, - kScrollOffsetMultiplier, wheel_event->timestamp, - kFlutterPointerDeviceKindTouch, 0); - } - } - }; evas_object_event_callback_add( event_layer_, EVAS_CALLBACK_MOUSE_WHEEL, evas_object_callbacks_[EVAS_CALLBACK_MOUSE_WHEEL], this);