diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2020-12-24 19:55:39 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2020-12-24 19:59:51 +0100 |
commit | cf20cfd31e31fb0d5888119ef60e68ddf7582585 (patch) | |
tree | 8c2d5e98099c326209275e6c08fa437d8e82951e | |
parent | 7e579bb59a650e61f21e9bf13fe3ded3f6b571dc (diff) | |
download | gtk+-wip/carlosg/for-master.tar.gz |
gtk/gesturestylus: Convert motion history from surface coordinateswip/carlosg/for-master
Motion history coordinates are based on GdkSurface coordinates. Transform
the coordinates from the GtkNative they are received on, accounting for the
possible transforms (e.g. due to window borders and shadows).
Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3491
-rw-r--r-- | gtk/gtkgesturestylus.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/gtk/gtkgesturestylus.c b/gtk/gtkgesturestylus.c index bd6238f3a8..2d49783baf 100644 --- a/gtk/gtkgesturestylus.c +++ b/gtk/gtkgesturestylus.c @@ -35,6 +35,7 @@ #include "gtkintl.h" #include "gtkmarshalers.h" #include "gtkmain.h" +#include "gtknative.h" G_DEFINE_TYPE (GtkGestureStylus, gtk_gesture_stylus, GTK_TYPE_GESTURE_SINGLE) @@ -319,6 +320,8 @@ gtk_gesture_stylus_get_backlog (GtkGestureStylus *gesture, GArray *backlog_array; GdkTimeCoord *history = NULL; guint n_coords = 0, i; + double surf_x, surf_y; + GtkNative *native; g_return_val_if_fail (GTK_IS_GESTURE_STYLUS (gesture), FALSE); g_return_val_if_fail (backlog != NULL && n_elems != NULL, FALSE); @@ -331,6 +334,9 @@ gtk_gesture_stylus_get_backlog (GtkGestureStylus *gesture, if (!history) return FALSE; + native = gtk_widget_get_native (gtk_get_event_widget (event)); + gtk_native_get_surface_transform (native, &surf_x, &surf_y); + backlog_array = g_array_new (FALSE, FALSE, sizeof (GdkTimeCoord)); for (i = 0; i < n_coords; i++) { @@ -339,10 +345,11 @@ gtk_gesture_stylus_get_backlog (GtkGestureStylus *gesture, g_array_append_val (backlog_array, *time_coord); time_coord = &g_array_index (backlog_array, GdkTimeCoord, backlog_array->len - 1); - if (gtk_widget_compute_point (gtk_get_event_widget (event), + + if (gtk_widget_compute_point (GTK_WIDGET (native), gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture)), - &GRAPHENE_POINT_INIT (time_coord->axes[GDK_AXIS_X], - time_coord->axes[GDK_AXIS_Y]), + &GRAPHENE_POINT_INIT (time_coord->axes[GDK_AXIS_X] - surf_x, + time_coord->axes[GDK_AXIS_Y] - surf_y), &p)) { time_coord->axes[GDK_AXIS_X] = p.x; |