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

61 lines
2.3 KiB
HTML
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
<!DOCTYPE HTML>
<script src="../resources/js-test-pre.js"></script>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test the computed style of the spring() function on the transition-timing-function property.");
if (window.internals)
internals.settings.setSpringTimingFunctionEnabled(true);
// These have to be global for the test helpers to see them.
var stylesheet, springStyle;
var styleElement = document.createElement("style");
document.head.appendChild(styleElement);
stylesheet = styleElement.sheet;
var div = document.createElement(div);
div.id = "target";
document.body.appendChild(div);
function testComputedSpring(description, spring, expectedValue)
{
debug("");
debug(description + " : " + spring);
stylesheet.insertRule("#target { transition-timing-function: " + spring + "; }", 0);
springStyle = window.getComputedStyle(div).getPropertyCSSValue("transition-timing-function");
shouldBe("springStyle.cssText", "'" + expectedValue + "'");
stylesheet.deleteRule(0);
}
debug("")
debug("Valid spring tests");
debug("")
testComputedSpring("Basic", "spring(1 100 10 0)", "spring(1 100 10 0)");
testComputedSpring("Negative Velocity", "spring(1 100 10 -10)", "spring(1 100 10 -10)");
testComputedSpring("Positive Velocity", "spring(1 100 10 10)", "spring(1 100 10 10)");
testComputedSpring("Zero Damping", "spring(1 100 0 10)", "spring(1 100 0 10)");
testComputedSpring("Minimum Values", "spring(1 1 0 -999999)", "spring(1 1 0 -999999)");
testComputedSpring("Floating Point Values", "spring(1.5 2.3 3.7 -1.8)", "spring(1.5 2.3 3.7 -1.8)");
debug("")
debug("Invalid spring tests");
debug("")
testComputedSpring("No parameters", "spring()", "ease");
testComputedSpring("Not enough parameters", "spring(1 100 10)", "ease");
testComputedSpring("Too many parameters", "spring(1 100 10 0 0)", "ease");
testComputedSpring("Non-numeric parameters", "spring(a b c d)", "ease");
testComputedSpring("Illegal Mass (< 0)", "spring(-1 100 10 0)", "ease");
testComputedSpring("Illegal Mass (== 0)", "spring(0 100 10 0)", "ease");
testComputedSpring("Illegal Stiffness (< 0)", "spring(1 -1 10 0)", "ease");
testComputedSpring("Illegal Stiffness (== 0)", "spring(1 0 10 0)", "ease");
testComputedSpring("Illegal Damping (< 0)", "spring(1 100 -1 0)", "ease");
successfullyParsed = true;
</script>
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
<script src="../resources/js-test-post.js"></script>