Commit def94f03 authored by Benjamin Otte's avatar Benjamin Otte

debug: Add GTK_DEBUG=snapshot

This causes the snapshotting algorithm to dump all widget nodes into
their own container node. We then name that group accordingly (ie
"GtkSwitch<0xdeadbeef>") so you can easily see which node belongs where.

The feature is toggleable in the inspector's visual tab.

There's a few problems with it, becuse GtkSnapshot optimized container
nodes away if they are not needed, so we are losing some widgets...
parent acaa04c0
......@@ -210,6 +210,10 @@ additional environment variables.
<term>layout</term>
<listitem><para>Show layout borders</para></listitem>
</varlistentry>
<varlistentry>
<term>snapshot</term>
<listitem><para>Include debug render nodes in the generated snapshots</para></listitem>
</varlistentry>
</variablelist>
The special value <literal>all</literal> can be used to turn on all
debug options. The special value <literal>help</literal> can be used
......
......@@ -53,7 +53,8 @@ typedef enum {
GTK_DEBUG_TOUCHSCREEN = 1 << 15,
GTK_DEBUG_ACTIONS = 1 << 16,
GTK_DEBUG_RESIZE = 1 << 17,
GTK_DEBUG_LAYOUT = 1 << 18
GTK_DEBUG_LAYOUT = 1 << 18,
GTK_DEBUG_SNAPSHOT = 1 << 19
} GtkDebugFlag;
#ifdef G_ENABLE_DEBUG
......
......@@ -171,7 +171,8 @@ static const GDebugKey gtk_debug_keys[] = {
{ "touchscreen", GTK_DEBUG_TOUCHSCREEN },
{ "actions", GTK_DEBUG_ACTIONS },
{ "resize", GTK_DEBUG_RESIZE },
{ "layout", GTK_DEBUG_LAYOUT }
{ "layout", GTK_DEBUG_LAYOUT },
{ "snapshot", GTK_DEBUG_SNAPSHOT }
};
#endif /* G_ENABLE_DEBUG */
......
......@@ -15560,6 +15560,9 @@ gtk_widget_snapshot (GtkWidget *widget,
*/
mode = get_render_mode (klass);
if (GTK_DEBUG_CHECK (SNAPSHOT))
gtk_snapshot_push (snapshot, TRUE, "%s<%p>", gtk_widget_get_name (widget), widget);
if (mode == RENDER_DRAW)
{
cairo_t *cr;
......@@ -15595,6 +15598,9 @@ gtk_widget_snapshot (GtkWidget *widget,
if (opacity < 1.0)
gtk_snapshot_pop_and_append (snapshot);
}
if (GTK_DEBUG_CHECK (SNAPSHOT))
gtk_snapshot_pop_and_append (snapshot);
}
void
......
......@@ -269,6 +269,21 @@ layout_activate (GtkSwitch *sw)
redraw_everything ();
}
static void
snapshot_activate (GtkSwitch *sw)
{
guint flags;
flags = gtk_get_debug_flags ();
if (gtk_switch_get_active (sw))
flags |= GTK_DEBUG_SNAPSHOT;
else
flags &= ~GTK_DEBUG_SNAPSHOT;
gtk_set_debug_flags (flags);
}
static void
widget_resize_activate (GtkSwitch *sw)
{
......@@ -919,6 +934,7 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_bind_template_callback (widget_class, rendering_mode_changed);
gtk_widget_class_bind_template_callback (widget_class, baselines_activate);
gtk_widget_class_bind_template_callback (widget_class, layout_activate);
gtk_widget_class_bind_template_callback (widget_class, snapshot_activate);
gtk_widget_class_bind_template_callback (widget_class, widget_resize_activate);
gtk_widget_class_bind_template_callback (widget_class, software_gl_activate);
gtk_widget_class_bind_template_callback (widget_class, software_surface_activate);
......
......@@ -599,6 +599,40 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="activatable">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="margin">10</property>
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="snapshot_label">
<property name="visible">True</property>
<property name="label" translatable="yes">Snapshot Debug Nodes</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="snapshot_switch">
<property name="visible">True</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<signal name="notify::active" handler="snapshot_activate"/>
</object>
<packing>
<property name="expand">True</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
......@@ -841,6 +875,7 @@
<widget name="updates_label"/>
<widget name="baselines_label"/>
<widget name="layout_label"/>
<widget name="snapshot_label"/>
<widget name="touchscreen_label"/>
<widget name="gl_label"/>
<widget name="software_gl_label"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment