mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Try to update running CSS animations when CSS rules are changed.
In the case where values in CSS rules changed directly by CSSOM, the old value in the CSS rule block is immediately replaced by the new one. So if the element, which is applied to the CSS rule, has running animations, the new value is used during cascading process in animation-only restyle. Thus in a subsequent normal restyle, we can't tell whether the value in the CSS rule has changed or not. As a result, transitions may not be triggered (bug 1393323) and CSS animations may not be cancelled if the updated animation-name is 'none' (this bug). For the latter case of CSS animations where animation-name has been updated to 'none', this patch introduces a workaround whereby we trigger an update of running animations whenever the traversal is triggered by changes to CSS rules and we have existing CSS animations.
This commit is contained in:
parent
4725a05bfb
commit
b7d7a43ce4
1 changed files with 3 additions and 3 deletions
|
@ -170,12 +170,12 @@ trait PrivateMatchMethods: TElement {
|
|||
|
||||
// If the traverse is triggered by CSS rule changes, we need to
|
||||
// try to update all CSS animations on the element if the element
|
||||
// has CSS animation style regardless of whether the animation is
|
||||
// running or not.
|
||||
// has or will have CSS animation style regardless of whether the
|
||||
// animation is running or not.
|
||||
// TODO: We should check which @keyframes changed/added/deleted
|
||||
// and update only animations corresponding to those @keyframes.
|
||||
(context.shared.traversal_flags.contains(traversal_flags::ForCSSRuleChanges) &&
|
||||
has_new_animation_style) ||
|
||||
(has_new_animation_style || has_animations)) ||
|
||||
!old_box_style.animations_equals(new_box_style) ||
|
||||
(old_display_style == display::T::none &&
|
||||
new_display_style != display::T::none &&
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue