[gtk+/wip/cssstyle: 26/30] cssstaticstyle: Handle relevant change
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/cssstyle: 26/30] cssstaticstyle: Handle relevant change
- Date: Tue, 6 Jan 2015 00:59:42 +0000 (UTC)
commit 28c1eb1ef5a836f7918dbaf086ef7e8c331e5af4
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 c7c39f8..e0d4376 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 ();
@@ -718,8 +716,7 @@ update_properties (GtkStyleContext *context,
static GtkCssStyle *
build_properties (GtkStyleContext *context,
- const GtkCssNodeDeclaration *decl,
- GtkCssChange *out_change)
+ const GtkCssNodeDeclaration *decl)
{
GtkStyleContextPrivate *priv;
GtkCssMatcher matcher;
@@ -734,14 +731,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);
@@ -773,7 +768,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));
@@ -781,9 +776,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);
@@ -807,7 +800,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;
@@ -2733,16 +2726,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;
@@ -2818,18 +2812,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]