haikuwebkit/LayoutTests/animations/spring-computed-style-expec...

61 lines
1.5 KiB
Plaintext
Raw Permalink Normal View History

Add experimental support for spring based CSS animations https://bugs.webkit.org/show_bug.cgi?id=158403 Reviewed by Dean Jackson. Source/WebCore: Adds experimental support for a new CSS animation timing function that uses spring to model the time function. To use it you replace your normal timing function, be it cubic-bezier or steps, with a new function called spring(). For instance, for a transition you would write: transition-timing-function: spring(1 100 10 0); The parameters are, in order: - Mass - Stiffness - Damping - Initial Velocity Tests: animations/spring-computed-style.html animations/spring-function.html animations/spring-parsing.html * WebCore.xcodeproj/project.pbxproj: Add new file. * css/CSSComputedStyleDeclaration.cpp: (WebCore::createTimingFunctionValue): Modernize and add support for the spring function. * css/CSSParser.cpp: (WebCore::CSSParserContext::CSSParserContext): (WebCore::operator==): (WebCore::CSSParser::CSSParser): (WebCore::CSSParser::parseTransformOriginShorthand): (WebCore::CSSParser::isSpringTimingFunctionEnabled): (WebCore::CSSParser::parseCubicBezierTimingFunctionValue): (WebCore::CSSParser::parseSpringTimingFunctionValue): (WebCore::CSSParser::parseAnimationTimingFunction): * css/CSSParser.h: * css/CSSParserMode.h: Add parsing support for the spring() function. * css/CSSTimingFunctionValue.cpp: (WebCore::CSSCubicBezierTimingFunctionValue::customCSSText): (WebCore::CSSCubicBezierTimingFunctionValue::equals): (WebCore::CSSStepsTimingFunctionValue::customCSSText): (WebCore::CSSStepsTimingFunctionValue::equals): (WebCore::CSSSpringTimingFunctionValue::customCSSText): (WebCore::CSSSpringTimingFunctionValue::equals): * css/CSSTimingFunctionValue.h: (WebCore::CSSSpringTimingFunctionValue::create): (WebCore::CSSSpringTimingFunctionValue::mass): (WebCore::CSSSpringTimingFunctionValue::stiffness): (WebCore::CSSSpringTimingFunctionValue::damping): (WebCore::CSSSpringTimingFunctionValue::initialVelocity): (WebCore::CSSSpringTimingFunctionValue::CSSSpringTimingFunctionValue): Modernize and add support for the spring function. * css/CSSToStyleMap.cpp: (WebCore::CSSToStyleMap::mapAnimationTimingFunction): Pipe the spring function into the animation. * css/CSSValue.cpp: (WebCore::CSSValue::equals): (WebCore::CSSValue::cssText): (WebCore::CSSValue::destroy): * css/CSSValue.h: (WebCore::CSSValue::isSpringTimingFunctionValue): Add support for the spring function. * page/Settings.in: Add a setting to control if the spring function is enabled. * page/animation/AnimationBase.cpp: (WebCore::solveSpringFunction): (WebCore::AnimationBase::progress): Add support for solving the spring function. Since the spring requires time to be absolute, get the real time by multiplying the ratio t, to the total duration. * platform/animation/TimingFunction.cpp: (WebCore::operator<<): * platform/animation/TimingFunction.h: (WebCore::TimingFunction::~TimingFunction): (WebCore::TimingFunction::isSpringTimingFunction): Add support for the spring timing function. * platform/graphics/SpringSolver.h: Added. (WebCore::SpringSolver::SpringSolver): (WebCore::SpringSolver::solve): Add a Spring solver that matches the one in CoreAnimation. * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::createAnimationFromKeyframes): (WebCore::GraphicsLayerCA::appendToUncommittedAnimations): (WebCore::GraphicsLayerCA::createBasicAnimation): (WebCore::GraphicsLayerCA::createSpringAnimation): (WebCore::GraphicsLayerCA::setupAnimation): * platform/graphics/ca/GraphicsLayerCA.h: Map animations with spring timing functions to CASpringAnimations. * platform/graphics/ca/PlatformCAAnimation.cpp: (WebCore::operator<<): (WebCore::PlatformCAAnimation::isBasicAnimation): * platform/graphics/ca/PlatformCAAnimation.h: (WebCore::PlatformCAAnimation::setActualStartTimeIfNeeded): (WebCore::PlatformCAAnimation::PlatformCAAnimation): * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm: (WebCore::toCAMediaTimingFunction): (PlatformCAAnimationCocoa::PlatformCAAnimationCocoa): (PlatformCAAnimationCocoa::setTimingFunction): (PlatformCAAnimationCocoa::copyTimingFunctionFrom): (PlatformCAAnimationCocoa::setFromValue): (PlatformCAAnimationCocoa::copyFromValueFrom): (PlatformCAAnimationCocoa::setToValue): (PlatformCAAnimationCocoa::copyToValueFrom): Add a new type of PlatformCAAnimation, Spring, which is a sub-type of Basic. Source/WebKit2: * Shared/WebCoreArgumentCoders.cpp: (IPC::ArgumentCoder<StepsTimingFunction>::decode): (IPC::ArgumentCoder<SpringTimingFunction>::encode): (IPC::ArgumentCoder<SpringTimingFunction>::decode): (IPC::ArgumentCoder<FloatPoint>::encode): * Shared/WebCoreArgumentCoders.h: * Shared/WebPreferencesDefinitions.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm: (WebKit::PlatformCAAnimationRemote::Properties::encode): (WebKit::PlatformCAAnimationRemote::Properties::decode): (WebKit::addAnimationToLayer): Pipe through support for the Spring animation. LayoutTests: * animations/script-tests/spring-computed-style.js: Added. * animations/script-tests/spring-parsing.js: Added. * animations/spring-computed-style-expected.txt: Added. * animations/spring-computed-style.html: Added. * animations/spring-function-expected.txt: Added. * animations/spring-function.html: Added. * animations/spring-parsing-expected.txt: Added. * animations/spring-parsing.html: Added. Add tests for the spring timing function. Canonical link: https://commits.webkit.org/176545@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@201759 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-06-07 18:15:31 +00:00
Test the computed style of the spring() function on the transition-timing-function property.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
Valid spring tests
Basic : spring(1 100 10 0)
PASS springStyle.cssText is 'spring(1 100 10 0)'
Negative Velocity : spring(1 100 10 -10)
PASS springStyle.cssText is 'spring(1 100 10 -10)'
Positive Velocity : spring(1 100 10 10)
PASS springStyle.cssText is 'spring(1 100 10 10)'
Zero Damping : spring(1 100 0 10)
PASS springStyle.cssText is 'spring(1 100 0 10)'
Minimum Values : spring(1 1 0 -999999)
PASS springStyle.cssText is 'spring(1 1 0 -999999)'
Floating Point Values : spring(1.5 2.3 3.7 -1.8)
PASS springStyle.cssText is 'spring(1.5 2.3 3.7 -1.8)'
Invalid spring tests
No parameters : spring()
PASS springStyle.cssText is 'ease'
Not enough parameters : spring(1 100 10)
PASS springStyle.cssText is 'ease'
Too many parameters : spring(1 100 10 0 0)
PASS springStyle.cssText is 'ease'
Non-numeric parameters : spring(a b c d)
PASS springStyle.cssText is 'ease'
Illegal Mass (< 0) : spring(-1 100 10 0)
PASS springStyle.cssText is 'ease'
Illegal Mass (== 0) : spring(0 100 10 0)
PASS springStyle.cssText is 'ease'
Illegal Stiffness (< 0) : spring(1 -1 10 0)
PASS springStyle.cssText is 'ease'
Illegal Stiffness (== 0) : spring(1 0 10 0)
PASS springStyle.cssText is 'ease'
Illegal Damping (< 0) : spring(1 100 -1 0)
PASS springStyle.cssText is 'ease'
PASS successfullyParsed is true
TEST COMPLETE