haikuwebkit/LayoutTests/animations/animation-direction-reverse...

100 lines
2.8 KiB
HTML
Raw Permalink Normal View History

[Web Animations] Turn Web Animations with CSS integration on https://bugs.webkit.org/show_bug.cgi?id=184819 <rdar://problem/39597337> Reviewed by Dean Jackson. LayoutTests/imported/mozilla: * css-animations/test_animation-cancel.html: * css-animations/test_animation-computed-timing.html: * css-animations/test_animation-currenttime.html: * css-animations/test_animation-finish.html: * css-animations/test_animation-finished.html: * css-animations/test_animation-id.html: * css-animations/test_animation-pausing.html: * css-animations/test_animation-playstate.html: * css-animations/test_animation-ready.html: * css-animations/test_animation-reverse.html: * css-animations/test_animation-starttime.html: * css-animations/test_animations-dynamic-changes.html: * css-animations/test_cssanimation-animationname.html: * css-animations/test_document-get-animations.html: * css-animations/test_effect-target.html: * css-animations/test_element-get-animations.html: * css-animations/test_event-dispatch.html: * css-animations/test_event-order.html: * css-animations/test_keyframeeffect-getkeyframes.html: * css-animations/test_pseudoElement-get-animations.html: * css-animations/test_setting-effect.html: * css-transitions/test_animation-cancel.html: * css-transitions/test_animation-computed-timing.html: * css-transitions/test_animation-currenttime.html: * css-transitions/test_animation-finished.html: * css-transitions/test_animation-pausing.html: * css-transitions/test_animation-ready.html: * css-transitions/test_animation-starttime.html: * css-transitions/test_csstransition-transitionproperty.html: * css-transitions/test_document-get-animations.html: * css-transitions/test_effect-target.html: * css-transitions/test_element-get-animations.html: * css-transitions/test_event-dispatch.html: * css-transitions/test_keyframeeffect-getkeyframes.html: * css-transitions/test_pseudoElement-get-animations.html: * css-transitions/test_setting-effect.html: LayoutTests/imported/w3c: * web-platform-tests/css-timing-1/frames-timing-functions-output.html: * web-platform-tests/css/css-logical/animation-003.tentative.html: * web-platform-tests/css/css-scoping/keyframes-001.html: * web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context.html: * web-platform-tests/web-animations/interfaces/Animatable/animate.html: * web-platform-tests/web-animations/timing-model/animations/current-time.html: Source/WebCore: * page/RuntimeEnabledFeatures.h: Source/WebKit: * Shared/WebPreferences.yaml: Source/WebKitLegacy/mac: * WebView/WebPreferences.mm: (+[WebPreferences initialize]): Source/WebKitLegacy/win: * WebPreferences.cpp: (WebPreferences::initializeDefaultSettings): Tools: * DumpRenderTree/TestOptions.h: LayoutTests: * TestExpectations: * animations/3d/matrix-transform-type-animation.html: * animations/3d/replace-filling-transform.html: * animations/3d/transform-origin-vs-functions.html: * animations/3d/transform-perspective.html: * animations/additive-transform-animations.html: * animations/animation-border-overflow.html: * animations/animation-callback-timestamp.html: * animations/animation-controller-drt-api.html: * animations/animation-direction-alternate-reverse-expected.txt: * animations/animation-direction-alternate-reverse.html: * animations/animation-direction-reverse-fill-mode-hardware.html: * animations/animation-direction-reverse-hardware-opacity.html: * animations/animation-direction-reverse-hardware.html: * animations/animation-direction-reverse-non-hardware.html: * animations/animation-direction-reverse-timing-functions-hardware.html: * animations/animation-direction-reverse-timing-functions.html: * animations/animation-direction.html: * animations/animation-followed-by-transition.html: * animations/animation-hit-test-transform.html: * animations/animation-hit-test.html: * animations/animation-internals-api-expected.txt: Removed. * animations/animation-internals-api-multiple-keyframes-expected.txt: Removed. * animations/animation-internals-api-multiple-keyframes.html: Removed. * animations/animation-internals-api.html: Removed. * animations/animation-offscreen-to-onscreen.html: * animations/animation-playstate-paused-style-resolution.html: * animations/big-rotation-expected.txt: * animations/big-rotation.html: * animations/change-completed-animation-transform.html: * animations/change-keyframes.html: * animations/combo-transform-rotate+scale.html: * animations/cross-fade-background-image.html: * animations/cross-fade-border-image-source.html: * animations/cross-fade-list-style-image.html: * animations/cross-fade-webkit-mask-box-image.html: * animations/duplicate-keys-expected.html: * animations/duplicate-keys.html: * animations/duplicated-keyframes-name.html: * animations/fill-forwards-end-state.html: * animations/fill-mode-forwards-zero-duration-expected.txt: * animations/fill-mode-forwards-zero-duration.html: * animations/fill-mode-removed.html: * animations/font-variations/font-stretch.html: * animations/font-variations/font-style.html: * animations/font-variations/font-variation-settings-order.html: * animations/font-variations/font-variation-settings-unlike.html: * animations/font-variations/font-variation-settings.html: * animations/font-variations/font-weight.html: * animations/generic-from-to.html: * animations/import.html: * animations/keyframe-multiple-timing-functions-transform.html: * animations/keyframe-timing-functions-transform.html: * animations/keyframe-timing-functions.html: * animations/keyframe-timing-functions2.html: * animations/keyframes-comma-separated.html: * animations/keyframes-dynamic.html: * animations/keyframes-infinite-iterations.html: * animations/keyframes-invalid-keys.html: * animations/keyframes-out-of-order.html: * animations/keyframes.html: * animations/leak-document-with-css-animation.html: * animations/lineheight-animation.html: * animations/longhand-timing-function.html: * animations/matrix-anim.html: * animations/missing-from-to-transforms.html: * animations/missing-from-to.html: * animations/missing-keyframe-properties-repeating.html: * animations/missing-keyframe-properties-timing-function.html: * animations/missing-keyframe-properties.html: * animations/missing-values-first-keyframe.html: * animations/missing-values-last-keyframe.html: * animations/multiple-animations-timing-function.html: * animations/multiple-animations.html: * animations/multiple-keyframes.html: * animations/negative-delay.html: * animations/pause-crash.html: * animations/play-state-start-paused.html: * animations/resources/animation-leak-iframe.html: * animations/simultaneous-start-left.html: * animations/simultaneous-start-transform.html: * animations/spring-function.html: * animations/stacking-context-unchanged-while-running.html: * animations/stop-animation-on-suspend.html: * animations/suspend-resume-animation-events.html: * animations/timing-functions.html: * animations/transition-and-animation-1.html: * animations/transition-and-animation-2.html: * animations/transition-and-animation-3.html: * animations/trigger-container-scroll-boundaries.html: * animations/trigger-container-scroll-empty.html: * animations/trigger-container-scroll-simple.html: * animations/unanimated-style.html: * animations/unprefixed-keyframes.html: * animations/width-using-ems.html: * compositing/animation/animated-composited-inside-hidden.html: * compositing/animation/computed-style-during-delay.html: * compositing/animation/layer-for-filling-animation.html: * compositing/backing/backface-visibility-flip.html: * compositing/backing/transform-transition-from-outside-view.html: * compositing/contents-scale/animating.html: * compositing/layer-creation/animation-overlap-with-children.html: * compositing/layer-creation/mismatched-rotated-transform-animation-overlap.html: * compositing/layer-creation/mismatched-rotated-transform-transition-overlap.html: * compositing/layer-creation/mismatched-transform-transition-overlap.html: * compositing/layer-creation/multiple-keyframes-animation-overlap.html: * compositing/layer-creation/overlap-animation-clipping.html: * compositing/layer-creation/overlap-animation-container.html: * compositing/layer-creation/overlap-animation.html: * compositing/layer-creation/scale-rotation-animation-overlap.html: * compositing/layer-creation/scale-rotation-transition-overlap.html: * compositing/layer-creation/translate-animation-overlap.html: * compositing/layer-creation/translate-scale-animation-overlap.html: * compositing/layer-creation/translate-scale-transition-overlap.html: * compositing/layer-creation/translate-transition-overlap.html: * compositing/overflow/overflow-positioning.html: * compositing/reflections/animation-inside-reflection.html: * compositing/reflections/nested-reflection-animated.html: * compositing/reflections/nested-reflection-transition.html: * compositing/scrolling/touch-scroll-to-clip.html: * compositing/transitions/scale-transition-no-start.html: * compositing/transitions/singular-scale-transition.html: * compositing/visible-rect/animated-from-none.html: * compositing/visible-rect/animated.html: * css3/calc/transitions-dependent.html: * css3/calc/transitions.html: * css3/filters/backdrop/animation.html: * css3/filters/composited-during-animation.html: * css3/filters/filter-animation-from-none-hw.html: * css3/filters/filter-animation-from-none-multi-hw.html: * css3/filters/filter-animation-from-none-multi.html: * css3/filters/filter-animation-from-none.html: * css3/filters/filter-animation-hw.html: * css3/filters/filter-animation-multi-hw.html: * css3/filters/filter-animation-multi.html: * css3/filters/filter-animation.html: * css3/masking/clip-path-animation.html: * fast/animation/css-animation-resuming-when-visible-with-style-change.html: * fast/animation/css-animation-resuming-when-visible-with-style-change2.html: * fast/animation/css-animation-resuming-when-visible.html: * fast/animation/css-animation-throttling-lowPowerMode.html: * fast/animation/height-auto-transition-computed-value.html: * fast/css-generated-content/pseudo-animation.html: * fast/css-generated-content/pseudo-transition.html: * fast/filter-image/filter-image-animation.html: * fast/shapes/shape-outside-floats/shape-outside-animation.html: * fast/shapes/shape-outside-floats/shape-outside-shape-image-threshold-animation.html: * fast/shapes/shape-outside-floats/shape-outside-shape-margin-animation.html: * http/wpt/css/css-animations/start-animation-001.html: * imported/blink/transitions/transition-not-interpolable.html: * imported/blink/transitions/unprefixed-transform.html: * platform/ios/TestExpectations: * platform/win/TestExpectations: * transitions/remove-transition-style.html: * transitions/transition-drt-api-delay-expected.txt: Removed. * transitions/transition-drt-api-delay.html: Removed. * transitions/transition-drt-api-expected.txt: Removed. * transitions/transition-drt-api.html: Removed. * transitions/zero-duration-with-non-zero-delay-end.html: Canonical link: https://commits.webkit.org/204981@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236541 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-09-27 09:49:52 +00:00
<!doctype html>
Support reverse and alternate-reverse in CA animations https://bugs.webkit.org/show_bug.cgi?id=78041 Reviewed by Beth Dakin. Source/WebCore: CoreAnimation does not natively support reverse and alternate-reverse animation directions so we need to flip the animation values (keyframe keys and timing functions) that we send to GraphicsLayerCA. Unfortunately this code adds a lot of conditionals because it isn't as simple as reversing the order of keys. You also now have a different alignment of timing functions to the reversed list. New tests to cover the two new directions, making sure the timing functions are correctly inverted, and exercising fill modes. Tests: animations/animation-direction-reverse-fill-mode-hardware.html animations/animation-direction-reverse-fill-mode.html animations/animation-direction-reverse-hardware-opacity.html animations/animation-direction-reverse-hardware.html animations/animation-direction-reverse-non-hardware.html animations/animation-direction-reverse-timing-functions-hardware.html animations/animation-direction-reverse-timing-functions.html * platform/graphics/ca/GraphicsLayerCA.cpp: Handle the previously unsupported animation directions, reversing the list of values and keytimes that would be used to create the CA Animation. (WebCore::GraphicsLayerCA::addAnimation): Do not create an animation if on Windows and using a reverse direction. (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): (WebCore::GraphicsLayerCA::setupAnimation): (WebCore::GraphicsLayerCA::setAnimationEndpoints): (WebCore::GraphicsLayerCA::setAnimationKeyframes): (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints): (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes): (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints): (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes): * platform/graphics/ca/PlatformCAAnimation.h: (PlatformCAAnimation): Pass through a flag that tells the CA Animation that it should invert the timing functions. * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: (toCAMediaTimingFunction): Add a parameter that will invert the timing function coefficients if necessary. (PlatformCAAnimation::setTimingFunction): (PlatformCAAnimation::setTimingFunctions): * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: (toCACFTimingFunction): New unused parameter. LayoutTests: Tests support for reverse and alternate-reverse animations on CoreAnimation objects, as well as filling out some of the software animator tests. There are three variables to exercise: reverse vs forward direction animations, whether reversed timing functions are inverted correctly, and that fill mode respects the direction of animation. Refactored the animation test helper class so we could reuse property parsing and evaluation. * animations/animation-direction-reverse-fill-mode-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware-expected.txt: Added. * animations/animation-direction-reverse-fill-mode-hardware.html: Added. * animations/animation-direction-reverse-fill-mode.html: Added. * animations/animation-direction-reverse-hardware-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity-expected.txt: Added. * animations/animation-direction-reverse-hardware-opacity.html: Added. * animations/animation-direction-reverse-hardware.html: Added. * animations/animation-direction-reverse-non-hardware-expected.txt: Added. * animations/animation-direction-reverse-non-hardware.html: Added. * animations/animation-direction-reverse-timing-functions-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware-expected.txt: Added. * animations/animation-direction-reverse-timing-functions-hardware.html: Added. * animations/animation-direction-reverse-timing-functions.html: Added. * animations/resources/animation-test-helpers.js: (checkExpectedValue): (getPropertyValue): (comparePropertyValue): Canonical link: https://commits.webkit.org/102664@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-04-28 04:59:53 +00:00
<html>
<head>
<title>Test of -webkit-animation-direction reverse on non-composited elements</title>
<style>
body {
margin: 0;
}
.box {
position: relative;
left: 20px;
top: 10px;
height: 50px;
width: 250px;
margin-bottom: 10px;
-webkit-animation-duration: 2s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: 8;
}
.move1 {
-webkit-animation-name: move1;
background-color: blue;
color: white;
}
.move2 {
-webkit-animation-name: move2;
background-color: orange;
}
.normal {
-webkit-animation-direction: normal;
}
.alternate {
-webkit-animation-direction: alternate;
}
.reverse {
-webkit-animation-direction: reverse;
}
.alternate-reverse {
-webkit-animation-direction: alternate-reverse;
}
@-webkit-keyframes move1 {
from { left: 0px; }
to { left: 200px; }
}
@-webkit-keyframes move2 {
0% { left: 0px; }
40% { left: 160px; }
60% { left: 120px; }
100% { left: 200px; }
}
</style>
<script src="resources/animation-test-helpers.js"></script>
<script>
const expectedValues = [
// [animation-name, time, element-id, property, expected-value, tolerance]
["move1", 0.2, "box1", "left", 20, 20],
["move1", 0.2, "box2", "left", 20, 20],
["move1", 0.2, "box3", "left", 180, 20],
["move1", 0.2, "box4", "left", 180, 20],
["move1", 2.2, "box1", "left", 20, 20],
["move1", 2.2, "box2", "left", 180, 20],
["move1", 2.2, "box3", "left", 180, 20],
["move1", 2.2, "box4", "left", 20, 20],
["move2", 0.2, "box5", "left", 40, 20],
["move2", 0.2, "box6", "left", 40, 20],
["move2", 0.2, "box7", "left", 180, 20],
["move2", 0.2, "box8", "left", 180, 20],
["move2", 2.2, "box5", "left", 40, 20],
["move2", 2.2, "box6", "left", 180, 20],
["move2", 2.2, "box7", "left", 180, 20],
["move2", 2.2, "box8", "left", 40, 20],
];
runAnimationTest(expectedValues);
</script>
</head>
<body>
<div id="box1" class="box move1 normal">2 keyframes: normal</div>
<div id="box2" class="box move1 alternate">2 keyframes: alternate</div>
<div id="box3" class="box move1 reverse">2 keyframes: reverse</div>
<div id="box4" class="box move1 alternate-reverse">2 keyframes: alternate-reverse</div>
<div id="box5" class="box move2 normal">4 keyframes: normal</div>
<div id="box6" class="box move2 alternate">4 keyframes: alternate</div>
<div id="box7" class="box move2 reverse">4 keyframes: reverse</div>
<div id="box8" class="box move2 alternate-reverse">4 keyframes: alternate-reverse</div>
<div id="result"></div>
</div>
</body>
</html>