inspector: Fix overlay coordinates
authorTimm Bäder <mail@baedert.org>
Wed, 20 May 2020 07:22:41 +0000 (09:22 +0200)
committerTimm Bäder <mail@baedert.org>
Wed, 20 May 2020 15:06:54 +0000 (17:06 +0200)
Get the native transform only once, for all overlays. Unfortunately we
have to undo this for the updates overlay since that one gets values
in surface coordinates.

gtk/inspector/focusoverlay.c
gtk/inspector/updatesoverlay.c
gtk/inspector/window.c

index d96181c19ff98f5854e7b9f9142362a676553c19..54231f5820c8da4af7bb04510b395fbb9ab9bbeb 100644 (file)
@@ -49,7 +49,6 @@ gtk_focus_overlay_snapshot (GtkInspectorOverlay *overlay,
   GtkFocusOverlay *self = GTK_FOCUS_OVERLAY (overlay);
   GtkWidget *focus;
   graphene_rect_t bounds;
-  double nx, ny;
 
   if (!GTK_IS_NATIVE (widget))
     return;
@@ -67,10 +66,6 @@ gtk_focus_overlay_snapshot (GtkInspectorOverlay *overlay,
   if (!gtk_widget_compute_bounds (focus, widget, &bounds))
     return;
 
-  gtk_native_get_surface_transform (GTK_NATIVE (widget), &nx, &ny);
-  bounds.origin.x += nx;
-  bounds.origin.y += ny;
-
   gtk_snapshot_append_color (snapshot, &self->color, &bounds);
 }
 
index 46e1661b81733537d65743c6a98b1503bcf9ed7c..18f1087c167cb2acac43b794a8e53942298f629e 100644 (file)
@@ -172,6 +172,14 @@ gtk_updates_overlay_snapshot (GtkInspectorOverlay *overlay,
   GtkUpdate *draw;
   gint64 now;
   GList *l;
+  double native_x, native_y;
+
+  if (!GTK_IS_NATIVE (widget))
+    return;
+
+  /* The coordinates we're getting from GdkSurface API are in GdkSurface coordinate spaces,
+   * but we're snapshotting in widget space, so we need to transform */
+  gtk_native_get_surface_transform (GTK_NATIVE (widget), &native_x, &native_y);
 
   updates = gtk_update_overlay_lookup_for_widget (self, widget, TRUE);
   now = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget));
@@ -226,7 +234,8 @@ gtk_updates_overlay_snapshot (GtkInspectorOverlay *overlay,
           cairo_region_get_rectangle (draw->region, i, &rect);
           gtk_snapshot_append_color (snapshot,
                                      &(GdkRGBA) { 1, 0, 0, 0.4 * (1 - progress) },
-                                     &GRAPHENE_RECT_INIT(rect.x, rect.y, rect.width, rect.height));
+                                     &GRAPHENE_RECT_INIT(rect.x - native_x, rect.y - native_y,
+                                                         rect.width, rect.height));
         }
     }
 }
index a06454407f485cab54baa013d88027ce10f6b58f..16431a76573a4ffa456c466c36c13f843809f0f0 100644 (file)
@@ -605,12 +605,15 @@ gtk_inspector_prepare_render (GtkWidget            *widget,
     {
       GtkSnapshot *snapshot;
       GList *l;
+      double native_x, native_y;
 
       snapshot = gtk_snapshot_new ();
       gtk_snapshot_append_node (snapshot, node);
 
+      gtk_native_get_surface_transform (GTK_NATIVE (widget), &native_x, &native_y);
+
       gtk_snapshot_save (snapshot);
-      gtk_snapshot_transform (snapshot, gtk_widget_get_transform (widget));
+      gtk_snapshot_translate (snapshot, &(graphene_point_t) { native_x, native_y });
 
       for (l = iw->overlays; l; l = l->next)
         {