cssanimatedstyle: Apply animation values after creation

This makes GtkCssAnimatedStyle immutable.
This commit is contained in:
Benjamin Otte
2014-12-16 05:57:36 +01:00
parent a3bf910585
commit 7493e814a9
2 changed files with 24 additions and 30 deletions

View File

@@ -435,8 +435,11 @@ gtk_css_animated_style_new (GtkCssStyle *base_style,
result = g_object_new (GTK_TYPE_CSS_ANIMATED_STYLE, NULL); result = g_object_new (GTK_TYPE_CSS_ANIMATED_STYLE, NULL);
result->style = g_object_ref (base_style); result->style = g_object_ref (base_style);
result->current_time = timestamp;
result->animations = animations; result->animations = animations;
gtk_css_animated_style_apply_animations (result, timestamp);
return GTK_CSS_STYLE (result); return GTK_CSS_STYLE (result);
} }

View File

@@ -2829,16 +2829,7 @@ _gtk_style_context_validate (GtkStyleContext *context,
priv->scale, priv->scale,
gtk_style_context_should_create_transitions (context) ? current : NULL); gtk_style_context_should_create_transitions (context) ? current : NULL);
if (!GTK_IS_CSS_ANIMATED_STYLE (values) || style_info_set_values (info, 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);
}
_gtk_style_context_update_animating (context); _gtk_style_context_update_animating (context);
if (current) if (current)
@@ -2855,6 +2846,8 @@ _gtk_style_context_validate (GtkStyleContext *context,
} }
else else
{ {
gtk_style_context_update_cache (context, parent_changes);
changes = gtk_css_style_compute_dependencies (current, parent_changes); changes = gtk_css_style_compute_dependencies (current, parent_changes);
if (!_gtk_bitmask_is_empty (changes)) if (!_gtk_bitmask_is_empty (changes))
{ {
@@ -2864,31 +2857,29 @@ _gtk_style_context_validate (GtkStyleContext *context,
update_properties (context, current, info->decl, changes); update_properties (context, current, info->decl, changes);
} }
gtk_style_context_update_cache (context, parent_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);
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 (current) if (current)
g_object_unref (current); g_object_unref (current);
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);
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_bitmask_is_empty (changes)) if (!_gtk_bitmask_is_empty (changes))
gtk_style_context_do_invalidate (context, changes); gtk_style_context_do_invalidate (context, changes);