Title: [287826] trunk
Revision
287826
Author
grao...@webkit.org
Date
2022-01-09 11:51:57 -0800 (Sun, 09 Jan 2022)

Log Message

Interpolation for the "filter" property fails with a single keyframe
https://bugs.webkit.org/show_bug.cgi?id=235019

Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

Mark WPT progressions.

* web-platform-tests/css/filter-effects/animation/filter-interpolation-001-expected.txt:

Source/WebCore:

In the case of an animation with a single keyframe, the 0% or 100% value (or both) may
be implicit and the blending keyframes can have fewer than to entries. This would make
KeyframeEffect::checkForMatchingFilterFunctionLists() always store "false" values for
whether "filter" values in keyframes match and prevent any blending from happening.

In the case where we have fewer than 2 values, as long as the property is animated,
we return true.

* animation/KeyframeEffect.cpp:
(WebCore::KeyframeEffect::checkForMatchingFilterFunctionLists const):

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (287825 => 287826)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2022-01-09 18:54:29 UTC (rev 287825)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2022-01-09 19:51:57 UTC (rev 287826)
@@ -1,3 +1,14 @@
+2022-01-09  Antoine Quint  <grao...@webkit.org>
+
+        Interpolation for the "filter" property fails with a single keyframe
+        https://bugs.webkit.org/show_bug.cgi?id=235019
+
+        Reviewed by Dean Jackson.
+
+        Mark WPT progressions.
+
+        * web-platform-tests/css/filter-effects/animation/filter-interpolation-001-expected.txt:
+
 2022-01-09  Ziran Sun  <z...@igalia.com>
 
         [css-grid] Resync web-platform-tests/css/css-grid tests from upstream

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/animation/filter-interpolation-001-expected.txt (287825 => 287826)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/animation/filter-interpolation-001-expected.txt	2022-01-09 18:54:29 UTC (rev 287825)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/animation/filter-interpolation-001-expected.txt	2022-01-09 19:51:57 UTC (rev 287826)
@@ -65,12 +65,12 @@
 PASS CSS Animations: property <filter> from neutral to [hue-rotate(20deg)] at (0.6) should be [hue-rotate(16deg)]
 PASS CSS Animations: property <filter> from neutral to [hue-rotate(20deg)] at (1) should be [hue-rotate(20deg)]
 PASS CSS Animations: property <filter> from neutral to [hue-rotate(20deg)] at (1.5) should be [hue-rotate(25deg)]
-FAIL Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (-0.5) should be [hue-rotate(5deg)] assert_equals: expected "hue - rotate ( 5deg ) " but got "hue - rotate ( 20deg ) "
-FAIL Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (0) should be [hue-rotate(10deg)] assert_equals: expected "hue - rotate ( 10deg ) " but got "hue - rotate ( 20deg ) "
-FAIL Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (0.3) should be [hue-rotate(13deg)] assert_equals: expected "hue - rotate ( 13deg ) " but got "hue - rotate ( 20deg ) "
-FAIL Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (0.6) should be [hue-rotate(16deg)] assert_equals: expected "hue - rotate ( 16deg ) " but got "hue - rotate ( 20deg ) "
+PASS Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (-0.5) should be [hue-rotate(5deg)]
+PASS Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (0) should be [hue-rotate(10deg)]
+PASS Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (0.3) should be [hue-rotate(13deg)]
+PASS Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (0.6) should be [hue-rotate(16deg)]
 PASS Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (1) should be [hue-rotate(20deg)]
-FAIL Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (1.5) should be [hue-rotate(25deg)] assert_equals: expected "hue - rotate ( 25deg ) " but got "hue - rotate ( 20deg ) "
+PASS Web Animations: property <filter> from neutral to [hue-rotate(20deg)] at (1.5) should be [hue-rotate(25deg)]
 PASS CSS Transitions: property <filter> from [initial] to [hue-rotate(20deg)] at (-0.5) should be [hue-rotate(-10deg)]
 PASS CSS Transitions: property <filter> from [initial] to [hue-rotate(20deg)] at (0) should be [hue-rotate(0deg)]
 PASS CSS Transitions: property <filter> from [initial] to [hue-rotate(20deg)] at (0.3) should be [hue-rotate(6deg)]

Modified: trunk/Source/WebCore/ChangeLog (287825 => 287826)


--- trunk/Source/WebCore/ChangeLog	2022-01-09 18:54:29 UTC (rev 287825)
+++ trunk/Source/WebCore/ChangeLog	2022-01-09 19:51:57 UTC (rev 287826)
@@ -1,3 +1,21 @@
+2022-01-09  Antoine Quint  <grao...@webkit.org>
+
+        Interpolation for the "filter" property fails with a single keyframe
+        https://bugs.webkit.org/show_bug.cgi?id=235019
+
+        Reviewed by Dean Jackson.
+
+        In the case of an animation with a single keyframe, the 0% or 100% value (or both) may
+        be implicit and the blending keyframes can have fewer than to entries. This would make
+        KeyframeEffect::checkForMatchingFilterFunctionLists() always store "false" values for
+        whether "filter" values in keyframes match and prevent any blending from happening.
+
+        In the case where we have fewer than 2 values, as long as the property is animated,
+        we return true.
+
+        * animation/KeyframeEffect.cpp:
+        (WebCore::KeyframeEffect::checkForMatchingFilterFunctionLists const):
+
 2022-01-09  Sam Weinig  <wei...@apple.com>
 
         Refactor CSS property parsing helpers to be a bit more composable

Modified: trunk/Source/WebCore/animation/KeyframeEffect.cpp (287825 => 287826)


--- trunk/Source/WebCore/animation/KeyframeEffect.cpp	2022-01-09 18:54:29 UTC (rev 287825)
+++ trunk/Source/WebCore/animation/KeyframeEffect.cpp	2022-01-09 19:51:57 UTC (rev 287826)
@@ -1048,9 +1048,12 @@
 
 bool KeyframeEffect::checkForMatchingFilterFunctionLists(CSSPropertyID propertyID, const std::function<const FilterOperations& (const RenderStyle&)>& filtersGetter) const
 {
-    if (m_blendingKeyframes.size() < 2 || !m_blendingKeyframes.containsProperty(propertyID))
+    if (!m_blendingKeyframes.containsProperty(propertyID))
         return false;
 
+    if (m_blendingKeyframes.size() < 2)
+        return true;
+
     // Empty filters match anything, so find the first non-empty entry as the reference.
     size_t numKeyframes = m_blendingKeyframes.size();
     size_t firstNonEmptyKeyframeIndex = numKeyframes;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to