animation_test_common.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cc/test/animation_test_common.h" 6 7#include "cc/keyframed_animation_curve.h" 8#include "cc/layer.h" 9#include "cc/layer_animation_controller.h" 10#include "cc/layer_impl.h" 11#include <public/WebTransformOperations.h> 12 13using cc::ActiveAnimation; 14using cc::AnimationCurve; 15using cc::EaseTimingFunction; 16using cc::FloatKeyframe; 17using cc::KeyframedFloatAnimationCurve; 18using cc::KeyframedTransformAnimationCurve; 19using cc::TimingFunction; 20using cc::TransformKeyframe; 21 22namespace { 23 24static int nextAnimationId = 0; 25 26template <class Target> 27int addOpacityTransition(Target& target, double duration, float startOpacity, float endOpacity, bool useTimingFunction) 28{ 29 scoped_ptr<KeyframedFloatAnimationCurve> curve(KeyframedFloatAnimationCurve::create()); 30 31 scoped_ptr<TimingFunction> func; 32 if (!useTimingFunction) 33 func = EaseTimingFunction::create(); 34 if (duration > 0) 35 curve->addKeyframe(FloatKeyframe::create(0, startOpacity, func.Pass())); 36 curve->addKeyframe(FloatKeyframe::create(duration, endOpacity, scoped_ptr<cc::TimingFunction>())); 37 38 int id = nextAnimationId++; 39 40 scoped_ptr<ActiveAnimation> animation(ActiveAnimation::create(curve.PassAs<AnimationCurve>(), id, 0, ActiveAnimation::Opacity)); 41 animation->setNeedsSynchronizedStartTime(true); 42 43 target.addAnimation(animation.Pass()); 44 return id; 45} 46 47template <class Target> 48int addAnimatedTransform(Target& target, double duration, int deltaX, int deltaY) 49{ 50 scoped_ptr<KeyframedTransformAnimationCurve> curve(KeyframedTransformAnimationCurve::create()); 51 52 if (duration > 0) { 53 WebKit::WebTransformOperations startOperations; 54 startOperations.appendTranslate(deltaX, deltaY, 0); 55 curve->addKeyframe(TransformKeyframe::create(0, startOperations, scoped_ptr<cc::TimingFunction>())); 56 } 57 58 WebKit::WebTransformOperations operations; 59 operations.appendTranslate(deltaX, deltaY, 0); 60 curve->addKeyframe(TransformKeyframe::create(duration, operations, scoped_ptr<cc::TimingFunction>())); 61 62 int id = nextAnimationId++; 63 64 scoped_ptr<ActiveAnimation> animation(ActiveAnimation::create(curve.PassAs<AnimationCurve>(), id, 0, ActiveAnimation::Transform)); 65 animation->setNeedsSynchronizedStartTime(true); 66 67 target.addAnimation(animation.Pass()); 68 return id; 69} 70 71} // namespace 72 73namespace WebKitTests { 74 75FakeFloatAnimationCurve::FakeFloatAnimationCurve() 76 : m_duration(1) 77{ 78} 79 80FakeFloatAnimationCurve::FakeFloatAnimationCurve(double duration) 81 : m_duration(duration) 82{ 83} 84 85FakeFloatAnimationCurve::~FakeFloatAnimationCurve() 86{ 87} 88 89double FakeFloatAnimationCurve::duration() const 90{ 91 return m_duration; 92} 93 94float FakeFloatAnimationCurve::getValue(double now) const 95{ 96 return 0; 97} 98 99scoped_ptr<cc::AnimationCurve> FakeFloatAnimationCurve::clone() const 100{ 101 return make_scoped_ptr(new FakeFloatAnimationCurve).PassAs<cc::AnimationCurve>(); 102} 103 104FakeTransformTransition::FakeTransformTransition(double duration) 105 : m_duration(duration) 106{ 107} 108 109FakeTransformTransition::~FakeTransformTransition() 110{ 111} 112 113double FakeTransformTransition::duration() const 114{ 115 return m_duration; 116} 117 118WebKit::WebTransformationMatrix FakeTransformTransition::getValue(double time) const 119{ 120 return WebKit::WebTransformationMatrix(); 121} 122 123scoped_ptr<cc::AnimationCurve> FakeTransformTransition::clone() const 124{ 125 return make_scoped_ptr(new FakeTransformTransition(*this)).PassAs<cc::AnimationCurve>(); 126} 127 128 129FakeFloatTransition::FakeFloatTransition(double duration, float from, float to) 130 : m_duration(duration) 131 , m_from(from) 132 , m_to(to) 133{ 134} 135 136FakeFloatTransition::~FakeFloatTransition() 137{ 138} 139 140double FakeFloatTransition::duration() const 141{ 142 return m_duration; 143} 144 145float FakeFloatTransition::getValue(double time) const 146{ 147 time /= m_duration; 148 if (time >= 1) 149 time = 1; 150 return (1 - time) * m_from + time * m_to; 151} 152 153FakeLayerAnimationControllerClient::FakeLayerAnimationControllerClient() 154 : m_opacity(0) 155{ 156} 157 158FakeLayerAnimationControllerClient::~FakeLayerAnimationControllerClient() 159{ 160} 161 162int FakeLayerAnimationControllerClient::id() const 163{ 164 return 0; 165} 166 167void FakeLayerAnimationControllerClient::setOpacityFromAnimation(float opacity) 168{ 169 m_opacity = opacity; 170} 171 172float FakeLayerAnimationControllerClient::opacity() const 173{ 174 return m_opacity; 175} 176 177void FakeLayerAnimationControllerClient::setTransformFromAnimation(const WebKit::WebTransformationMatrix& transform) 178{ 179 m_transform = transform; 180} 181 182const WebKit::WebTransformationMatrix& FakeLayerAnimationControllerClient::transform() const 183{ 184 return m_transform; 185} 186 187scoped_ptr<cc::AnimationCurve> FakeFloatTransition::clone() const 188{ 189 return make_scoped_ptr(new FakeFloatTransition(*this)).PassAs<cc::AnimationCurve>(); 190} 191 192int addOpacityTransitionToController(cc::LayerAnimationController& controller, double duration, float startOpacity, float endOpacity, bool useTimingFunction) 193{ 194 return addOpacityTransition(controller, duration, startOpacity, endOpacity, useTimingFunction); 195} 196 197int addAnimatedTransformToController(cc::LayerAnimationController& controller, double duration, int deltaX, int deltaY) 198{ 199 return addAnimatedTransform(controller, duration, deltaX, deltaY); 200} 201 202int addOpacityTransitionToLayer(cc::Layer& layer, double duration, float startOpacity, float endOpacity, bool useTimingFunction) 203{ 204 return addOpacityTransition(layer, duration, startOpacity, endOpacity, useTimingFunction); 205} 206 207int addOpacityTransitionToLayer(cc::LayerImpl& layer, double duration, float startOpacity, float endOpacity, bool useTimingFunction) 208{ 209 return addOpacityTransition(*layer.layerAnimationController(), duration, startOpacity, endOpacity, useTimingFunction); 210} 211 212int addAnimatedTransformToLayer(cc::Layer& layer, double duration, int deltaX, int deltaY) 213{ 214 return addAnimatedTransform(layer, duration, deltaX, deltaY); 215} 216 217int addAnimatedTransformToLayer(cc::LayerImpl& layer, double duration, int deltaX, int deltaY) 218{ 219 return addAnimatedTransform(*layer.layerAnimationController(), duration, deltaX, deltaY); 220} 221 222} // namespace WebKitTests 223