[gtk/matthiasc/for-master] inspector: Fix surface transform regression
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master] inspector: Fix surface transform regression
- Date: Tue, 9 Mar 2021 23:27:15 +0000 (UTC)
commit 55569071941ba4c314bedebeca4a7a5df169e11c
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Mar 9 17:42:59 2021 -0500
inspector: Fix surface transform regression
Ever since we added surface-to-widget transforms,
the autofading of the fps overlay did not work anymore,
since it was given the transient transform node, most
of the time.
Fix this by passing both the root of the node tree and
the node for the toplevel widget to prepare_render, and
hande the widget node to the overlays. Update the
affected overlays that need to have their positioning
adjusted.
gtk/gtkwidget.c | 4 +++-
gtk/inspector/updatesoverlay.c | 7 +------
gtk/inspector/window.c | 19 ++++++++++---------
gtk/inspector/window.h | 3 ++-
4 files changed, 16 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 35a695e080..60bcb9d533 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -11462,6 +11462,7 @@ gtk_widget_render (GtkWidget *widget,
GdkSurface *surface,
const cairo_region_t *region)
{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
GtkSnapshot *snapshot;
GskRenderer *renderer;
GskRenderNode *root;
@@ -11497,7 +11498,8 @@ gtk_widget_render (GtkWidget *widget,
renderer,
surface,
region,
- root);
+ root,
+ priv->render_node);
gsk_renderer_render (renderer, root, region);
diff --git a/gtk/inspector/updatesoverlay.c b/gtk/inspector/updatesoverlay.c
index cac2a1c4f3..828f7c662c 100644
--- a/gtk/inspector/updatesoverlay.c
+++ b/gtk/inspector/updatesoverlay.c
@@ -172,15 +172,10 @@ 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));
@@ -234,7 +229,7 @@ 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 - native_x, rect.y - native_y,
+ &GRAPHENE_RECT_INIT(rect.x, rect.y,
rect.width, rect.height));
}
}
diff --git a/gtk/inspector/window.c b/gtk/inspector/window.c
index 61b3a9aed9..3f0d8c031d 100644
--- a/gtk/inspector/window.c
+++ b/gtk/inspector/window.c
@@ -780,24 +780,25 @@ gtk_inspector_prepare_render (GtkWidget *widget,
GskRenderer *renderer,
GdkSurface *surface,
const cairo_region_t *region,
- GskRenderNode *node)
+ GskRenderNode *root,
+ GskRenderNode *widget_node)
{
GtkInspectorWindow *iw;
iw = gtk_inspector_window_get_for_display (gtk_widget_get_display (widget));
if (iw == NULL)
- return node;
+ return root;
/* sanity check for single-display GDK backends */
if (GTK_WIDGET (iw) == widget)
- return node;
+ return root;
gtk_inspector_recorder_record_render (GTK_INSPECTOR_RECORDER (iw->widget_recorder),
widget,
renderer,
surface,
region,
- node);
+ root);
if (iw->overlays)
{
@@ -806,7 +807,7 @@ gtk_inspector_prepare_render (GtkWidget *widget,
double native_x, native_y;
snapshot = gtk_snapshot_new ();
- gtk_snapshot_append_node (snapshot, node);
+ gtk_snapshot_append_node (snapshot, root);
gtk_native_get_surface_transform (GTK_NATIVE (widget), &native_x, &native_y);
@@ -815,16 +816,16 @@ gtk_inspector_prepare_render (GtkWidget *widget,
for (l = iw->overlays; l; l = l->next)
{
- gtk_inspector_overlay_snapshot (l->data, snapshot, node, widget);
+ gtk_inspector_overlay_snapshot (l->data, snapshot, widget_node, widget);
}
gtk_snapshot_restore (snapshot);
- gsk_render_node_unref (node);
- node = gtk_snapshot_free_to_node (snapshot);
+ gsk_render_node_unref (root);
+ root = gtk_snapshot_free_to_node (snapshot);
}
- return node;
+ return root;
}
gboolean
diff --git a/gtk/inspector/window.h b/gtk/inspector/window.h
index 5d860b2f76..90841a8ae4 100644
--- a/gtk/inspector/window.h
+++ b/gtk/inspector/window.h
@@ -154,7 +154,8 @@ GskRenderNode * gtk_inspector_prepare_render
GskRenderer
*renderer,
GdkSurface
*surface,
const cairo_region_t
*region,
- GskRenderNode
*node);
+ GskRenderNode
*root,
+ GskRenderNode
*widget_node);
gboolean gtk_inspector_handle_event (GdkEvent
*event);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]