Commit 7493e814 authored by Benjamin Otte's avatar Benjamin Otte

cssanimatedstyle: Apply animation values after creation

This makes GtkCssAnimatedStyle immutable.
parent a3bf9105
......@@ -435,8 +435,11 @@ gtk_css_animated_style_new (GtkCssStyle *base_style,
result = g_object_new (GTK_TYPE_CSS_ANIMATED_STYLE, NULL);
result->style = g_object_ref (base_style);
result->current_time = timestamp;
result->animations = animations;
gtk_css_animated_style_apply_animations (result, timestamp);
return GTK_CSS_STYLE (result);
}
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment