15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "cc/test/animation_test_common.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/animation/animation_id_provider.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/keyframed_animation_curve.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_controller.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/transform_operations.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer_impl.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using cc::Animation;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::AnimationCurve;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::EaseTimingFunction;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::FloatKeyframe;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::KeyframedFloatAnimationCurve;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::KeyframedTransformAnimationCurve;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::TimingFunction;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using cc::TransformKeyframe;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class Target>
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int AddOpacityTransition(Target* target,
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         double duration,
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         float start_opacity,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         float end_opacity,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         bool use_timing_function) {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<KeyframedFloatAnimationCurve>
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      curve(KeyframedFloatAnimationCurve::Create());
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TimingFunction> func;
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!use_timing_function)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    func = EaseTimingFunction::Create();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (duration > 0.0)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    curve->AddKeyframe(FloatKeyframe::Create(0.0, start_opacity, func.Pass()));
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  curve->AddKeyframe(FloatKeyframe::Create(
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      duration, end_opacity, scoped_ptr<TimingFunction>()));
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int id = AnimationIdProvider::NextAnimationId();
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> animation(Animation::Create(
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      curve.PassAs<AnimationCurve>(),
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      id,
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      AnimationIdProvider::NextGroupId(),
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Animation::Opacity));
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  animation->set_needs_synchronized_start_time(true);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  target->AddAnimation(animation.Pass());
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return id;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class Target>
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int AddAnimatedTransform(Target* target,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         double duration,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         TransformOperations start_operations,
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         TransformOperations operations) {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<KeyframedTransformAnimationCurve>
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      curve(KeyframedTransformAnimationCurve::Create());
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (duration > 0.0) {
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    curve->AddKeyframe(TransformKeyframe::Create(
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        0.0, start_operations, scoped_ptr<TimingFunction>()));
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  curve->AddKeyframe(TransformKeyframe::Create(
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      duration, operations, scoped_ptr<TimingFunction>()));
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int id = AnimationIdProvider::NextAnimationId();
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Animation> animation(Animation::Create(
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      curve.PassAs<AnimationCurve>(),
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      id,
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      AnimationIdProvider::NextGroupId(),
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      Animation::Transform));
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  animation->set_needs_synchronized_start_time(true);
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  target->AddAnimation(animation.Pass());
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return id;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)template <class Target>
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int AddAnimatedTransform(Target* target,
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         double duration,
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         int delta_x,
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         int delta_y) {
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  TransformOperations start_operations;
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (duration > 0.0) {
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    start_operations.AppendTranslate(delta_x, delta_y, 0.0);
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  TransformOperations operations;
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  operations.AppendTranslate(delta_x, delta_y, 0.0);
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return AddAnimatedTransform(target, duration, start_operations, operations);
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)template <class Target>
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)int AddAnimatedFilter(Target* target,
1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                      double duration,
1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                      float start_brightness,
1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                      float end_brightness) {
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  scoped_ptr<KeyframedFilterAnimationCurve>
1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      curve(KeyframedFilterAnimationCurve::Create());
1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (duration > 0.0) {
1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    FilterOperations start_filters;
1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    start_filters.Append(
1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        FilterOperation::CreateBrightnessFilter(start_brightness));
1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    curve->AddKeyframe(FilterKeyframe::Create(
112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        0.0, start_filters, scoped_ptr<TimingFunction>()));
1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  FilterOperations filters;
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  filters.Append(FilterOperation::CreateBrightnessFilter(end_brightness));
117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  curve->AddKeyframe(
118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      FilterKeyframe::Create(duration, filters, scoped_ptr<TimingFunction>()));
1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int id = AnimationIdProvider::NextAnimationId();
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  scoped_ptr<Animation> animation(Animation::Create(
1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      curve.PassAs<AnimationCurve>(),
1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      id,
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      AnimationIdProvider::NextGroupId(),
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      Animation::Filter));
1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  animation->set_needs_synchronized_start_time(true);
1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  target->AddAnimation(animation.Pass());
1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return id;
1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FakeFloatAnimationCurve::FakeFloatAnimationCurve()
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : duration_(1.0) {}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FakeFloatAnimationCurve::FakeFloatAnimationCurve(double duration)
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : duration_(duration) {}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FakeFloatAnimationCurve::~FakeFloatAnimationCurve() {}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)double FakeFloatAnimationCurve::Duration() const {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return duration_;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float FakeFloatAnimationCurve::GetValue(double now) const {
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return 0.0f;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)scoped_ptr<AnimationCurve> FakeFloatAnimationCurve::Clone() const {
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return make_scoped_ptr(new FakeFloatAnimationCurve).PassAs<AnimationCurve>();
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FakeTransformTransition::FakeTransformTransition(double duration)
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : duration_(duration) {}
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FakeTransformTransition::~FakeTransformTransition() {}
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)double FakeTransformTransition::Duration() const {
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return duration_;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Transform FakeTransformTransition::GetValue(double time) const {
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return gfx::Transform();
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool FakeTransformTransition::AnimatedBoundsForBox(const gfx::BoxF& box,
1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                                   gfx::BoxF* bounds) const {
1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return false;
1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
171e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochbool FakeTransformTransition::AffectsScale() const { return false; }
172e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool FakeTransformTransition::IsTranslation() const { return true; }
174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1751675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdochbool FakeTransformTransition::MaximumTargetScale(bool forward_direction,
1761675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                                                 float* max_scale) const {
177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  *max_scale = 1.f;
178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return true;
179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)scoped_ptr<AnimationCurve> FakeTransformTransition::Clone() const {
182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return make_scoped_ptr(new FakeTransformTransition(*this))
183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      .PassAs<AnimationCurve>();
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FakeFloatTransition::FakeFloatTransition(double duration, float from, float to)
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : duration_(duration), from_(from), to_(to) {}
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FakeFloatTransition::~FakeFloatTransition() {}
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)double FakeFloatTransition::Duration() const {
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return duration_;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float FakeFloatTransition::GetValue(double time) const {
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  time /= duration_;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (time >= 1.0)
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    time = 1.0;
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return (1.0 - time) * from_ + time * to_;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)FakeLayerAnimationValueObserver::FakeLayerAnimationValueObserver()
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : opacity_(0.0f),
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      animation_waiting_for_deletion_(false) {}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FakeLayerAnimationValueObserver::~FakeLayerAnimationValueObserver() {}
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeLayerAnimationValueObserver::OnFilterAnimated(
2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const FilterOperations& filters) {
2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  filters_ = filters;
2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void FakeLayerAnimationValueObserver::OnOpacityAnimated(float opacity) {
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  opacity_ = opacity;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void FakeLayerAnimationValueObserver::OnTransformAnimated(
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const gfx::Transform& transform) {
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  transform_ = transform;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void FakeLayerAnimationValueObserver::OnScrollOffsetAnimated(
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const gfx::Vector2dF& scroll_offset) {
225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scroll_offset_ = scroll_offset;
226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FakeLayerAnimationValueObserver::OnAnimationWaitingForDeletion() {
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  animation_waiting_for_deletion_ = true;
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool FakeLayerAnimationValueObserver::IsActive() const {
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool FakeInactiveLayerAnimationValueObserver::IsActive() const {
23790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return false;
23890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
23990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)gfx::Vector2dF FakeLayerAnimationValueProvider::ScrollOffsetForAnimation()
241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const {
242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return scroll_offset_;
243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)scoped_ptr<AnimationCurve> FakeFloatTransition::Clone() const {
246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return make_scoped_ptr(new FakeFloatTransition(*this))
247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      .PassAs<AnimationCurve>();
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddOpacityTransitionToController(LayerAnimationController* controller,
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     double duration,
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     float start_opacity,
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     float end_opacity,
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     bool use_timing_function) {
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return AddOpacityTransition(controller,
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              duration,
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              start_opacity,
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              end_opacity,
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              use_timing_function);
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddAnimatedTransformToController(LayerAnimationController* controller,
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     double duration,
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     int delta_x,
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     int delta_y) {
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return AddAnimatedTransform(controller,
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              duration,
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              delta_x,
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              delta_y);
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddAnimatedFilterToController(LayerAnimationController* controller,
2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                  double duration,
2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                  float start_brightness,
2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                  float end_brightness) {
2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return AddAnimatedFilter(
2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      controller, duration, start_brightness, end_brightness);
2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
280a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddOpacityTransitionToLayer(Layer* layer,
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                double duration,
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                float start_opacity,
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                float end_opacity,
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                bool use_timing_function) {
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return AddOpacityTransition(layer,
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              duration,
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              start_opacity,
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              end_opacity,
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              use_timing_function);
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddOpacityTransitionToLayer(LayerImpl* layer,
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                double duration,
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                float start_opacity,
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                float end_opacity,
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                bool use_timing_function) {
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return AddOpacityTransition(layer->layer_animation_controller(),
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              duration,
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              start_opacity,
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              end_opacity,
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              use_timing_function);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddAnimatedTransformToLayer(Layer* layer,
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                double duration,
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                int delta_x,
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                int delta_y) {
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return AddAnimatedTransform(layer, duration, delta_x, delta_y);
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
311a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddAnimatedTransformToLayer(LayerImpl* layer,
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                double duration,
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                int delta_x,
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                int delta_y) {
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return AddAnimatedTransform(layer->layer_animation_controller(),
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              duration,
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              delta_x,
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              delta_y);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
321c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint AddAnimatedTransformToLayer(Layer* layer,
322c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                double duration,
323c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                TransformOperations start_operations,
324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                TransformOperations operations) {
325c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return AddAnimatedTransform(layer, duration, start_operations, operations);
326c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
327c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int AddAnimatedTransformToLayer(LayerImpl* layer,
3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                double duration,
3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                TransformOperations start_operations,
3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                TransformOperations operations) {
3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return AddAnimatedTransform(layer->layer_animation_controller(),
3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              duration,
3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              start_operations,
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              operations);
3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
338a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddAnimatedFilterToLayer(Layer* layer,
3394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                             double duration,
3404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                             float start_brightness,
3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                             float end_brightness) {
3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return AddAnimatedFilter(layer, duration, start_brightness, end_brightness);
3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int AddAnimatedFilterToLayer(LayerImpl* layer,
3464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                             double duration,
3474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                             float start_brightness,
3484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                             float end_brightness) {
3494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return AddAnimatedFilter(layer->layer_animation_controller(),
3504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                           duration,
3514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                           start_brightness,
3524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                           end_brightness);
3534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
356