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.
This commit is contained in:
Benjamin Otte
2014-10-26 19:38:38 +01:00
parent ac215ffc8f
commit c7e9489e3e
3 changed files with 37 additions and 19 deletions

View File

@ -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 */
}
}

View File

@ -20,7 +20,7 @@
#include <glib-object.h>
#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 *

View File

@ -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);