cssanimatedstyle: Apply animation values after creation
This makes GtkCssAnimatedStyle immutable.
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user