animation_test_common.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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/animation/keyframed_animation_curve.h" 8#include "cc/animation/layer_animation_controller.h" 9#include "cc/animation/transform_operations.h" 10#include "cc/layers/layer.h" 11#include "cc/layers/layer_impl.h" 12 13using cc::Animation; 14using cc::AnimationCurve; 15using cc::EaseTimingFunction; 16using cc::FloatKeyframe; 17using cc::KeyframedFloatAnimationCurve; 18using cc::KeyframedTransformAnimationCurve; 19using cc::TimingFunction; 20using cc::TransformKeyframe; 21 22namespace cc { 23 24static int s_next_animation_id = 0; 25 26template <class Target> 27int AddOpacityTransition(Target* target, 28 double duration, 29 float start_opacity, 30 float end_opacity, 31 bool use_timing_function) { 32 scoped_ptr<KeyframedFloatAnimationCurve> 33 curve(KeyframedFloatAnimationCurve::Create()); 34 35 scoped_ptr<TimingFunction> func; 36 if (!use_timing_function) 37 func = EaseTimingFunction::Create(); 38 if (duration > 0.0) 39 curve->AddKeyframe(FloatKeyframe::Create(0.0, start_opacity, func.Pass())); 40 curve->AddKeyframe(FloatKeyframe::Create(duration, 41 end_opacity, 42 scoped_ptr<cc::TimingFunction>())); 43 44 int id = s_next_animation_id++; 45 46 scoped_ptr<Animation> animation(Animation::Create( 47 curve.PassAs<AnimationCurve>(), 48 id, 49 0, 50 Animation::Opacity)); 51 animation->set_needs_synchronized_start_time(true); 52 53 target->AddAnimation(animation.Pass()); 54 return id; 55} 56 57template <class Target> 58int AddAnimatedTransform(Target* target, 59 double duration, 60 int delta_x, 61 int delta_y) { 62 scoped_ptr<KeyframedTransformAnimationCurve> 63 curve(KeyframedTransformAnimationCurve::Create()); 64 65 if (duration > 0.0) { 66 TransformOperations start_operations; 67 start_operations.AppendTranslate(delta_x, delta_y, 0.0); 68 curve->AddKeyframe(TransformKeyframe::Create( 69 0.0, 70 start_operations, 71 scoped_ptr<cc::TimingFunction>())); 72 } 73 74 TransformOperations operations; 75 operations.AppendTranslate(delta_x, delta_y, 0.0); 76 curve->AddKeyframe(TransformKeyframe::Create( 77 duration, 78 operations, 79 scoped_ptr<cc::TimingFunction>())); 80 81 int id = s_next_animation_id++; 82 83 scoped_ptr<Animation> animation(Animation::Create( 84 curve.PassAs<AnimationCurve>(), 85 id, 0, Animation::Transform)); 86 animation->set_needs_synchronized_start_time(true); 87 88 target->AddAnimation(animation.Pass()); 89 return id; 90} 91 92FakeFloatAnimationCurve::FakeFloatAnimationCurve() 93 : duration_(1.0) 94{ 95} 96 97FakeFloatAnimationCurve::FakeFloatAnimationCurve(double duration) 98 : duration_(duration) 99{ 100} 101 102FakeFloatAnimationCurve::~FakeFloatAnimationCurve() { 103} 104 105double FakeFloatAnimationCurve::Duration() const { 106 return duration_; 107} 108 109float FakeFloatAnimationCurve::GetValue(double now) const { 110 return 0.0f; 111} 112 113scoped_ptr<cc::AnimationCurve> FakeFloatAnimationCurve::Clone() const { 114 return make_scoped_ptr( 115 new FakeFloatAnimationCurve).PassAs<cc::AnimationCurve>(); 116} 117 118FakeTransformTransition::FakeTransformTransition(double duration) 119 : duration_(duration) 120{ 121} 122 123FakeTransformTransition::~FakeTransformTransition() { 124} 125 126double FakeTransformTransition::Duration() const { 127 return duration_; 128} 129 130gfx::Transform FakeTransformTransition::GetValue(double time) const { 131 return gfx::Transform(); 132} 133 134scoped_ptr<cc::AnimationCurve> FakeTransformTransition::Clone() const { 135 return make_scoped_ptr( 136 new FakeTransformTransition(*this)).PassAs<cc::AnimationCurve>(); 137} 138 139 140FakeFloatTransition::FakeFloatTransition(double duration, float from, float to) 141 : duration_(duration) 142 , from_(from) 143 , to_(to) 144{ 145} 146 147FakeFloatTransition::~FakeFloatTransition() { 148} 149 150double FakeFloatTransition::Duration() const { 151 return duration_; 152} 153 154float FakeFloatTransition::GetValue(double time) const { 155 time /= duration_; 156 if (time >= 1.0) 157 time = 1.0; 158 return (1.0 - time) * from_ + time * to_; 159} 160 161FakeLayerAnimationValueObserver::FakeLayerAnimationValueObserver() 162 : opacity_(0.0f) 163{ 164} 165 166FakeLayerAnimationValueObserver::~FakeLayerAnimationValueObserver() { 167} 168 169void FakeLayerAnimationValueObserver::OnOpacityAnimated(float opacity) { 170 opacity_ = opacity; 171} 172 173void FakeLayerAnimationValueObserver::OnTransformAnimated( 174 const gfx::Transform& transform) { 175 transform_ = transform; 176} 177 178bool FakeLayerAnimationValueObserver::IsActive() const { 179 return true; 180} 181 182scoped_ptr<cc::AnimationCurve> FakeFloatTransition::Clone() const { 183 return make_scoped_ptr( 184 new FakeFloatTransition(*this)).PassAs<cc::AnimationCurve>(); 185} 186 187int AddOpacityTransitionToController(cc::LayerAnimationController* controller, 188 double duration, 189 float start_opacity, 190 float end_opacity, 191 bool use_timing_function) { 192 return AddOpacityTransition(controller, 193 duration, 194 start_opacity, 195 end_opacity, 196 use_timing_function); 197} 198 199int AddAnimatedTransformToController(cc::LayerAnimationController* controller, 200 double duration, 201 int delta_x, 202 int delta_y) { 203 return AddAnimatedTransform(controller, 204 duration, 205 delta_x, 206 delta_y); 207} 208 209int AddOpacityTransitionToLayer(cc::Layer* layer, 210 double duration, 211 float start_opacity, 212 float end_opacity, 213 bool use_timing_function) { 214 return AddOpacityTransition(layer, 215 duration, 216 start_opacity, 217 end_opacity, 218 use_timing_function); 219} 220 221int AddOpacityTransitionToLayer(cc::LayerImpl* layer, 222 double duration, 223 float start_opacity, 224 float end_opacity, 225 bool use_timing_function) { 226 return AddOpacityTransition(layer->layer_animation_controller(), 227 duration, 228 start_opacity, 229 end_opacity, 230 use_timing_function); 231} 232 233int AddAnimatedTransformToLayer(cc::Layer* layer, 234 double duration, 235 int delta_x, 236 int delta_y) { 237 return AddAnimatedTransform(layer, duration, delta_x, delta_y); 238} 239 240int AddAnimatedTransformToLayer(cc::LayerImpl* layer, 241 double duration, 242 int delta_x, 243 int delta_y) { 244 return AddAnimatedTransform(layer->layer_animation_controller(), 245 duration, 246 delta_x, 247 delta_y); 248} 249 250} // namespace cc 251