diff options
author | Benjamin Otte <otte@redhat.com> | 2014-12-16 05:57:36 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-01-07 14:26:47 +0100 |
commit | 7493e814a9501538d5db1e289200ed40bffdc857 (patch) | |
tree | 585735d025e1c7c6d29de8ca3bef6796cf3887be /gtk/gtkstylecontext.c | |
parent | a3bf9105853f553943770501ae2ad13713502a54 (diff) | |
download | gtk+-7493e814a9501538d5db1e289200ed40bffdc857.tar.gz |
cssanimatedstyle: Apply animation values after creation
This makes GtkCssAnimatedStyle immutable.
Diffstat (limited to 'gtk/gtkstylecontext.c')
-rw-r--r-- | gtk/gtkstylecontext.c | 51 |
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); |