diff options
| author | Matthias Clasen <mclasen@redhat.com> | 2019-10-31 02:55:34 +0000 |
|---|---|---|
| committer | Matthias Clasen <mclasen@redhat.com> | 2019-10-31 02:55:34 +0000 |
| commit | a31a80277c747a3af6006a4ae90bc84fcc123eb5 (patch) | |
| tree | 450698301619665bbbb96ac2c82f4bdc56031fb2 | |
| parent | 9dd8652a6617d14a83815e2e13266b34b07d84d0 (diff) | |
| parent | 745a701b3d2dea18311ebd6e880c4477f2aa0047 (diff) | |
| download | gtk+-a31a80277c747a3af6006a4ae90bc84fcc123eb5.tar.gz | |
Merge branch 'fallback-rendering' into 'master'
Fallback rendering
See merge request GNOME/gtk!1152
| -rw-r--r-- | gsk/gl/gskglrenderer.c | 15 | ||||
| -rw-r--r-- | gtk/inspector/logs.c | 1 | ||||
| -rw-r--r-- | gtk/inspector/logs.ui | 6 | ||||
| -rw-r--r-- | gtk/inspector/visual.c | 53 | ||||
| -rw-r--r-- | gtk/inspector/visual.ui | 27 |
5 files changed, 91 insertions, 11 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index de9ccf1539..1e1086d761 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -36,7 +36,6 @@ #define ORTHO_NEAR_PLANE -10000 #define ORTHO_FAR_PLANE 10000 -#define HIGHLIGHT_FALLBACK 0 #define DEBUG_OPS 0 #define SHADOW_EXTRA_SIZE 4 @@ -502,12 +501,20 @@ render_fallback_node (GskGLRenderer *self, cairo_fill (cr); cairo_restore (cr); -#if HIGHLIGHT_FALLBACK - if (gsk_render_node_get_node_type (node) != GSK_CAIRO_NODE) +#if G_ENABLE_DEBUG + if (GSK_RENDERER_DEBUG_CHECK (GSK_RENDERER (self), FALLBACK)) { cairo_move_to (cr, 0, 0); cairo_rectangle (cr, 0, 0, node->bounds.size.width, node->bounds.size.height); - cairo_set_source_rgba (cr, 1, 0, 0, 1); + if (gsk_render_node_get_node_type (node) == GSK_CAIRO_NODE) + cairo_set_source_rgba (cr, 0.3, 0, 1, 0.25); + else + cairo_set_source_rgba (cr, 1, 0, 0, 0.25); + cairo_fill_preserve (cr); + if (gsk_render_node_get_node_type (node) == GSK_CAIRO_NODE) + cairo_set_source_rgba (cr, 0.3, 0, 1, 1); + else + cairo_set_source_rgba (cr, 1, 0, 0, 1); cairo_stroke (cr); } #endif diff --git a/gtk/inspector/logs.c b/gtk/inspector/logs.c index 2d4da696c8..767772eb77 100644 --- a/gtk/inspector/logs.c +++ b/gtk/inspector/logs.c @@ -194,7 +194,6 @@ gtk_inspector_logs_class_init (GtkInspectorLogsClass *klass) gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, vulkan_gsk); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, shaders); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, surface); - gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, fallback); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, glyphcache); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorLogs, actions); diff --git a/gtk/inspector/logs.ui b/gtk/inspector/logs.ui index 94dbd4f978..9c7affcfd0 100644 --- a/gtk/inspector/logs.ui +++ b/gtk/inspector/logs.ui @@ -138,12 +138,6 @@ </object> </child> <child> - <object class="GtkCheckButton" id="fallback"> - <property name="label">Fallback</property> - <signal name="toggled" handler="flag_toggled"/> - </object> - </child> - <child> <object class="GtkCheckButton" id="glyphcache"> <property name="label">Glyph Cache</property> <signal name="toggled" handler="flag_toggled"/> diff --git a/gtk/inspector/visual.c b/gtk/inspector/visual.c index ee632067e2..d11bb94c8f 100644 --- a/gtk/inspector/visual.c +++ b/gtk/inspector/visual.c @@ -36,6 +36,9 @@ #include "gtkscale.h" #include "gtkwindow.h" #include "gtklistbox.h" +#include "gskdebugprivate.h" +#include "gskrendererprivate.h" +#include "gtknative.h" #include "fallback-c89.c" @@ -74,6 +77,7 @@ struct _GtkInspectorVisualPrivate GtkWidget *debug_box; GtkWidget *fps_switch; GtkWidget *updates_switch; + GtkWidget *fallback_switch; GtkWidget *baselines_switch; GtkWidget *layout_switch; GtkWidget *resize_switch; @@ -303,6 +307,48 @@ updates_activate (GtkSwitch *sw, } static void +fallback_activate (GtkSwitch *sw, + GParamSpec *pspec, + GtkInspectorVisual *vis) +{ + GtkInspectorWindow *iw; + gboolean fallback; + guint flags; + GList *toplevels, *l; + + fallback = gtk_switch_get_active (sw); + iw = GTK_INSPECTOR_WINDOW (gtk_widget_get_root (GTK_WIDGET (vis))); + if (iw == NULL) + return; + + flags = gsk_get_debug_flags (); + if (fallback) + flags = flags | GSK_DEBUG_FALLBACK; + else + flags = flags & ~GSK_DEBUG_FALLBACK; + gsk_set_debug_flags (flags); + + toplevels = gtk_window_list_toplevels (); + for (l = toplevels; l; l = l->next) + { + GtkWidget *toplevel = l->data; + GskRenderer *renderer; + + if ((GtkRoot *)toplevel == gtk_widget_get_root (GTK_WIDGET (sw))) /* skip the inspector */ + continue; + + renderer = gtk_native_get_renderer (GTK_NATIVE (toplevel)); + if (!renderer) + continue; + + gsk_renderer_set_debug_flags (renderer, flags); + } + g_list_free (toplevels); + + redraw_everything (); +} + +static void baselines_activate (GtkSwitch *sw) { guint flags; @@ -871,6 +917,11 @@ row_activated (GtkListBox *box, GtkSwitch *sw = GTK_SWITCH (vis->priv->updates_switch); gtk_switch_set_active (sw, !gtk_switch_get_active (sw)); } + else if (gtk_widget_is_ancestor (vis->priv->fallback_switch, GTK_WIDGET (row))) + { + GtkSwitch *sw = GTK_SWITCH (vis->priv->fallback_switch); + gtk_switch_set_active (sw, !gtk_switch_get_active (sw)); + } else if (gtk_widget_is_ancestor (vis->priv->baselines_switch, GTK_WIDGET (row))) { GtkSwitch *sw = GTK_SWITCH (vis->priv->baselines_switch); @@ -1058,12 +1109,14 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass) gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, font_scale_adjustment); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, fps_switch); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, updates_switch); + gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, fallback_switch); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, baselines_switch); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, layout_switch); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, resize_switch); gtk_widget_class_bind_template_callback (widget_class, fps_activate); gtk_widget_class_bind_template_callback (widget_class, updates_activate); + gtk_widget_class_bind_template_callback (widget_class, fallback_activate); gtk_widget_class_bind_template_callback (widget_class, direction_changed); gtk_widget_class_bind_template_callback (widget_class, baselines_activate); gtk_widget_class_bind_template_callback (widget_class, layout_activate); diff --git a/gtk/inspector/visual.ui b/gtk/inspector/visual.ui index a28d070d11..ead50b6384 100644 --- a/gtk/inspector/visual.ui +++ b/gtk/inspector/visual.ui @@ -432,6 +432,32 @@ <property name="margin">10</property> <property name="spacing">40</property> <child> + <object class="GtkLabel" id="fallback_label"> + <property name="label" translatable="yes">Show Fallback Rendering</property> + <property name="halign">start</property> + <property name="valign">baseline</property> + <property name="xalign">0.0</property> + </object> + </child> + <child> + <object class="GtkSwitch" id="fallback_switch"> + <property name="halign">end</property> + <property name="valign">baseline</property> + <property name="hexpand">1</property> + <signal name="notify::active" handler="fallback_activate"/> + </object> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow"> + <child> + <object class="GtkBox"> + <property name="margin">10</property> + <property name="spacing">40</property> + <child> <object class="GtkLabel" id="baselines_label"> <property name="label" translatable="yes">Show Baselines</property> <property name="halign">start</property> @@ -586,6 +612,7 @@ <widget name="hidpi_label"/> <widget name="animation_label"/> <widget name="updates_label"/> + <widget name="fallback_label"/> <widget name="baselines_label"/> <widget name="layout_label"/> <widget name="resize_label"/> |
