Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 1b793da552f71613cc9d8b9b68ffe280890d2428
https://github.com/WebKit/WebKit/commit/1b793da552f71613cc9d8b9b68ffe280890d2428
Author: Antoine Quint <[email protected]>
Date: 2022-11-14 (Mon, 14 Nov 2022)
Changed paths:
M
LayoutTests/imported/w3c/web-platform-tests/web-animations/timing-model/timelines/update-and-send-events-replacement-expected.txt
M Source/WebCore/animation/KeyframeEffect.cpp
M Source/WebCore/animation/KeyframeEffect.h
M Source/WebCore/animation/KeyframeEffectStack.cpp
M Source/WebCore/rendering/style/KeyframeList.cpp
M Source/WebCore/rendering/style/KeyframeList.h
M Source/WebCore/style/StyleResolver.cpp
Log Message:
-----------
[web-animations] changing writing-mode or direction on an element that has an
animation targeting a logical property should ensure animation resolution is
scheduled
https://bugs.webkit.org/show_bug.cgi?id=247895
Reviewed by Antti Koivisto.
When an effect in an effect stack is finished and is entirely superseded by
another animation targeting the same property,
it can be removed. The procedure to remove replaced animations [0] runs as part
of the procedure to update animations and
send events, which in our code happens as a result of page rendering being
updated.
In the case where an effect targets a logical property, the *resolved* property
it targets can change if the "writing-mode"
or "direction" properties change. And if the resolved target property changes,
then the replaced state of the associated
animation may change as well. As such, we must make sure to schedule an
animation update when the resolved target property
changes.
To do this, we now track whether a KeyframeValue targets a property that was
resolved from a logical property and set that
boolean flag in Style::Resolver::styleForKeyframe(), which populates the
generated KeyframeList for both script-originated
animations and CSS Animations. CSS Transitions aren't a concern here since they
cannot change resolved property in-flight,
instead being canceled altogether if "writing-mode" or "direction" changes.
Then in KeyframeEffectStack::applyKeyframeEffects() where we already track
whether the "writing-mode" or "direction" property
changes, we ask each processed effect whether they also target a logical
property allowing us to determine whether the
resolved animated property changed and ensuring we schedule an update in such a
case.
[0] https://drafts.csswg.org/web-animations-1/#removing-replaced-animations
*
LayoutTests/imported/w3c/web-platform-tests/web-animations/timing-model/timelines/update-and-send-events-replacement-expected.txt:
* Source/WebCore/animation/KeyframeEffect.cpp:
(WebCore::KeyframeEffect::animatesDirectionAwareProperty const):
* Source/WebCore/animation/KeyframeEffect.h:
* Source/WebCore/animation/KeyframeEffectStack.cpp:
(WebCore::KeyframeEffectStack::applyKeyframeEffects):
* Source/WebCore/rendering/style/KeyframeList.cpp:
(WebCore::KeyframeList::containsDirectionAwareProperty const):
* Source/WebCore/rendering/style/KeyframeList.h:
(WebCore::KeyframeValue::KeyframeValue):
(WebCore::KeyframeValue::containsDirectionAwareProperty const):
(WebCore::KeyframeValue::setContainsDirectionAwareProperty):
* Source/WebCore/style/StyleResolver.cpp:
(WebCore::Style::Resolver::styleForKeyframe):
Canonical link: https://commits.webkit.org/256667@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes