[gtk+/wip/cssstyle: 26/27] cssstaticstyle: Handle relevant change



commit 5b43e372bcd843a83384c3489e5ccdfac23b5432
Author: Benjamin Otte <otte redhat com>
Date:   Tue Dec 23 08:10:30 2014 +0100

    cssstaticstyle: Handle relevant change
    
    Relevant change is returned from style lookups, so keep is with the
    object that holds those values.

 gtk/gtkcssstaticstyle.c        |   16 ++++++++++++--
 gtk/gtkcssstaticstyleprivate.h |    7 ++++-
 gtk/gtkstylecontext.c          |   41 +++++++++++++--------------------------
 3 files changed, 32 insertions(+), 32 deletions(-)
---
diff --git a/gtk/gtkcssstaticstyle.c b/gtk/gtkcssstaticstyle.c
index d849953..1a1671c 100644
--- a/gtk/gtkcssstaticstyle.c
+++ b/gtk/gtkcssstaticstyle.c
@@ -184,11 +184,11 @@ GtkCssStyle *
 gtk_css_static_style_new_compute (GtkStyleProviderPrivate *provider,
                                   const GtkCssMatcher     *matcher,
                                   int                      scale,
-                                  GtkCssStyle             *parent,
-                                  GtkCssChange            *out_change)
+                                  GtkCssStyle             *parent)
 {
   GtkCssStaticStyle *result;
   GtkCssLookup *lookup;
+  GtkCssChange change = GTK_CSS_CHANGE_ANY_SELF | GTK_CSS_CHANGE_ANY_SIBLING | GTK_CSS_CHANGE_ANY_PARENT;
 
   lookup = _gtk_css_lookup_new (NULL);
 
@@ -196,10 +196,12 @@ gtk_css_static_style_new_compute (GtkStyleProviderPrivate *provider,
     _gtk_style_provider_private_lookup (provider,
                                         matcher,
                                         lookup,
-                                        out_change);
+                                        &change);
 
   result = g_object_new (GTK_TYPE_CSS_STATIC_STYLE, NULL);
 
+  result->change = change;
+
   _gtk_css_lookup_resolve (lookup, 
                            provider,
                           scale,
@@ -238,6 +240,7 @@ gtk_css_static_style_new_update (GtkCssStaticStyle       *style,
 
   result = g_object_new (GTK_TYPE_CSS_STATIC_STYLE, NULL);
 
+  result->change = style->change;
   result->depends_on_parent = _gtk_bitmask_subtract (_gtk_bitmask_union (result->depends_on_parent, 
style->depends_on_parent),
                                                      changes);
   result->equals_parent = _gtk_bitmask_subtract (_gtk_bitmask_union (result->equals_parent, 
style->equals_parent),
@@ -327,3 +330,10 @@ gtk_css_static_style_compute_value (GtkCssStaticStyle       *style,
   _gtk_css_value_unref (specified);
 }
 
+GtkCssChange
+gtk_css_static_style_get_change (GtkCssStaticStyle *style)
+{
+  g_return_val_if_fail (GTK_IS_CSS_STATIC_STYLE (style), GTK_CSS_CHANGE_ANY);
+
+  return style->change;
+}
diff --git a/gtk/gtkcssstaticstyleprivate.h b/gtk/gtkcssstaticstyleprivate.h
index cdd0207..e7b32d1 100644
--- a/gtk/gtkcssstaticstyleprivate.h
+++ b/gtk/gtkcssstaticstyleprivate.h
@@ -46,6 +46,8 @@ struct _GtkCssStaticStyle
   GtkBitmask            *equals_parent;        /* values that equal their parent values */
   GtkBitmask            *depends_on_color;     /* values that depend on the color property */
   GtkBitmask            *depends_on_font_size; /* values that depend on the font-size property */
+
+  GtkCssChange           change;               /* change as returned by value lookup */
 };
 
 struct _GtkCssStaticStyleClass
@@ -58,8 +60,7 @@ GType                   gtk_css_static_style_get_type           (void) G_GNUC_CO
 GtkCssStyle *           gtk_css_static_style_new_compute        (GtkStyleProviderPrivate *provider,
                                                                  const GtkCssMatcher    *matcher,
                                                                  int                     scale,
-                                                                 GtkCssStyle            *parent,
-                                                                 GtkCssChange           *out_change);
+                                                                 GtkCssStyle            *parent);
 GtkCssStyle *           gtk_css_static_style_new_update         (GtkCssStaticStyle      *style,
                                                                  const GtkBitmask       *parent_changes,
                                                                  GtkStyleProviderPrivate *provider,
@@ -75,6 +76,8 @@ void                    gtk_css_static_style_compute_value      (GtkCssStaticSty
                                                                  GtkCssValue            *specified,
                                                                  GtkCssSection          *section);
 
+GtkCssChange            gtk_css_static_style_get_change         (GtkCssStaticStyle      *style);
+
 G_END_DECLS
 
 #endif /* __GTK_CSS_STATIC_STYLE_PRIVATE_H__ */
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 94f7c3f..9cb683f 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -167,7 +167,6 @@ struct _GtkStyleContextPrivate
   guint frame_clock_update_id;
   GdkFrameClock *frame_clock;
 
-  GtkCssChange relevant_changes;
   GtkCssChange pending_changes;
 
   const GtkBitmask *invalidating_context;
@@ -407,7 +406,6 @@ gtk_style_context_init (GtkStyleContext *style_context)
                                               g_object_unref);
 
   priv->screen = gdk_screen_get_default ();
-  priv->relevant_changes = GTK_CSS_CHANGE_ANY;
 
   /* Create default info store */
   priv->info = style_info_new ();
@@ -706,8 +704,7 @@ update_properties (GtkStyleContext             *context,
 
 static GtkCssStyle *
 build_properties (GtkStyleContext             *context,
-                  const GtkCssNodeDeclaration *decl,
-                  GtkCssChange                *out_change)
+                  const GtkCssNodeDeclaration *decl)
 {
   GtkStyleContextPrivate *priv;
   GtkCssMatcher matcher;
@@ -722,14 +719,12 @@ build_properties (GtkStyleContext             *context,
     style = gtk_css_static_style_new_compute (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
                                               &matcher,
                                               priv->scale,
-                                              parent,
-                                              out_change);
+                                              parent);
   else
     style = gtk_css_static_style_new_compute (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
                                               NULL,
                                               priv->scale,
-                                              parent,
-                                              out_change);
+                                              parent);
 
   gtk_widget_path_free (path);
 
@@ -761,7 +756,7 @@ style_values_lookup (GtkStyleContext *context)
           return values;
         }
 
-      values = build_properties (context, info->decl, NULL);
+      values = build_properties (context, info->decl);
       g_hash_table_insert (priv->style_values,
                            gtk_css_node_declaration_ref (info->decl),
                            g_object_ref (values));
@@ -769,9 +764,7 @@ style_values_lookup (GtkStyleContext *context)
     }
   else
     {
-      values = build_properties (context, info->decl, &priv->relevant_changes);
-      /* These flags are always relevant */
-      priv->relevant_changes |= GTK_CSS_CHANGE_SOURCE;
+      values = build_properties (context, info->decl);
     }
   
   style_info_set_values (info, values);
