From c7e9489e3e9629c394ff3b3de7378bbf09ec92f0 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 26 Oct 2014 19:38:38 +0100 Subject: [PATCH] stylecontext: Use a static style when saved The only style that is animated is the style of the unsaved primary node. So there's no need to create animated style objects for the other ones. There is a bunch of ugliness in the code currently. Further commits are expected to fix them. --- gtk/gtkcsslookup.c | 35 ++++++++++++++++++++++++----------- gtk/gtkcsslookupprivate.h | 4 ++-- gtk/gtkstylecontext.c | 17 +++++++++++------ 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/gtk/gtkcsslookup.c b/gtk/gtkcsslookup.c index 0e2a952a8b..0d0920f22e 100644 --- a/gtk/gtkcsslookup.c +++ b/gtk/gtkcsslookup.c @@ -19,9 +19,11 @@ #include "gtkcsslookupprivate.h" +#include "gtkcssanimatedstyleprivate.h" +#include "gtkcssstaticstyleprivate.h" +#include "gtkcssstylepropertyprivate.h" #include "gtkcsstypesprivate.h" #include "gtkprivatetypebuiltins.h" -#include "gtkcssstylepropertyprivate.h" GtkCssLookup * _gtk_css_lookup_new (const GtkBitmask *relevant) @@ -106,15 +108,15 @@ void _gtk_css_lookup_resolve (GtkCssLookup *lookup, GtkStyleProviderPrivate *provider, int scale, - GtkCssAnimatedStyle *style, + GtkCssStyle *style, GtkCssStyle *parent_style) { guint i, n; g_return_if_fail (lookup != NULL); g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider)); - g_return_if_fail (GTK_IS_CSS_ANIMATED_STYLE (style)); - g_return_if_fail (parent_style == NULL || GTK_IS_CSS_ANIMATED_STYLE (parent_style)); + g_return_if_fail (GTK_IS_CSS_STYLE (style)); + g_return_if_fail (parent_style == NULL || GTK_IS_CSS_STYLE (parent_style)); n = _gtk_css_style_property_get_n_properties (); @@ -122,13 +124,24 @@ _gtk_css_lookup_resolve (GtkCssLookup *lookup, { if (lookup->values[i].value || _gtk_bitmask_get (lookup->missing, i)) - gtk_css_animated_style_compute_value (style, - provider, - scale, - parent_style, - i, - lookup->values[i].value, - lookup->values[i].section); + { + if (GTK_IS_CSS_ANIMATED_STYLE (style)) + gtk_css_animated_style_compute_value (GTK_CSS_ANIMATED_STYLE (style), + provider, + scale, + parent_style, + i, + lookup->values[i].value, + lookup->values[i].section); + else + gtk_css_static_style_compute_value (GTK_CSS_STATIC_STYLE (style), + provider, + scale, + parent_style, + i, + lookup->values[i].value, + lookup->values[i].section); + } /* else not a relevant property */ } } diff --git a/gtk/gtkcsslookupprivate.h b/gtk/gtkcsslookupprivate.h index 2b53e4ace6..2b0c02105b 100644 --- a/gtk/gtkcsslookupprivate.h +++ b/gtk/gtkcsslookupprivate.h @@ -20,7 +20,7 @@ #include #include "gtk/gtkbitmaskprivate.h" -#include "gtk/gtkcssanimatedstyleprivate.h" +#include "gtk/gtkcssstyleprivate.h" #include "gtk/gtkcsssection.h" @@ -51,7 +51,7 @@ void _gtk_css_lookup_set (GtkCssLookup void _gtk_css_lookup_resolve (GtkCssLookup *lookup, GtkStyleProviderPrivate *provider, int scale, - GtkCssAnimatedStyle *style, + GtkCssStyle *style, GtkCssStyle *parent_style); static inline const GtkBitmask * diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index 479bf14a3a..2b262738d7 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -24,6 +24,7 @@ #include "gtkstylecontextprivate.h" #include "gtkcontainerprivate.h" +#include "gtkcssanimatedstyleprivate.h" #include "gtkcsscolorvalueprivate.h" #include "gtkcsscornervalueprivate.h" #include "gtkcssenumvalueprivate.h" @@ -33,6 +34,7 @@ #include "gtkcssnumbervalueprivate.h" #include "gtkcssrgbavalueprivate.h" #include "gtkcssshadowsvalueprivate.h" +#include "gtkcssstaticstyleprivate.h" #include "gtkcssstylepropertyprivate.h" #include "gtkcsstransformvalueprivate.h" #include "gtkdebug.h" @@ -680,7 +682,7 @@ create_query_path (GtkStyleContext *context, static void build_properties (GtkStyleContext *context, - GtkCssStyle *values, + GtkCssStyle *style, const GtkCssNodeDeclaration *decl, const GtkBitmask *relevant_changes, GtkCssChange *out_change) @@ -704,7 +706,7 @@ build_properties (GtkStyleContext *context, _gtk_css_lookup_resolve (lookup, GTK_STYLE_PROVIDER_PRIVATE (priv->cascade), priv->scale, - GTK_CSS_ANIMATED_STYLE (values), + style, priv->parent ? style_values_lookup (priv->parent) : NULL); _gtk_css_lookup_free (lookup); @@ -734,11 +736,11 @@ style_values_lookup (GtkStyleContext *context) return values; } - values = gtk_css_animated_style_new (); - style_info_set_values (info, values); if (gtk_style_context_is_saved (context)) { +<<<<<<< HEAD + values = gtk_css_static_style_new (); g_hash_table_insert (priv->style_values, gtk_css_node_declaration_ref (info->decl), g_object_ref (values)); @@ -747,11 +749,14 @@ style_values_lookup (GtkStyleContext *context) } else { + values = gtk_css_animated_style_new (); + build_properties (context, values, info->decl, NULL, &priv->relevant_changes); /* These flags are always relevant */ priv->relevant_changes |= GTK_CSS_CHANGE_SOURCE; } - + + style_info_set_values (info, values); g_object_unref (values); return values; @@ -772,7 +777,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 = gtk_css_animated_style_new (); + values = gtk_css_static_style_new (); build_properties (context, values, decl, NULL, NULL); gtk_css_node_declaration_unref (decl);