From 00a488a5b5d3bb8a9c5c755bba4152b190861a08 Mon Sep 17 00:00:00 2001 From: Yariv Barkan Date: Tue, 17 Dec 2019 13:28:17 +0200 Subject: [PATCH 1/2] gtkgesture: Fix get-center for touchpad gestures Touchpad gestures have only a single event sequence. The current 'center' of the gesture is the starting point + accumulated deltas. Update gtk_gesture_get_bounding_box_center() accordingly. --- gtk/gtkgesture.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c index 165936d7c7..5e95de0cf9 100644 --- a/gtk/gtkgesture.c +++ b/gtk/gtkgesture.c @@ -1335,12 +1335,19 @@ gtk_gesture_get_bounding_box_center (GtkGesture *gesture, gdouble *x, gdouble *y) { + const GdkEvent *last_event; GdkRectangle rect; + GdkEventSequence *sequence; g_return_val_if_fail (GTK_IS_GESTURE (gesture), FALSE); g_return_val_if_fail (x != NULL && y != NULL, FALSE); - if (!gtk_gesture_get_bounding_box (gesture, &rect)) + sequence = gtk_gesture_get_last_updated_sequence (gesture); + last_event = gtk_gesture_get_last_event (gesture, sequence); + + if (EVENT_IS_TOUCHPAD_GESTURE (last_event)) + return gtk_gesture_get_point (gesture, sequence, x, y); + else if (!gtk_gesture_get_bounding_box (gesture, &rect)) return FALSE; *x = rect.x + rect.width / 2; From 1a9b1f38a4c8ebcc025bb4cc2583aecbf62b67fc Mon Sep 17 00:00:00 2001 From: Yariv Barkan Date: Sat, 14 Dec 2019 11:27:44 +0200 Subject: [PATCH 2/2] demo: Use pinch translation in the gestures demo Add the pinch translation offset to the pinch gesture demo. That allows moving the square around in addition to the already-supported rotate and zoom. --- demos/gtk-demo/gestures.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/demos/gtk-demo/gestures.c b/demos/gtk-demo/gestures.c index 8d53ae3434..4079ed950f 100644 --- a/demos/gtk-demo/gestures.c +++ b/demos/gtk-demo/gestures.c @@ -94,9 +94,12 @@ drawing_area_draw (GtkDrawingArea *area, cairo_pattern_t *pat; cairo_matrix_t matrix; gdouble angle, scale; + gdouble x_center, y_center; + + gtk_gesture_get_bounding_box_center (GTK_GESTURE (zoom), &x_center, &y_center); cairo_get_matrix (cr, &matrix); - cairo_matrix_translate (&matrix, width / 2, height / 2); + cairo_matrix_translate (&matrix, x_center, y_center); cairo_save (cr);