[gtk/wip/baedert/single-node-window: 14/25] inspector: Fix overlay coordinates



commit a5e7e72dd8484f9bfcfb8b2d1400c314ed6f1482
Author: Timm Bäder <mail baedert org>
Date:   Wed May 20 09:22:41 2020 +0200

    inspector: Fix overlay coordinates
    
    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   |  5 -----
 gtk/inspector/updatesoverlay.c | 11 ++++++++++-
 gtk/inspector/window.c         |  5 ++++-
 3 files changed, 14 insertions(+), 7 deletions(-)
---
diff --git a/gtk/inspector/focusoverlay.c b/gtk/inspector/focusoverlay.c
index d96181c19f..54231f5820 100644
--- a/gtk/inspector/focusoverlay.c
+++ b/gtk/inspector/focusoverlay.c
@@ -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);
 }
 
diff --git a/gtk/inspector/updatesoverlay.c b/gtk/inspector/updatesoverlay.c
index 46e1661b81..18f1087c16 100644
--- a/gtk/inspector/updatesoverlay.c
+++ b/gtk/inspector/updatesoverlay.c
@@ -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));
         }
     }
 }
diff --git a/gtk/inspector/window.c b/gtk/inspector/window.c
index a06454407f..16431a7657 100644
--- a/gtk/inspector/window.c
+++ b/gtk/inspector/window.c
@@ -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)
         {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]