diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-01-03 15:34:08 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-01-03 15:36:48 -0500 |
commit | 2e921691d97c203e172cddd18aead9eb90904770 (patch) | |
tree | 1b520c89e048225fd5a2875e297f231a9743bd33 /gtk | |
parent | d0e648d4f67ae485727c0452921c18f7642b80de (diff) | |
download | gtk+-2e921691d97c203e172cddd18aead9eb90904770.tar.gz |
Redo CSS style printing
Drop the custom style printing implementation in gtkcssnode.c and
instead reuse the existing gtk_css_style_print function, extending
it a bit to suit our needs.
Instead of computing values, just recognize initial values by
having no CSS section. Also do away with the show-initial flag, and
just always filter out initial values. The flag can come back when
it is needed.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkcssnode.c | 87 | ||||
-rw-r--r-- | gtk/gtkcssstyle.c | 32 | ||||
-rw-r--r-- | gtk/gtkcssstyleprivate.h | 4 | ||||
-rw-r--r-- | gtk/gtkstylecontext.c | 4 | ||||
-rw-r--r-- | gtk/gtkstylecontext.h | 3 |
5 files changed, 29 insertions, 101 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index a828d9f8e1..676d0b27a8 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -1523,90 +1523,6 @@ gtk_css_node_get_style_provider (GtkCssNode *cssnode) return GTK_STYLE_PROVIDER_PRIVATE (_gtk_settings_get_style_cascade (gtk_settings_get_default (), 1)); } -static gboolean -gtk_css_node_has_initial_value (GtkCssNode *cssnode, - GtkCssStyleProperty *prop) -{ - GtkCssNode *parent_node; - GtkCssStyle *style, *parent_style; - GtkCssValue *value, *initial, *computed; - GtkStyleProviderPrivate *provider; - gboolean is_initial; - guint id; - - id = _gtk_css_style_property_get_id (prop); - style = gtk_css_node_get_style (cssnode); - value = gtk_css_style_get_value (style, id); - - parent_node = gtk_css_node_get_parent (cssnode); - parent_style = parent_node ? gtk_css_node_get_style (parent_node) : NULL; - provider = gtk_css_node_get_style_provider (cssnode); - - initial = _gtk_css_style_property_get_initial_value (prop); - computed = _gtk_css_value_compute (initial, id, provider, style, parent_style); - - is_initial = _gtk_css_value_equal (value, computed); - - _gtk_css_value_unref (computed); - - return is_initial; -} - -static void -append_value (GtkCssNode *cssnode, - GtkCssStyleProperty *prop, - GString *string, - guint indent) -{ - GtkCssValue *value; - GtkCssStyle *style; - GtkCssSection *section; - const char *name; - guint id; - - id = _gtk_css_style_property_get_id (prop); - name = _gtk_style_property_get_name (GTK_STYLE_PROPERTY (prop)); - style = gtk_css_node_get_style (cssnode); - value = gtk_css_style_get_value (style, id); - - g_string_append_printf (string, "%*s%s: ", indent, "", name); - - _gtk_css_value_print (value, string); - - section = gtk_css_style_get_section (style, id); - if (section) - { - g_string_append (string, " ("); - _gtk_css_section_print (section, string); - g_string_append (string, ")"); - } - - g_string_append_c (string, '\n'); -} - -static void -append_style (GtkCssNode *cssnode, - GtkStyleContextPrintFlags flags, - GString *string, - guint indent) -{ - int i; - - if (!(flags & GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE)) - return; - - for (i = 0; i < _gtk_css_style_property_get_n_properties (); i++) - { - GtkCssStyleProperty *prop; - - prop = _gtk_css_style_property_lookup_by_id (i); - - if ((flags & GTK_STYLE_CONTEXT_PRINT_SHOW_INITIAL) || - !gtk_css_node_has_initial_value (cssnode, prop)) - append_value (cssnode, prop, string, indent); - } -} - void gtk_css_node_print (GtkCssNode *cssnode, GtkStyleContextPrintFlags flags, @@ -1627,7 +1543,8 @@ gtk_css_node_print (GtkCssNode *cssnode, g_string_append_c (string, '\n'); - append_style (cssnode, flags, string, indent + 2); + if (flags & GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE) + gtk_css_style_print (gtk_css_node_get_style (cssnode), string, indent + 2, TRUE); if (flags & GTK_STYLE_CONTEXT_PRINT_RECURSE) { diff --git a/gtk/gtkcssstyle.c b/gtk/gtkcssstyle.c index d577dc79d3..812c8dc75a 100644 --- a/gtk/gtkcssstyle.c +++ b/gtk/gtkcssstyle.c @@ -114,10 +114,11 @@ gtk_css_style_is_static (GtkCssStyle *style) return GTK_CSS_STYLE_GET_CLASS (style)->is_static (style); } - void gtk_css_style_print (GtkCssStyle *style, - GString *string) + GString *string, + guint indent, + gboolean skip_initial) { guint i; @@ -126,18 +127,31 @@ gtk_css_style_print (GtkCssStyle *style, for (i = 0; i < _gtk_css_style_property_get_n_properties (); i++) { - GtkCssSection *section = gtk_css_style_get_section (style, i); - g_string_append (string, _gtk_style_property_get_name (GTK_STYLE_PROPERTY (_gtk_css_style_property_lookup_by_id (i)))); - g_string_append (string, ": "); - _gtk_css_value_print (gtk_css_style_get_value (style, i), string); - g_string_append (string, ";"); + GtkCssSection *section; + GtkCssStyleProperty *prop; + GtkCssValue *value; + const char *name; + + section = gtk_css_style_get_section (style, i); + if (!section && skip_initial) + continue; + + prop = _gtk_css_style_property_lookup_by_id (i); + name = _gtk_style_property_get_name (GTK_STYLE_PROPERTY (prop)); + value = gtk_css_style_get_value (style, i); + + g_string_append_printf (string, "%*s%s: ", indent, "", name); + _gtk_css_value_print (value, string); + g_string_append_c (string, ';'); + if (section) { g_string_append (string, " /* "); _gtk_css_section_print (section, string); g_string_append (string, " */"); } - g_string_append (string, "\n"); + + g_string_append_c (string, '\n'); } } @@ -150,7 +164,7 @@ gtk_css_style_to_string (GtkCssStyle *style) string = g_string_new (""); - gtk_css_style_print (style, string); + gtk_css_style_print (style, string, 0, FALSE); return g_string_free (string, FALSE); } diff --git a/gtk/gtkcssstyleprivate.h b/gtk/gtkcssstyleprivate.h index ff0298082f..d5cd40526b 100644 --- a/gtk/gtkcssstyleprivate.h +++ b/gtk/gtkcssstyleprivate.h @@ -71,7 +71,9 @@ gboolean gtk_css_style_is_static (GtkCssStyle char * gtk_css_style_to_string (GtkCssStyle *style); void gtk_css_style_print (GtkCssStyle *style, - GString *string); + GString *string, + guint indent, + gboolean skip_initial); G_END_DECLS diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index 30173c7c15..26b578f713 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -3226,10 +3226,6 @@ _gtk_style_context_is_background_opaque (GtkStyleContext *context) * CSS nodes starting at the style context's node * @GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE: Show the values of the * CSS properties for each node - * @GTK_STYLE_CONTEXT_PRINT_SHOW_INITIAL: Show the values of the - * CSS properties even if they match the initial value. By default, - * values are only shown if they are different from the initial - * value. * * Flags that modify the behavior of gtk_style_context_to_string(). * New values may be added to this enumeration. diff --git a/gtk/gtkstylecontext.h b/gtk/gtkstylecontext.h index d6fe5754f7..e3481b8123 100644 --- a/gtk/gtkstylecontext.h +++ b/gtk/gtkstylecontext.h @@ -1211,8 +1211,7 @@ void gtk_draw_insertion_cursor (GtkWidget *widget, typedef enum { GTK_STYLE_CONTEXT_PRINT_NONE = 0, GTK_STYLE_CONTEXT_PRINT_RECURSE = 1 << 0, - GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE = 1 << 1, - GTK_STYLE_CONTEXT_PRINT_SHOW_INITIAL = 1 << 2 + GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE = 1 << 1 } GtkStyleContextPrintFlags; GDK_AVAILABLE_IN_3_20 |