GtkFocusOverlay *self = GTK_FOCUS_OVERLAY (overlay);
GtkWidget *focus;
graphene_rect_t bounds;
- double nx, ny;
if (!GTK_IS_NATIVE (widget))
return;
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);
}
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));
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));
}
}
}
{
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)
{