[gtk+/wip/cssnode3: 20/81] stylecontext: Get rid of stylecontext argument



commit 35206fefcc22a769465d383f3e455b8c348cf0d5
Author: Benjamin Otte <otte redhat com>
Date:   Sun Feb 1 07:33:40 2015 +0100

    stylecontext: Get rid of stylecontext argument
    
    ... to a bunch of functions.
    
    This requires a tiny change to the heuristics for the style cache - we
    now cache styles when they have the same style provider as their parent
    instead of when they have the default provider - but that change doesn't
    have any effect in practice.

 gtk/gtkstylecontext.c |   63 ++++++++++++++++++++++++-------------------------
 1 files changed, 31 insertions(+), 32 deletions(-)
---
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index bb9c645..15342dd 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -283,8 +283,7 @@ gtk_style_context_clear_property_cache (GtkStyleContext *context)
 }
 
 static GtkCssStyle *
-gtk_css_node_get_parent_style (GtkStyleContext *context,
-                               GtkCssNode      *cssnode)
+gtk_css_node_get_parent_style (GtkCssNode *cssnode)
 {
   GtkCssNode *parent;
 
@@ -627,16 +626,22 @@ gtk_style_context_has_custom_cascade (GtkStyleContext *context)
 }
 
 static gboolean
-may_use_global_parent_cache (GtkStyleContext *context)
+may_use_global_parent_cache (GtkCssNode *node)
 {
-  if (gtk_style_context_has_custom_cascade (context))
+  GtkCssNode *parent;
+  
+  parent = gtk_css_node_get_parent (node);
+  if (parent == NULL)
+    return FALSE;
+
+  if (gtk_css_node_get_style_provider (node) != gtk_css_node_get_style_provider (parent))
     return FALSE;
 
   return TRUE;
 }
 
 static GtkCssStyle *
