85459538053c6a9860af0f79480fce6f63d7c3c3
[WebKit-https.git] / Source / WebKit / chromium / tests / CCAnimationTestCommon.cpp
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #include "config.h"
26
27 #include "CCAnimationTestCommon.h"
28
29 #include "GraphicsLayer.h"
30 #include "LayerChromium.h"
31 #include "TranslateTransformOperation.h"
32 #include "cc/CCKeyframedAnimationCurve.h"
33 #include "cc/CCLayerAnimationController.h"
34 #include "cc/CCLayerImpl.h"
35
36 #include <public/WebTransformOperations.h>
37
38 using namespace WebCore;
39
40 namespace {
41
42 template <class Target>
43 void addOpacityTransition(Target& target, double duration, float startOpacity, float endOpacity, bool useTimingFunction)
44 {
45     OwnPtr<CCKeyframedFloatAnimationCurve> curve(CCKeyframedFloatAnimationCurve::create());
46
47     if (duration > 0)
48         curve->addKeyframe(CCFloatKeyframe::create(0, startOpacity, useTimingFunction ? nullptr : CCEaseTimingFunction::create()));
49     curve->addKeyframe(CCFloatKeyframe::create(duration, endOpacity, nullptr));
50
51     OwnPtr<CCActiveAnimation> animation(CCActiveAnimation::create(curve.release(), 0, 0, CCActiveAnimation::Opacity));
52     animation->setNeedsSynchronizedStartTime(true);
53
54     target.addAnimation(animation.release());
55 }
56
57 template <class Target>
58 void addAnimatedTransform(Target& target, double duration, int deltaX, int deltaY)
59 {
60     static int id = 0;
61     OwnPtr<CCKeyframedTransformAnimationCurve> curve(CCKeyframedTransformAnimationCurve::create());
62
63     if (duration > 0) {
64         WebKit::WebTransformOperations startOperations;
65         startOperations.appendTranslate(deltaX, deltaY, 0);
66         curve->addKeyframe(CCTransformKeyframe::create(0, startOperations, nullptr));
67     }
68
69     WebKit::WebTransformOperations operations;
70     operations.appendTranslate(deltaX, deltaY, 0);
71     curve->addKeyframe(CCTransformKeyframe::create(duration, operations, nullptr));
72
73     OwnPtr<CCActiveAnimation> animation(CCActiveAnimation::create(curve.release(), id++, 0, CCActiveAnimation::Transform));
74     animation->setNeedsSynchronizedStartTime(true);
75
76     target.addAnimation(animation.release());
77 }
78
79 } // namespace
80
81 namespace WebKitTests {
82
83 FakeFloatAnimationCurve::FakeFloatAnimationCurve()
84 {
85 }
86
87 FakeFloatAnimationCurve::~FakeFloatAnimationCurve()
88 {
89 }
90
91 PassOwnPtr<WebCore::CCAnimationCurve> FakeFloatAnimationCurve::clone() const
92 {
93     return adoptPtr(new FakeFloatAnimationCurve);
94 }
95
96 FakeTransformTransition::FakeTransformTransition(double duration)
97     : m_duration(duration)
98 {
99 }
100
101 FakeTransformTransition::~FakeTransformTransition()
102 {
103 }
104
105 WebKit::WebTransformationMatrix FakeTransformTransition::getValue(double time) const
106 {
107     return WebKit::WebTransformationMatrix();
108 }
109
110 PassOwnPtr<WebCore::CCAnimationCurve> FakeTransformTransition::clone() const
111 {
112     return adoptPtr(new FakeTransformTransition(*this));
113 }
114
115
116 FakeFloatTransition::FakeFloatTransition(double duration, float from, float to)
117     : m_duration(duration)
118     , m_from(from)
119     , m_to(to)
120 {
121 }
122
123 FakeFloatTransition::~FakeFloatTransition()
124 {
125 }
126
127 float FakeFloatTransition::getValue(double time) const
128 {
129     time /= m_duration;
130     if (time >= 1)
131         time = 1;
132     return (1 - time) * m_from + time * m_to;
133 }
134
135 FakeLayerAnimationControllerClient::FakeLayerAnimationControllerClient()
136     : m_opacity(0)
137 {
138 }
139
140 FakeLayerAnimationControllerClient::~FakeLayerAnimationControllerClient()
141 {
142 }
143
144 PassOwnPtr<WebCore::CCAnimationCurve> FakeFloatTransition::clone() const
145 {
146     return adoptPtr(new FakeFloatTransition(*this));
147 }
148
149 void addOpacityTransitionToController(WebCore::CCLayerAnimationController& controller, double duration, float startOpacity, float endOpacity, bool useTimingFunction)
150 {
151     addOpacityTransition(controller, duration, startOpacity, endOpacity, useTimingFunction);
152 }
153
154 void addAnimatedTransformToController(WebCore::CCLayerAnimationController& controller, double duration, int deltaX, int deltaY)
155 {
156     addAnimatedTransform(controller, duration, deltaX, deltaY);
157 }
158
159 void addOpacityTransitionToLayer(WebCore::LayerChromium& layer, double duration, float startOpacity, float endOpacity, bool useTimingFunction)
160 {
161     addOpacityTransition(layer, duration, startOpacity, endOpacity, useTimingFunction);
162 }
163
164 void addOpacityTransitionToLayer(WebCore::CCLayerImpl& layer, double duration, float startOpacity, float endOpacity, bool useTimingFunction)
165 {
166     addOpacityTransition(*layer.layerAnimationController(), duration, startOpacity, endOpacity, useTimingFunction);
167 }
168
169 void addAnimatedTransformToLayer(WebCore::LayerChromium& layer, double duration, int deltaX, int deltaY)
170 {
171     addAnimatedTransform(layer, duration, deltaX, deltaY);
172 }
173
174 void addAnimatedTransformToLayer(WebCore::CCLayerImpl& layer, double duration, int deltaX, int deltaY)
175 {
176     addAnimatedTransform(*layer.layerAnimationController(), duration, deltaX, deltaY);
177 }
178
179 } // namespace WebKitTests