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.
This commit is contained in:
Timm Bäder 2020-05-20 09:22:41 +02:00
parent 8e8e869853
commit a5e7e72dd8
3 changed files with 14 additions and 7 deletions

View 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);
}

View 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));
}
}
}

View 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)
{