-lookup_in_global_parent_cache (GtkStyleContext             *context,
+lookup_in_global_parent_cache (GtkCssNode                  *node,
                                GtkCssStyle                 *parent,
                                const GtkCssNodeDeclaration *decl)
 {
@@ -644,7 +649,7 @@ lookup_in_global_parent_cache (GtkStyleContext             *context,
   GtkCssStyle *style;
 
   if (parent == NULL ||
-      !may_use_global_parent_cache (context))
+      !may_use_global_parent_cache (node))
     return NULL;
 
   cache = g_object_get_data (G_OBJECT (parent), "gtk-global-cache");
@@ -679,7 +684,7 @@ may_be_stored_in_parent_cache (GtkCssStyle *style)
 }
 
 static void
-store_in_global_parent_cache (GtkStyleContext             *context,
+store_in_global_parent_cache (GtkCssNode                  *node,
                               GtkCssStyle                 *parent,
                               const GtkCssNodeDeclaration *decl,
                               GtkCssStyle                 *style)
@@ -689,7 +694,7 @@ store_in_global_parent_cache (GtkStyleContext             *context,
   g_assert (GTK_IS_CSS_STATIC_STYLE (style));
 
   if (parent == NULL ||
-      !may_use_global_parent_cache (context))
+      !may_use_global_parent_cache (node))
     return;
 
   if (!may_be_stored_in_parent_cache (style))
@@ -711,10 +716,9 @@ store_in_global_parent_cache (GtkStyleContext             *context,
 }
 
 static GtkCssStyle *
-update_properties (GtkStyleContext             *context,
-                   GtkCssNode                  *cssnode,
-                   GtkCssStyle                 *style,
-                   const GtkBitmask            *parent_changes)
+update_properties (GtkCssNode       *cssnode,
+                   GtkCssStyle      *style,
+                   const GtkBitmask *parent_changes)
 {
   const GtkCssNodeDeclaration *decl;
   GtkCssMatcher matcher;
@@ -722,10 +726,10 @@ update_properties (GtkStyleContext             *context,
   GtkCssStyle *parent;
   GtkCssStyle *result;
 
-  parent = gtk_css_node_get_parent_style (context, cssnode);
+  parent = gtk_css_node_get_parent_style (cssnode);
   decl = gtk_css_node_get_declaration (cssnode);
 
-  result = lookup_in_global_parent_cache (context, parent, decl);
+  result = lookup_in_global_parent_cache (cssnode, parent, decl);
   if (result)
     return g_object_ref (result);
 
@@ -744,16 +748,15 @@ update_properties (GtkStyleContext             *context,
 
   gtk_widget_path_free (path);
 
-  store_in_global_parent_cache (context, parent, decl, style);
+  store_in_global_parent_cache (cssnode, parent, decl, style);
 
   return result;
 }
 
 static GtkCssStyle *
-build_properties (GtkStyleContext             *context,
-                  GtkCssNode                  *cssnode,
-                  gboolean                     override_state,
-                  GtkStateFlags                state)
+build_properties (GtkCssNode    *cssnode,
+                  gboolean       override_state,
+                  GtkStateFlags  state)
 {
   const GtkCssNodeDeclaration *decl;
   GtkCssMatcher matcher;
@@ -762,9 +765,9 @@ build_properties (GtkStyleContext             *context,
   GtkCssStyle *style;
 
   decl = gtk_css_node_get_declaration (cssnode);
-  parent = gtk_css_node_get_parent_style (context, cssnode);
+  parent = gtk_css_node_get_parent_style (cssnode);
 
-  style = lookup_in_global_parent_cache (context, parent, decl);
+  style = lookup_in_global_parent_cache (cssnode, parent, decl);
   if (style)
     return g_object_ref (style);
 
@@ -783,7 +786,7 @@ build_properties (GtkStyleContext             *context,
 
   gtk_widget_path_free (path);
 
-  store_in_global_parent_cache (context, parent, decl, style);
+  store_in_global_parent_cache (cssnode, parent, decl, style);
 
   return style;
 }
@@ -803,7 +806,7 @@ gtk_style_context_lookup_style (GtkStyleContext *context)
   if (values)
     return values;
 
-  values = build_properties (context, cssnode, FALSE, 0);
+  values = build_properties (cssnode, FALSE, 0);
   
   gtk_css_node_set_style (cssnode, values);
   g_object_unref (values);
@@ -826,8 +829,7 @@ gtk_style_context_lookup_style_for_state (GtkStyleContext *context,
 
   decl = gtk_css_node_dup_declaration (context->priv->cssnode);
   gtk_css_node_declaration_set_state (&decl, state);
-  values = build_properties (context,
-                             context->priv->cssnode,
+  values = build_properties (context->priv->cssnode,
                              TRUE, state);
   gtk_css_node_declaration_unref (decl);
 
@@ -2821,7 +2823,7 @@ _gtk_style_context_validate (GtkStyleContext  *context,
     {
       GtkCssStyle *style, *static_style;
 
-      static_style = build_properties (context, cssnode, FALSE, 0);
+      static_style = build_properties (cssnode, FALSE, 0);
       style = gtk_css_animated_style_new (static_style,
                                           priv->parent ? gtk_style_context_lookup_style (priv->parent) : 
NULL,
                                           timestamp,
@@ -2845,8 +2847,7 @@ _gtk_style_context_validate (GtkStyleContext  *context,
             {
              GtkCssStyle *new_base;
               
-              new_base = update_properties (context,
-                                            cssnode,
+              new_base = update_properties (cssnode,
                                             GTK_CSS_ANIMATED_STYLE (current)->style,
                                             parent_changes);
               new_values = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (current),
@@ -2856,8 +2857,7 @@ _gtk_style_context_validate (GtkStyleContext  *context,
             }
           else
             {
-             new_values = update_properties (context,
-                                              cssnode,
+             new_values = update_properties (cssnode,
                                               current,
                                               parent_changes);
             }
@@ -2916,8 +2916,7 @@ gtk_style_context_invalidate (GtkStyleContext *context)
   gtk_css_node_set_style (context->priv->cssnode, NULL);
 
   root = gtk_style_context_get_root (context);
-  style = build_properties (context,
-                            root,
+  style = build_properties (root,
                             FALSE,
                             0);
   gtk_css_node_set_style (root, style);


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