summaryrefslogtreecommitdiff
path: root/gtk/gtkstylecontext.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2014-12-16 05:57:36 +0100
committerBenjamin Otte <otte@redhat.com>2015-01-07 14:26:47 +0100
commit7493e814a9501538d5db1e289200ed40bffdc857 (patch)
tree585735d025e1c7c6d29de8ca3bef6796cf3887be /gtk/gtkstylecontext.c
parenta3bf9105853f553943770501ae2ad13713502a54 (diff)
downloadgtk+-7493e814a9501538d5db1e289200ed40bffdc857.tar.gz
cssanimatedstyle: Apply animation values after creation
This makes GtkCssAnimatedStyle immutable.
Diffstat (limited to 'gtk/gtkstylecontext.c')
-rw-r--r--gtk/gtkstylecontext.c51
1 files changed, 21 insertions, 30 deletions
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index fb227d4b09..401a5601bc 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -2829,16 +2829,7 @@ _gtk_style_context_validate (GtkStyleContext *context,
priv->scale,
gtk_style_context_should_create_transitions (context) ? current : NULL);
- if (!GTK_IS_CSS_ANIMATED_STYLE (values) ||
- gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (values)))
- {
- change &= ~GTK_CSS_CHANGE_ANIMATE;
- }
- else
- {
- change |= GTK_CSS_CHANGE_ANIMATE;
- style_info_set_values (info, values);
- }
+ style_info_set_values (info, values);
_gtk_style_context_update_animating (context);
if (current)
@@ -2855,6 +2846,8 @@ _gtk_style_context_validate (GtkStyleContext *context,
}
else
{
+ gtk_style_context_update_cache (context, parent_changes);
+
changes = gtk_css_style_compute_dependencies (current, parent_changes);
if (!_gtk_bitmask_is_empty (changes))
{
@@ -2864,31 +2857,29 @@ _gtk_style_context_validate (GtkStyleContext *context,
update_properties (context, current, info->decl, changes);
}
- gtk_style_context_update_cache (context, parent_changes);
- }
-
- if (current)
- g_object_unref (current);
-
- if (change & GTK_CSS_CHANGE_ANIMATE &&
- gtk_style_context_is_animating (context))
- {
- GtkCssStyle *new_values;
- GtkBitmask *animation_changes;
+ if (change & GTK_CSS_CHANGE_ANIMATE &&
+ gtk_style_context_is_animating (context))
+ {
+ GtkCssStyle *new_values;
+ GtkBitmask *animation_changes;
- new_values = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (info->values), timestamp);
- animation_changes = gtk_css_style_get_difference (new_values, info->values);
- style_info_set_values (info, new_values);
- g_object_unref (new_values);
+ new_values = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (info->values), timestamp);
+ animation_changes = gtk_css_style_get_difference (new_values, info->values);
+ style_info_set_values (info, new_values);
+ g_object_unref (new_values);
- changes = _gtk_bitmask_union (changes, animation_changes);
- _gtk_bitmask_free (animation_changes);
+ changes = _gtk_bitmask_union (changes, animation_changes);
+ _gtk_bitmask_free (animation_changes);
- if (!GTK_IS_CSS_ANIMATED_STYLE (info->values) ||
- gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (info->values)))
- _gtk_style_context_update_animating (context);
+ if (!GTK_IS_CSS_ANIMATED_STYLE (info->values) ||
+ gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (info->values)))
+ _gtk_style_context_update_animating (context);
+ }
}
+ if (current)
+ g_object_unref (current);
+
if (!_gtk_bitmask_is_empty (changes))
gtk_style_context_do_invalidate (context, changes);