Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[css-easing-2] Implement linear(...) easing function for css animations #15936

Merged
merged 1 commit into from Jul 21, 2023

Conversation

dcrousso
Copy link
Member

@dcrousso dcrousso commented Jul 19, 2023

2b0ebfa

[css-easing-2] Implement linear(...) easing function for css animations
https://bugs.webkit.org/show_bug.cgi?id=240061
<rdar://problem/93088094>

Reviewed by Dean Jackson.

Add support for the `linear()` CSS timing function <https://drafts.csswg.org/css-easing-2/#the-linear-easing-function>.

* Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::consumeLinear): Added.
(WebCore::CSSPropertyParserHelpers::consumeTimingFunction):
* Source/WebCore/css/ComputedStyleExtractor.cpp:
(WebCore::valueForAnimationTimingFunction):
Implement parsing logic for CSS `linear()` <https://drafts.csswg.org/css-easing-2/#linear-easing-function-parsing>.

* Source/WebCore/platform/animation/TimingFunction.h:
(WebCore::LinearTimingFunction::Point::operator== const): Added.
(WebCore::LinearTimingFunction::create): Added.
(WebCore::LinearTimingFunction::operator== const): Added.
(WebCore::LinearTimingFunction::points const): Added.
(WebCore::LinearTimingFunction::identity): Renamed from `sharedLinearTimingFunction`.
(WebCore::LinearTimingFunction::LinearTimingFunction): Added.
(WebCore::LinearTimingFunction::clone):
* Source/WebCore/platform/animation/TimingFunction.cpp:
(WebCore::operator<<):
(WebCore::TimingFunction::transformProgress const):
(WebCore::TimingFunction::createFromCSSValue):
(WebCore::TimingFunction::cssText const):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebCore/css/CSSTimingFunctionValue.h:
(WebCore::CSSLinearTimingFunctionValue::create): Added.
(WebCore::CSSLinearTimingFunctionValue::points const): Added.
(WebCore::CSSLinearTimingFunctionValue::CSSLinearTimingFunctionValue): Added.
* Source/WebCore/css/CSSTimingFunctionValue.cpp:
(WebCore::CSSLinearTimingFunctionValue::customCSSText const): Added.
(WebCore::CSSLinearTimingFunctionValue::equals const): Added.
* Source/WebCore/css/CSSValue.h:
(WebCore::CSSValue::isLinearTimingFunctionValue const): Added.
* Source/WebCore/css/CSSValue.cpp:
(WebCore::CSSValue::visitDerived):
Add subclasses and member variables to support CSS `linear()`.
Implement the logic to calculate the current value of a CSS `linear()` given the current progress <https://drafts.csswg.org/css-easing-2/#linear-easing-function-output>.

* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::keyframeValueListHasSingleIntervalWithLinearOrEquivalentTimingFunction):
(WebCore::GraphicsLayerCA::timingFunctionForAnimationValue):
* Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
(WebCore::toCAMediaTimingFunction):
Use renamed `identity` instead of `sharedLinearTimingFunction` since `LinearTimingFunction` can now be more than just an identity function.

* Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:
Add basic autocompletion support for `linear()` in Web Inspector.

* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-output.tentative.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-output.tentative-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-syntax.tentative.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-syntax.tentative-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-computed.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-computed-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-invalid.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-invalid-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-valid.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-valid-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/w3c-import.log:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/animations/transition-timing-function.html:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid.html:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-001.html:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-001-expected.txt:

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

06346cb

Misc iOS, tvOS & watchOS macOS Linux Windows
βœ… πŸ§ͺ style βœ… πŸ›  ios βœ… πŸ›  mac βœ… πŸ›  wpe βœ… πŸ›  wincairo
βœ… πŸ§ͺ bindings βœ… πŸ›  ios-sim βœ… πŸ›  mac-AS-debug βœ… πŸ§ͺ wpe-wk2
βœ… πŸ§ͺ webkitperl βœ… πŸ§ͺ ios-wk2 βœ… πŸ§ͺ api-mac βœ… πŸ›  gtk
βœ… πŸ§ͺ ios-wk2-wpt βœ… πŸ§ͺ mac-wk1 βœ… πŸ§ͺ gtk-wk2
βœ… πŸ§ͺ api-ios βœ… πŸ§ͺ mac-wk2 βœ… πŸ§ͺ api-gtk
βœ… πŸ›  tv ❌ πŸ§ͺ mac-AS-debug-wk2
βœ… πŸ›  tv-sim βœ… πŸ§ͺ mac-wk2-stress
βœ… πŸ›  πŸ§ͺ merge βœ… πŸ›  watch
βœ… πŸ›  watch-sim

@dcrousso dcrousso self-assigned this Jul 19, 2023
@dcrousso dcrousso added the Animations Bugs related to CSS + SVG animations and transitions label Jul 19, 2023
@dcrousso dcrousso requested review from grorg and graouts July 19, 2023 20:26
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jul 19, 2023
@dcrousso dcrousso removed the merging-blocked Applied to prevent a change from being merged label Jul 19, 2023
@dcrousso dcrousso marked this pull request as ready for review July 19, 2023 23:00

