Skip to content

Commit

Permalink
Fix a pointer event bug (#307)
Browse files Browse the repository at this point in the history
* Calculate relative coordinates before delegating to the FlutterTizenView.

Signed-off-by: Boram Bae <boram21.bae@samsung.com>
  • Loading branch information
bbrto21 authored Jul 5, 2022
1 parent 8642852 commit 782b415
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 48 deletions.
4 changes: 2 additions & 2 deletions shell/platform/tizen/flutter_tizen_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
96 changes: 50 additions & 46 deletions shell/platform/tizen/tizen_view_elementary.cc
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,11 @@ void TizenViewElementary::RegisterEventHandlers() {
if (self->event_layer_ == object) {
auto* mouse_event =
reinterpret_cast<Evas_Event_Mouse_Down*>(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);
}
}
};
Expand All @@ -163,64 +164,67 @@ 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);
}
}
};
evas_object_event_callback_add(event_layer_, EVAS_CALLBACK_MOUSE_UP,
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<TizenViewElementary*>(data);
if (self->view_) {
if (self->event_layer_ == object) {
auto* mouse_event =
reinterpret_cast<Evas_Event_Mouse_Move*>(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<TizenViewElementary*>(data);
if (self->view_) {
if (self->event_layer_ == object) {
auto* mouse_event =
reinterpret_cast<Evas_Event_Mouse_Move*>(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<Ecore_Event_Mouse_Wheel*>(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<TizenViewElementary*>(data);
if (self->view_) {
if (self->event_layer_ == object) {
auto* wheel_event =
reinterpret_cast<Ecore_Event_Mouse_Wheel*>(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);
Expand Down

0 comments on commit 782b415

Please sign in to comment.