[gtk+] Redo CSS style printing



commit 2e921691d97c203e172cddd18aead9eb90904770
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jan 3 15:34:08 2016 -0500

    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.

 gtk/gtkcssnode.c         |   87 +--------------------------------------------
 gtk/gtkcssstyle.c        |   32 ++++++++++++-----
 gtk/gtkcssstyleprivate.h |    4 ++-
 gtk/gtkstylecontext.c    |    4 --
 gtk/gtkstylecontext.h    |    3 +-
 5 files changed, 29 insertions(+), 101 deletions(-)
---
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index a828d9f..676d0b2 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 d577dc7..812c8dc 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 ff02980..d5cd405 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 30173c7..26b578f 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 d6fe575..e3481b8 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]