@@ -795,7 +788,7 @@ style_values_lookup_for_state (GtkStyleContext *context,
 
   decl = gtk_css_node_declaration_ref (context->priv->info->decl);
   gtk_css_node_declaration_set_state (&decl, state);
-  values = build_properties (context, decl, NULL);
+  values = build_properties (context, decl);
   gtk_css_node_declaration_unref (decl);
 
   return values;
@@ -2725,16 +2718,17 @@ gtk_style_context_do_invalidate (GtkStyleContext  *context,
 }
 
 static gboolean
-gtk_style_context_needs_full_revalidate (GtkStyleContext  *context,
-                                         GtkCssChange      change)
+gtk_style_context_style_needs_full_revalidate (GtkCssStyle  *style,
+                                               GtkCssChange  change)
 {
-  GtkStyleContextPrivate *priv = context->priv;
-
   /* Try to avoid invalidating if we can */
   if (change & GTK_STYLE_CONTEXT_RADICAL_CHANGE)
     return TRUE;
 
-  if (priv->relevant_changes & change)
+  if (GTK_IS_CSS_ANIMATED_STYLE (style))
+    style = GTK_CSS_ANIMATED_STYLE (style)->style;
+
+  if (gtk_css_static_style_get_change (GTK_CSS_STATIC_STYLE (style)) & change)
     return TRUE;
   else
     return FALSE;
@@ -2810,18 +2804,11 @@ _gtk_style_context_validate (GtkStyleContext  *context,
 
   /* Try to avoid invalidating if we can */
   if (current == NULL ||
-      gtk_style_context_needs_full_revalidate (context, change))
+      gtk_style_context_style_needs_full_revalidate (current, change))
     {
       GtkCssStyle *values;
 
-      if ((priv->relevant_changes & change) & ~GTK_STYLE_CONTEXT_CACHED_CHANGE)
-        {
-          gtk_style_context_clear_cache (context);
-        }
-      else
-        {
-          gtk_style_context_update_cache (context, parent_changes);
-        }
+      gtk_style_context_clear_cache (context);
 
       style_info_set_values (info, NULL);
       values = style_values_lookup (context);


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