Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 319e2fc273efed67ae7e06d3daf850fbaef86e5d
      
https://github.com/WebKit/WebKit/commit/319e2fc273efed67ae7e06d3daf850fbaef86e5d
  Author: Antoine Quint <[email protected]>
  Date:   2024-12-14 (Sat, 14 Dec 2024)

  Changed paths:
    M 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-nearest-dirty-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-root-dirty-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/siblings-with-anonymous-timelines-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/siblings-with-anonymous-timelines.html
    M 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/contain-alignment-expected.txt
    M Source/WebCore/animation/CSSAnimation.cpp
    M Source/WebCore/animation/ScrollTimeline.cpp
    M Source/WebCore/animation/ScrollTimeline.h
    M Source/WebCore/animation/ViewTimeline.cpp
    M Source/WebCore/animation/ViewTimeline.h
    M Source/WebCore/css/CSSScrollValue.h
    M Source/WebCore/css/CSSToStyleMap.cpp
    M Source/WebCore/css/CSSViewValue.h
    M Source/WebCore/css/ComputedStyleExtractor.cpp
    M Source/WebCore/platform/animation/Animation.cpp
    M Source/WebCore/platform/animation/Animation.h

  Log Message:
  -----------
  [scroll-animations] 
https://scroll-driven-animations.style/demos/parallax-carousel/css/ does not 
work
https://bugs.webkit.org/show_bug.cgi?id=284534
rdar://141356306

Reviewed by Antti Koivisto.

The Scroll-driven Animations demo at 
https://scroll-driven-animations.style/demos/parallax-carousel/css/ uses
an `animation-timeline: view()` property set via a CSS rule on a number of 
sibling `<img>` elements. In WebKit,
these elements share style.

However, the anonymous `ViewTimeline` created by `animation-timeline: view()` 
is stored on an `Animation` object
owned by `RenderStyle` through its `AnimationList` for CSS Animations accessed 
via `RenderStyle::animations()`.
If elements that are using an anonymous timeline share style, then they'll 
share their timeline even though those
need to be unique to each element.

To address this, we no longer create a `ScrollTimeline` or `ViewTimeline` when 
finding an anonymous timeline set
for the `animation-timeline` property and instead use a dedicated small struct 
for each type which we add to the
`std::variant<>` used to represent timelines on `Animation`. Then, when we deal 
with a style change on the associated
`CSSAnimation`, we create a new `ScrollTimeline` or `ViewTimeline` using the 
struct hosted on `Animation`.

This change yields a fair bit of refactoring to deal with the expanded variant 
but yields some WPT progressions as
well as fixing the demo.

We also add a new WPT test specifically testing timeline uniqueness for this 
case.

* 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-nearest-dirty-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-root-dirty-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/siblings-with-anonymous-timelines-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/siblings-with-anonymous-timelines.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/contain-alignment-expected.txt:
* Source/WebCore/animation/CSSAnimation.cpp:
(WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):
* Source/WebCore/animation/ScrollTimeline.cpp:
(WebCore::ScrollTimeline::create):
(WebCore::operator<<):
(WebCore::ScrollTimeline::createFromCSSValue): Deleted.
(WebCore::ScrollTimeline::dump const): Deleted.
(WebCore::ScrollTimeline::toCSSValue const): Deleted.
* Source/WebCore/animation/ScrollTimeline.h:
* Source/WebCore/animation/ViewTimeline.cpp:
(WebCore::ViewTimeline::createFromCSSValue): Deleted.
(WebCore::ViewTimeline::dump const): Deleted.
(WebCore::ViewTimeline::toCSSValue const): Deleted.
* Source/WebCore/animation/ViewTimeline.h:
* Source/WebCore/css/CSSScrollValue.h:
* Source/WebCore/css/CSSToStyleMap.cpp:
(WebCore::CSSToStyleMap::mapAnimationTimeline const):
* Source/WebCore/css/CSSViewValue.h:
* Source/WebCore/css/ComputedStyleExtractor.cpp:
(WebCore::valueForAnimationTimeline):
* Source/WebCore/platform/animation/Animation.cpp:
(WebCore::operator<<):
* Source/WebCore/platform/animation/Animation.h:
(WebCore::Animation::AnonymousScrollTimeline::operator== const):
(WebCore::Animation::AnonymousViewTimeline::operator== const):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to