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