Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: eb9e694c2fc9a95c38298f28b922a0844579feae
      
https://github.com/WebKit/WebKit/commit/eb9e694c2fc9a95c38298f28b922a0844579feae
  Author: Antti Koivisto <[email protected]>
  Date:   2023-01-05 (Thu, 05 Jan 2023)

  Changed paths:
    M LayoutTests/TestExpectations
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-001-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-003-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-004-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-important-001-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/keyframes-unrelated-custom-property-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-properties-values-api/animation/custom-property-animation-non-inherited-used-by-standard-property-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-properties-values-api/animation/custom-property-transition-non-inherited-used-by-standard-property-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-base-response-001-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-base-response-003-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-variables/variable-animation-from-to-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/css/css-variables/variable-animation-over-transition-expected.txt
    R 
LayoutTests/platform/glib/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-001-expected.txt
    R 
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-transitions/transition-base-response-001-expected.txt
    R 
LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/css/css-transitions/transition-base-response-001-expected.txt
    R 
LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-001-expected.txt
    R 
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/css/css-transitions/transition-base-response-001-expected.txt
    M Source/WebCore/animation/KeyframeEffectStack.cpp
    M Source/WebCore/animation/KeyframeEffectStack.h
    M Source/WebCore/animation/WebAnimationTypes.h
    M Source/WebCore/dom/Element.h
    M Source/WebCore/html/shadow/TextControlInnerElements.cpp
    M Source/WebCore/rendering/style/RenderStyle.cpp
    M Source/WebCore/rendering/style/RenderStyle.h
    M Source/WebCore/style/ElementRuleCollector.cpp
    M Source/WebCore/style/ElementRuleCollector.h
    M Source/WebCore/style/MatchResult.h
    M Source/WebCore/style/PropertyCascade.cpp
    M Source/WebCore/style/PropertyCascade.h
    M Source/WebCore/style/StyleAdjuster.h
    M Source/WebCore/style/StyleBuilder.cpp
    M Source/WebCore/style/StyleBuilder.h
    M Source/WebCore/style/StyleResolver.cpp
    M Source/WebCore/style/StyleResolver.h
    M Source/WebCore/style/StyleTreeResolver.cpp
    M Source/WebCore/style/StyleTreeResolver.h
    M Source/WebCore/style/Styleable.h

  Log Message:
  -----------
  CSS animations should participate in the cascade
https://bugs.webkit.org/show_bug.cgi?id=210963
rdar://62301534

Reviewed by Antoine Quint.

Property animation can affect other properties, for example via em units when 
animating font-size or var() when animating custom properties.
Animated values can also be overridden by !important properties.

With this patch we start applying the cascade after computing animated style. 
Only the properties that may be affected are recomputed.

* LayoutTests/TestExpectations:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-001-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-003-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-base-response-004-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/animation-important-001-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-animations/keyframes-unrelated-custom-property-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-properties-values-api/animation/custom-property-animation-non-inherited-used-by-standard-property-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-properties-values-api/animation/custom-property-transition-non-inherited-used-by-standard-property-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-base-response-001-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-base-response-003-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-variables/variable-animation-from-to-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/css/css-variables/variable-animation-over-transition-expected.txt:

A pile of progressions.

* Source/WebCore/animation/KeyframeEffectStack.cpp:
(WebCore::KeyframeEffectStack::applyKeyframeEffects):

Collected animated properties.

* Source/WebCore/animation/KeyframeEffectStack.h:
* Source/WebCore/animation/WebAnimationTypes.h:
* Source/WebCore/dom/Element.h:
* Source/WebCore/html/shadow/TextControlInnerElements.cpp:
(WebCore::TextControlInnerElement::resolveCustomStyle):
(WebCore::TextControlInnerTextElement::resolveCustomStyle):
* Source/WebCore/rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::customPropertiesEqual const):
* Source/WebCore/rendering/style/RenderStyle.h:
* Source/WebCore/style/ElementRuleCollector.cpp:
(WebCore::Style::ElementRuleCollector::ElementRuleCollector):

Switch to std::unique_ptr<MatchResult> for easier shuffling around.

(WebCore::Style::ElementRuleCollector::matchResult const):
(WebCore::Style::ElementRuleCollector::releaseMatchResult):
(WebCore::Style::ElementRuleCollector::addElementStyleProperties):
(WebCore::Style::ElementRuleCollector::declarationsForOrigin):
(WebCore::Style::ElementRuleCollector::transferMatchedRules):
(WebCore::Style::ElementRuleCollector::addMatchedProperties):
(WebCore::Style::ElementRuleCollector::addAuthorKeyframeRules):
* Source/WebCore/style/ElementRuleCollector.h:
* Source/WebCore/style/MatchResult.h:
* Source/WebCore/style/PropertyCascade.cpp:
(WebCore::Style::PropertyCascade::PropertyCascade):
(WebCore::Style::PropertyCascade::AnimationLayer::AnimationLayer):

Animations behave like a cascade layer, that's where the name of this helper 
struct comes from.

(WebCore::Style::PropertyCascade::set):
(WebCore::Style::PropertyCascade::setDeferred):
(WebCore::Style::PropertyCascade::addMatch):
(WebCore::Style::PropertyCascade::shouldApplyAfterAnimation):

Build a cascade that only contains properties that require re-resolving after 
animation.

(WebCore::Style::initializeCSSValue): Deleted.
* Source/WebCore/style/PropertyCascade.h:
(WebCore::Style::PropertyCascade::isEmpty const):

In normal cases there is nothing to apply after animations so we can bail out.

* Source/WebCore/style/StyleAdjuster.h:
* Source/WebCore/style/StyleBuilder.cpp:
(WebCore::Style::Builder::Builder):
(WebCore::Style::Builder::applyAllProperties):
* Source/WebCore/style/StyleBuilder.h:
* Source/WebCore/style/StyleResolver.cpp:
(WebCore::Style::Resolver::styleForElement):

Return the MatchResult along with the style. This allows us to reapply the 
cascade without matching the selectors again.

* Source/WebCore/style/StyleResolver.h:
(WebCore::Style::ElementStyle::ElementStyle): Deleted.
* Source/WebCore/style/StyleTreeResolver.cpp:
(WebCore::Style::TreeResolver::styleForStyleable):
(WebCore::Style::TreeResolver::resolveElement):
(WebCore::Style::TreeResolver::resolvePseudoElement):
(WebCore::Style::TreeResolver::resolveAncestorPseudoElement):
(WebCore::Style::TreeResolver::createAnimatedElementUpdate):
(WebCore::Style::TreeResolver::applyCascadeAfterAnimation):

Build and apply the cascade.

* Source/WebCore/style/StyleTreeResolver.h:
* Source/WebCore/style/Styleable.h:
(WebCore::Styleable::applyKeyframeEffects const):

Canonical link: https://commits.webkit.org/258514@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to