summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-12-24 19:55:39 +0100
committerCarlos Garnacho <carlosg@gnome.org>2020-12-24 19:59:51 +0100
commitcf20cfd31e31fb0d5888119ef60e68ddf7582585 (patch)
tree8c2d5e98099c326209275e6c08fa437d8e82951e
parent7e579bb59a650e61f21e9bf13fe3ded3f6b571dc (diff)
downloadgtk+-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.c13
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;