mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
fix(engine/linux): update scroll handling for GTK4 events
This commit is contained in:
parent
2e062a89a9
commit
b333ec392b
@ -69,7 +69,7 @@ void fl_scrolling_manager_set_last_mouse_position(FlScrollingManager* self,
|
||||
}
|
||||
|
||||
void fl_scrolling_manager_handle_scroll_event(FlScrollingManager* self,
|
||||
GdkEventScroll* scroll_event,
|
||||
GdkEvent* event,
|
||||
gint scale_factor) {
|
||||
g_return_if_fail(FL_IS_SCROLLING_MANAGER(self));
|
||||
|
||||
@ -78,8 +78,6 @@ void fl_scrolling_manager_handle_scroll_event(FlScrollingManager* self,
|
||||
return;
|
||||
}
|
||||
|
||||
GdkEvent* event = reinterpret_cast<GdkEvent*>(scroll_event);
|
||||
|
||||
guint event_time = gdk_event_get_time(event);
|
||||
gdouble event_x = 0.0, event_y = 0.0;
|
||||
gdk_event_get_coords(event, &event_x, &event_y);
|
||||
|
||||
@ -52,7 +52,7 @@ void fl_scrolling_manager_set_last_mouse_position(FlScrollingManager* manager,
|
||||
* Inform the scrolling manager of a scroll event.
|
||||
*/
|
||||
void fl_scrolling_manager_handle_scroll_event(FlScrollingManager* manager,
|
||||
GdkEventScroll* event,
|
||||
GdkEvent* event,
|
||||
gint scale_factor);
|
||||
|
||||
/**
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#if !FLUTTER_LINUX_GTK4
|
||||
TEST(FlScrollingManagerTest, DiscreteDirectional) {
|
||||
g_autoptr(FlDartProject) project = fl_dart_project_new();
|
||||
g_autoptr(FlEngine) engine = fl_engine_new(project);
|
||||
@ -44,7 +45,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
|
||||
event->y = 8.0;
|
||||
event->device = mouse;
|
||||
event->direction = GDK_SCROLL_UP;
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 1u);
|
||||
EXPECT_EQ(pointer_events[0].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[0].y, 8.0);
|
||||
@ -54,7 +55,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
|
||||
EXPECT_EQ(pointer_events[0].scroll_delta_x, 0);
|
||||
EXPECT_EQ(pointer_events[0].scroll_delta_y, 53 * -1.0);
|
||||
event->direction = GDK_SCROLL_DOWN;
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 2u);
|
||||
EXPECT_EQ(pointer_events[1].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[1].y, 8.0);
|
||||
@ -64,7 +65,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
|
||||
EXPECT_EQ(pointer_events[1].scroll_delta_x, 0);
|
||||
EXPECT_EQ(pointer_events[1].scroll_delta_y, 53 * 1.0);
|
||||
event->direction = GDK_SCROLL_LEFT;
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 3u);
|
||||
EXPECT_EQ(pointer_events[2].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[2].y, 8.0);
|
||||
@ -74,7 +75,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
|
||||
EXPECT_EQ(pointer_events[2].scroll_delta_x, 53 * -1.0);
|
||||
EXPECT_EQ(pointer_events[2].scroll_delta_y, 0);
|
||||
event->direction = GDK_SCROLL_RIGHT;
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 4u);
|
||||
EXPECT_EQ(pointer_events[3].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[3].y, 8.0);
|
||||
@ -119,7 +120,7 @@ TEST(FlScrollingManagerTest, DiscreteScrolling) {
|
||||
event->delta_y = 2.0;
|
||||
event->device = mouse;
|
||||
event->direction = GDK_SCROLL_SMOOTH;
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 1u);
|
||||
EXPECT_EQ(pointer_events[0].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[0].y, 8.0);
|
||||
@ -164,7 +165,7 @@ TEST(FlScrollingManagerTest, Panning) {
|
||||
event->delta_y = 2.0;
|
||||
event->device = touchpad;
|
||||
event->direction = GDK_SCROLL_SMOOTH;
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 2u);
|
||||
EXPECT_EQ(pointer_events[0].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[0].y, 8.0);
|
||||
@ -180,7 +181,7 @@ TEST(FlScrollingManagerTest, Panning) {
|
||||
EXPECT_EQ(pointer_events[1].pan_y, 53 * -2.0);
|
||||
EXPECT_EQ(pointer_events[1].scale, 1.0);
|
||||
EXPECT_EQ(pointer_events[1].rotation, 0.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 3u);
|
||||
EXPECT_EQ(pointer_events[2].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[2].y, 8.0);
|
||||
@ -192,7 +193,7 @@ TEST(FlScrollingManagerTest, Panning) {
|
||||
EXPECT_EQ(pointer_events[2].scale, 1.0);
|
||||
EXPECT_EQ(pointer_events[2].rotation, 0.0);
|
||||
event->is_stop = true;
|
||||
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
|
||||
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
|
||||
EXPECT_EQ(pointer_events.size(), 4u);
|
||||
EXPECT_EQ(pointer_events[3].x, 4.0);
|
||||
EXPECT_EQ(pointer_events[3].y, 8.0);
|
||||
@ -429,3 +430,5 @@ TEST(FlScrollingManagerTest, UnsynchronizedZoomingAndRotating) {
|
||||
EXPECT_EQ(pointer_events[4].phase, kPanZoomEnd);
|
||||
EXPECT_GE(pointer_events[4].timestamp, pointer_events[3].timestamp);
|
||||
}
|
||||
|
||||
#endif // !FLUTTER_LINUX_GTK4
|
||||
|
||||
@ -364,7 +364,7 @@ static gboolean scroll_event_cb(FlView* self, GdkEventScroll* event) {
|
||||
// depend on GTK 3.24.
|
||||
|
||||
fl_scrolling_manager_handle_scroll_event(
|
||||
self->scrolling_manager, event,
|
||||
self->scrolling_manager, reinterpret_cast<GdkEvent*>(event),
|
||||
gtk_widget_get_scale_factor(GTK_WIDGET(self)));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user