bool CSSLinearTimingFunctionValue::equals(const CSSLinearTimingFunctionValue& other) const
{
return m_points == other.m_points;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this actually check that the two Vector<LinearTimingFunction::Point>s have the same values? I guess I'm asking what LinearTimingFunction::Point is.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LinearTimingFunction::Point is basically a named tuple of double value (i.e. what the transformed/animated value should be) and double progress (i.e. at what point in the transition/animation). it has it's own operator== so it should be using that to compare

lastPointIsExtraPoint = true;
}
} else if (steps.size() == 1) {
largestInput = 0.0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason to do this? The first time through the loop will always run this code, so you could initialise largestInput before.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh no wait, I didn't read it properly. Only runs if you didn't get a percent value. Sorry.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jul 19, 2023
@dcrousso dcrousso removed the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
@dcrousso dcrousso removed the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
@dcrousso dcrousso removed the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
Comment on lines 5908 to 5909
CSSParserTokenRange rangeCopy = range;
CSSParserTokenRange args = consumeFunction(rangeCopy);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we use auto ?

@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
@dcrousso dcrousso removed the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jul 20, 2023
@dcrousso dcrousso added merge-queue Applied to send a pull request to merge-queue and removed merging-blocked Applied to prevent a change from being merged labels Jul 21, 2023
https://bugs.webkit.org/show_bug.cgi?id=240061
<rdar://problem/93088094>

Reviewed by Dean Jackson.

Add support for the `linear()` CSS timing function <https://drafts.csswg.org/css-easing-2/#the-linear-easing-function>.

* Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::consumeLinear): Added.
(WebCore::CSSPropertyParserHelpers::consumeTimingFunction):
* Source/WebCore/css/ComputedStyleExtractor.cpp:
(WebCore::valueForAnimationTimingFunction):
Implement parsing logic for CSS `linear()` <https://drafts.csswg.org/css-easing-2/#linear-easing-function-parsing>.

* Source/WebCore/platform/animation/TimingFunction.h:
(WebCore::LinearTimingFunction::Point::operator== const): Added.
(WebCore::LinearTimingFunction::create): Added.
(WebCore::LinearTimingFunction::operator== const): Added.
(WebCore::LinearTimingFunction::points const): Added.
(WebCore::LinearTimingFunction::identity): Renamed from `sharedLinearTimingFunction`.
(WebCore::LinearTimingFunction::LinearTimingFunction): Added.
(WebCore::LinearTimingFunction::clone):
* Source/WebCore/platform/animation/TimingFunction.cpp:
(WebCore::operator<<):
(WebCore::TimingFunction::transformProgress const):
(WebCore::TimingFunction::createFromCSSValue):
(WebCore::TimingFunction::cssText const):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebCore/css/CSSTimingFunctionValue.h:
(WebCore::CSSLinearTimingFunctionValue::create): Added.
(WebCore::CSSLinearTimingFunctionValue::points const): Added.
(WebCore::CSSLinearTimingFunctionValue::CSSLinearTimingFunctionValue): Added.
* Source/WebCore/css/CSSTimingFunctionValue.cpp:
(WebCore::CSSLinearTimingFunctionValue::customCSSText const): Added.
(WebCore::CSSLinearTimingFunctionValue::equals const): Added.
* Source/WebCore/css/CSSValue.h:
(WebCore::CSSValue::isLinearTimingFunctionValue const): Added.
* Source/WebCore/css/CSSValue.cpp:
(WebCore::CSSValue::visitDerived):
Add subclasses and member variables to support CSS `linear()`.
Implement the logic to calculate the current value of a CSS `linear()` given the current progress <https://drafts.csswg.org/css-easing-2/#linear-easing-function-output>.

* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::keyframeValueListHasSingleIntervalWithLinearOrEquivalentTimingFunction):
(WebCore::GraphicsLayerCA::timingFunctionForAnimationValue):
* Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
(WebCore::toCAMediaTimingFunction):
Use renamed `identity` instead of `sharedLinearTimingFunction` since `LinearTimingFunction` can now be more than just an identity function.

* Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:
Add basic autocompletion support for `linear()` in Web Inspector.

* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-output.tentative.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-output.tentative-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-syntax.tentative.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/linear-timing-functions-syntax.tentative-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-computed.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-computed-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-invalid.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-invalid-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-valid.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/timing-functions-syntax-valid-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/css/css-easing/w3c-import.log:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/animations/transition-timing-function.html:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid.html:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-001.html:
* LayoutTests/imported/w3c/web-platform-tests/css/css-transitions/transition-001-expected.txt:

Canonical link: https://commits.webkit.org/266195@main
@webkit-commit-queue
Copy link
Collaborator

Committed 266195@main (2b0ebfa): https://commits.webkit.org/266195@main

Reviewed commits have been landed. Closing PR #15936 and removing active labels.

@webkit-commit-queue webkit-commit-queue merged commit 2b0ebfa into WebKit:main Jul 21, 2023
@webkit-commit-queue webkit-commit-queue removed the merge-queue Applied to send a pull request to merge-queue label Jul 21, 2023
@dcrousso dcrousso deleted the eng/240061 branch July 21, 2023 01:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Animations Bugs related to CSS + SVG animations and transitions
Projects
None yet
6 participants