Skip to content

Commit 782b415

Browse files
authored
Fix a pointer event bug (#307)
* Calculate relative coordinates before delegating to the FlutterTizenView. Signed-off-by: Boram Bae <[email protected]>
1 parent 8642852 commit 782b415

File tree

2 files changed

+52
-48
lines changed

2 files changed

+52
-48
lines changed

shell/platform/tizen/flutter_tizen_view.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,8 @@ void FlutterTizenView::SendFlutterPointerEvent(
342342
FlutterPointerEvent event = {};
343343
event.struct_size = sizeof(event);
344344
event.phase = phase;
345-
event.x = new_x - geometry.left;
346-
event.y = new_y - geometry.top;
345+
event.x = new_x;
346+
event.y = new_y;
347347
if (delta_x != 0 || delta_y != 0) {
348348
event.signal_kind = kFlutterPointerSignalKindScroll;
349349
}

shell/platform/tizen/tizen_view_elementary.cc

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,11 @@ void TizenViewElementary::RegisterEventHandlers() {
141141
if (self->event_layer_ == object) {
142142
auto* mouse_event =
143143
reinterpret_cast<Evas_Event_Mouse_Down*>(event_info);
144+
TizenGeometry geometry = self->GetGeometry();
144145
self->view_->OnPointerDown(
145-
mouse_event->canvas.x, mouse_event->canvas.y,
146-
mouse_event->timestamp, kFlutterPointerDeviceKindTouch,
147-
mouse_event->button);
146+
mouse_event->canvas.x - geometry.left,
147+
mouse_event->canvas.y - geometry.top, mouse_event->timestamp,
148+
kFlutterPointerDeviceKindTouch, mouse_event->button);
148149
}
149150
}
150151
};
@@ -163,64 +164,67 @@ void TizenViewElementary::RegisterEventHandlers() {
163164
elm_object_scroll_hold_pop(self->event_layer_);
164165
self->scroll_hold_ = false;
165166
}
166-
self->view_->OnPointerUp(mouse_event->canvas.x, mouse_event->canvas.y,
167-
mouse_event->timestamp,
168-
kFlutterPointerDeviceKindTouch,
169-
mouse_event->button);
167+
TizenGeometry geometry = self->GetGeometry();
168+
self->view_->OnPointerUp(
169+
mouse_event->canvas.x - geometry.left,
170+
mouse_event->canvas.y - geometry.top, mouse_event->timestamp,
171+
kFlutterPointerDeviceKindTouch, mouse_event->button);
170172
}
171173
}
172174
};
173175
evas_object_event_callback_add(event_layer_, EVAS_CALLBACK_MOUSE_UP,
174176
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_UP],
175177
this);
176178

177-
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE] =
179+
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE] = [](void* data, Evas* evas,
180+
Evas_Object* object,
181+
void* event_info) {
182+
auto* self = reinterpret_cast<TizenViewElementary*>(data);
183+
if (self->view_) {
184+
if (self->event_layer_ == object) {
185+
auto* mouse_event =
186+
reinterpret_cast<Evas_Event_Mouse_Move*>(event_info);
187+
mouse_event->event_flags = Evas_Event_Flags(mouse_event->event_flags |
188+
EVAS_EVENT_FLAG_ON_HOLD);
189+
if (!self->scroll_hold_) {
190+
elm_object_scroll_hold_push(self->event_layer_);
191+
self->scroll_hold_ = true;
192+
}
193+
TizenGeometry geometry = self->GetGeometry();
194+
self->view_->OnPointerMove(
195+
mouse_event->cur.canvas.x - geometry.left,
196+
mouse_event->cur.canvas.y - geometry.top, mouse_event->timestamp,
197+
kFlutterPointerDeviceKindTouch, mouse_event->buttons);
198+
}
199+
}
200+
};
201+
evas_object_event_callback_add(
202+
event_layer_, EVAS_CALLBACK_MOUSE_MOVE,
203+
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE], this);
204+
205+
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_WHEEL] =
178206
[](void* data, Evas* evas, Evas_Object* object, void* event_info) {
179207
auto* self = reinterpret_cast<TizenViewElementary*>(data);
180208
if (self->view_) {
181209
if (self->event_layer_ == object) {
182-
auto* mouse_event =
183-
reinterpret_cast<Evas_Event_Mouse_Move*>(event_info);
184-
mouse_event->event_flags = Evas_Event_Flags(
185-
mouse_event->event_flags | EVAS_EVENT_FLAG_ON_HOLD);
186-
if (!self->scroll_hold_) {
187-
elm_object_scroll_hold_push(self->event_layer_);
188-
self->scroll_hold_ = true;
210+
auto* wheel_event =
211+
reinterpret_cast<Ecore_Event_Mouse_Wheel*>(event_info);
212+
double delta_x = 0.0;
213+
double delta_y = 0.0;
214+
215+
if (wheel_event->direction == kScrollDirectionVertical) {
216+
delta_y += wheel_event->z;
217+
} else if (wheel_event->direction == kScrollDirectionHorizontal) {
218+
delta_x += wheel_event->z;
189219
}
190-
self->view_->OnPointerMove(
191-
mouse_event->cur.canvas.x, mouse_event->cur.canvas.y,
192-
mouse_event->timestamp, kFlutterPointerDeviceKindTouch,
193-
mouse_event->buttons);
220+
TizenGeometry geometry = self->GetGeometry();
221+
self->view_->OnScroll(
222+
wheel_event->x - geometry.left, wheel_event->y - geometry.top,
223+
delta_x, delta_y, kScrollOffsetMultiplier,
224+
wheel_event->timestamp, kFlutterPointerDeviceKindTouch, 0);
194225
}
195226
}
196227
};
197-
evas_object_event_callback_add(
198-
event_layer_, EVAS_CALLBACK_MOUSE_MOVE,
199-
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_MOVE], this);
200-
201-
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_WHEEL] = [](void* data, Evas* evas,
202-
Evas_Object* object,
203-
void* event_info) {
204-
auto* self = reinterpret_cast<TizenViewElementary*>(data);
205-
if (self->view_) {
206-
if (self->event_layer_ == object) {
207-
auto* wheel_event =
208-
reinterpret_cast<Ecore_Event_Mouse_Wheel*>(event_info);
209-
double delta_x = 0.0;
210-
double delta_y = 0.0;
211-
212-
if (wheel_event->direction == kScrollDirectionVertical) {
213-
delta_y += wheel_event->z;
214-
} else if (wheel_event->direction == kScrollDirectionHorizontal) {
215-
delta_x += wheel_event->z;
216-
}
217-
218-
self->view_->OnScroll(wheel_event->x, wheel_event->y, delta_x, delta_y,
219-
kScrollOffsetMultiplier, wheel_event->timestamp,
220-
kFlutterPointerDeviceKindTouch, 0);
221-
}
222-
}
223-
};
224228
evas_object_event_callback_add(
225229
event_layer_, EVAS_CALLBACK_MOUSE_WHEEL,
226230
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_WHEEL], this);

0 commit comments

Comments
 (0)