72 GdkEventScroll* scroll_event,
74 g_return_if_fail(FL_IS_SCROLLING_MANAGER(
self));
81 GdkEvent*
event =
reinterpret_cast<GdkEvent*
>(scroll_event);
83 guint event_time = gdk_event_get_time(event);
84 gdouble event_x = 0.0, event_y = 0.0;
85 gdk_event_get_coords(event, &event_x, &event_y);
86 gdouble scroll_delta_x = 0.0, scroll_delta_y = 0.0;
87 GdkScrollDirection event_direction = GDK_SCROLL_SMOOTH;
88 if (gdk_event_get_scroll_direction(event, &event_direction)) {
89 if (event_direction == GDK_SCROLL_UP) {
92 }
else if (event_direction == GDK_SCROLL_DOWN) {
95 }
else if (event_direction == GDK_SCROLL_LEFT) {
98 }
else if (event_direction == GDK_SCROLL_RIGHT) {
103 gdk_event_get_scroll_deltas(event, &scroll_delta_x, &scroll_delta_y);
108 const int kScrollOffsetMultiplier = 53;
109 scroll_delta_x *= kScrollOffsetMultiplier * scale_factor;
110 scroll_delta_y *= kScrollOffsetMultiplier * scale_factor;
112 if (gdk_device_get_source(gdk_event_get_source_device(event)) ==
113 GDK_SOURCE_TOUCHPAD) {
114 scroll_delta_x *= -1;
115 scroll_delta_y *= -1;
116 if (gdk_event_is_scroll_stop_event(event)) {
119 event_x * scale_factor, event_y * scale_factor,
kPanZoomEnd,
121 self->pan_started = FALSE;
123 if (!
self->pan_started) {
128 event_x * scale_factor, event_y * scale_factor,
kPanZoomStart, 0, 0,
132 self->pan_x += scroll_delta_x;
133 self->pan_y += scroll_delta_y;
140 self->last_x = event_x * scale_factor;
141 self->last_y = event_y * scale_factor;
void fl_engine_send_mouse_pointer_event(FlEngine *self, FlutterViewId view_id, FlutterPointerPhase phase, size_t timestamp, double x, double y, FlutterPointerDeviceKind device_kind, double scroll_delta_x, double scroll_delta_y, int64_t buttons)
void fl_engine_send_pointer_pan_zoom_event(FlEngine *self, FlutterViewId view_id, size_t timestamp, double x, double y, FlutterPointerPhase phase, double pan_x, double pan_y, double scale, double rotation)