layer_animation_element.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI// Use of this source code is governed by a BSD-style license that can be
35208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI// found in the LICENSE file.
45208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI
55208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI#include "ui/compositor/layer_animation_element.h"
65208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI
75208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI#include "base/compiler_specific.h"
85208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI#include "ui/base/animation/tween.h"
95208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI#include "ui/compositor/layer_animation_delegate.h"
105208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI#include "ui/compositor/layer_animator.h"
115208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI#include "ui/gfx/interpolated_transform.h"
125208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI
135208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAInamespace ui {
145208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI
155208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAInamespace {
165208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI
175208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI// Pause -----------------------------------------------------------------------
183c871010888e1479ef8fca2048485b979ec2661aJan Engelhardtclass Pause : public LayerAnimationElement {
19d61b02fbbbe7f6e643aad8649c8559c175c68c52Jan Engelhardt public:
203dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  Pause(const AnimatableProperties& properties, base::TimeDelta duration)
210b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI      : LayerAnimationElement(properties, duration) {
220b7a140944738d67b9c4e6f09992c8407eefb18aJan Engelhardt  }
2304f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI  virtual ~Pause() {}
24aafd269675fc45bac6340027c866ea6073643c3bJan Engelhardt
25cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt private:
263dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {}
273dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  virtual bool OnProgress(double t,
280b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                          LayerAnimationDelegate* delegate) OVERRIDE {
290b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    return false;
300d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI  }
310b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {}
32b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski  virtual void OnAbort() OVERRIDE {}
330b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
34f56b8a8bf4b1041cb875fd8439778f35276bdb30Jan Engelhardt  DISALLOW_COPY_AND_ASSIGN(Pause);
350b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI};
3608b1616e068166e016b3ee7110db10ae5d853422Jan Engelhardt
373c871010888e1479ef8fca2048485b979ec2661aJan Engelhardt// TransformTransition ---------------------------------------------------------
383c871010888e1479ef8fca2048485b979ec2661aJan Engelhardt
393c871010888e1479ef8fca2048485b979ec2661aJan Engelhardtclass TransformTransition : public LayerAnimationElement {
403c871010888e1479ef8fca2048485b979ec2661aJan Engelhardt public:
4141a9b481693b4c43c16d0588cc558dd455168af0Jan Engelhardt    TransformTransition(const gfx::Transform& target, base::TimeDelta duration)
4241a9b481693b4c43c16d0588cc558dd455168af0Jan Engelhardt      : LayerAnimationElement(GetProperties(), duration),
433c871010888e1479ef8fca2048485b979ec2661aJan Engelhardt        target_(target) {
443dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  }
455208806f2708f761e97e62550561e3164b541770Yasuyuki KOZAKAI  virtual ~TransformTransition() {}
464e41854423b529d3107c23b85434d50a75d08057Jan Engelhardt
4777f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt protected:
4877f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
49ef18e8147903885708d1c264904129af4fb636d6Jan Engelhardt    start_ = delegate->GetTransformForAnimation();
503dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  }
515a26b5fd7bf11ca93d54fe7dc24b3423fb7d89b2Mike Frysinger
525a26b5fd7bf11ca93d54fe7dc24b3423fb7d89b2Mike Frysinger  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
535a26b5fd7bf11ca93d54fe7dc24b3423fb7d89b2Mike Frysinger    delegate->SetTransformFromAnimation(
54c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt        Tween::ValueBetween(t, start_, target_));
55c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt    return true;
56c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt  }
57c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt
58c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
59c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt    target->transform = target_;
60c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt  }
61c31870f9bebb3d4d082016fcfaf8c2177ae32eb2Jan Engelhardt
6270581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim  virtual void OnAbort() OVERRIDE {}
63aa37acc1423126f555135935c687eb91995b9440Jan Engelhardt
641e128bd804b676ee91beca48312de9b251845d09Jan Engelhardt private:
655a26b5fd7bf11ca93d54fe7dc24b3423fb7d89b2Mike Frysinger  static AnimatableProperties GetProperties() {
660d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI    AnimatableProperties properties;
670d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI    properties.insert(LayerAnimationElement::TRANSFORM);
680b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    return properties;
690b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  }
700b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
710b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  gfx::Transform start_;
7237911de507d0597980ad218a044a482501a21b01Maciej Zenczykowski  const gfx::Transform target_;
7337911de507d0597980ad218a044a482501a21b01Maciej Zenczykowski
7437911de507d0597980ad218a044a482501a21b01Maciej Zenczykowski  DISALLOW_COPY_AND_ASSIGN(TransformTransition);
7537911de507d0597980ad218a044a482501a21b01Maciej Zenczykowski};
7637911de507d0597980ad218a044a482501a21b01Maciej Zenczykowski
7737911de507d0597980ad218a044a482501a21b01Maciej Zenczykowski// InterpolatedTransformTransition ---------------------------------------------
788b7baebc93989106fd5d26b262d0ce191f8ef7c0Jamal Hadi Salim
798b7baebc93989106fd5d26b262d0ce191f8ef7c0Jamal Hadi Salimclass InterpolatedTransformTransition : public LayerAnimationElement {
8040a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim public:
8140a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim  InterpolatedTransformTransition(InterpolatedTransform* interpolated_transform,
828b7baebc93989106fd5d26b262d0ce191f8ef7c0Jamal Hadi Salim                                  base::TimeDelta duration)
8340a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim      : LayerAnimationElement(GetProperties(), duration),
8440a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim        interpolated_transform_(interpolated_transform) {
8540a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim  }
8640a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim  virtual ~InterpolatedTransformTransition() {}
8740a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim
8840a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim protected:
8940a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
9040a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim  }
9140a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim
9240a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
9340a8343d3ad0cdbc3a7e69c8d970ad75807c29edJamal Hadi Salim    delegate->SetTransformFromAnimation(
94600f38db82548a683775fd89b6e136673e924097Jan Engelhardt        interpolated_transform_->Interpolate(static_cast<float>(t)));
9584c3055bf08d0a8fe5db6e5f3f96dd826a290147Jamal Hadi Salim    return true;
96df288236cd254798be3759fef4cbc3e535f5a1c3Jan Engelhardt  }
9759e8114c6792242e80785f4461d5e663fb9a3d64Jan Engelhardt
98df288236cd254798be3759fef4cbc3e535f5a1c3Jan Engelhardt  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
99df288236cd254798be3759fef4cbc3e535f5a1c3Jan Engelhardt    target->transform = interpolated_transform_->Interpolate(1.0f);
10084c3055bf08d0a8fe5db6e5f3f96dd826a290147Jamal Hadi Salim  }
10184c3055bf08d0a8fe5db6e5f3f96dd826a290147Jamal Hadi Salim
102600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  virtual void OnAbort() OVERRIDE {}
103600f38db82548a683775fd89b6e136673e924097Jan Engelhardt
10470581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim private:
10570581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim  static AnimatableProperties GetProperties() {
10670581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim    AnimatableProperties properties;
107600f38db82548a683775fd89b6e136673e924097Jan Engelhardt    properties.insert(LayerAnimationElement::TRANSFORM);
108600f38db82548a683775fd89b6e136673e924097Jan Engelhardt    return properties;
10970581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim  }
11070581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim
11170581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim  scoped_ptr<InterpolatedTransform> interpolated_transform_;
11270581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim
113600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformTransition);
114600f38db82548a683775fd89b6e136673e924097Jan Engelhardt};
115600f38db82548a683775fd89b6e136673e924097Jan Engelhardt
11670581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim// BoundsTransition ------------------------------------------------------------
11770581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim
1181dc27393b7ba401e6228a5ee2472a6eb72836c43Jan Engelhardtclass BoundsTransition : public LayerAnimationElement {
1191dc27393b7ba401e6228a5ee2472a6eb72836c43Jan Engelhardt public:
1201dc27393b7ba401e6228a5ee2472a6eb72836c43Jan Engelhardt  BoundsTransition(const gfx::Rect& target, base::TimeDelta duration)
1211dc27393b7ba401e6228a5ee2472a6eb72836c43Jan Engelhardt      : LayerAnimationElement(GetProperties(), duration),
1221dc27393b7ba401e6228a5ee2472a6eb72836c43Jan Engelhardt        target_(target) {
1231dc27393b7ba401e6228a5ee2472a6eb72836c43Jan Engelhardt  }
1241dc27393b7ba401e6228a5ee2472a6eb72836c43Jan Engelhardt  virtual ~BoundsTransition() {}
125600f38db82548a683775fd89b6e136673e924097Jan Engelhardt
126600f38db82548a683775fd89b6e136673e924097Jan Engelhardt protected:
127600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
128600f38db82548a683775fd89b6e136673e924097Jan Engelhardt    start_ = delegate->GetBoundsForAnimation();
129600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  }
130600f38db82548a683775fd89b6e136673e924097Jan Engelhardt
131600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
132600f38db82548a683775fd89b6e136673e924097Jan Engelhardt    delegate->SetBoundsFromAnimation(Tween::ValueBetween(t, start_, target_));
133600f38db82548a683775fd89b6e136673e924097Jan Engelhardt    return true;
1341e128bd804b676ee91beca48312de9b251845d09Jan Engelhardt  }
13570581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim
136600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
13770581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim    target->bounds = target_;
138600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  }
139600f38db82548a683775fd89b6e136673e924097Jan Engelhardt
140600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  virtual void OnAbort() OVERRIDE {}
141600f38db82548a683775fd89b6e136673e924097Jan Engelhardt
142600f38db82548a683775fd89b6e136673e924097Jan Engelhardt private:
143600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  static AnimatableProperties GetProperties() {
144600f38db82548a683775fd89b6e136673e924097Jan Engelhardt    AnimatableProperties properties;
14570581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim    properties.insert(LayerAnimationElement::BOUNDS);
146600f38db82548a683775fd89b6e136673e924097Jan Engelhardt    return properties;
147600f38db82548a683775fd89b6e136673e924097Jan Engelhardt  }
14870581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim
14970581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim  gfx::Rect start_;
15070581922f873a88306dd5b1cb83c5081ee239eb8Jamal Hadi Salim  const gfx::Rect target_;
15177f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
15277f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  DISALLOW_COPY_AND_ASSIGN(BoundsTransition);
153b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski};
15477f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
15577f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt// OpacityTransition -----------------------------------------------------------
15677f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
15777f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardtclass OpacityTransition : public LayerAnimationElement {
15877f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt public:
15977f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  OpacityTransition(float target, base::TimeDelta duration)
16077f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt      : LayerAnimationElement(GetProperties(), duration),
16177f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt        start_(0.0f),
16277f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt        target_(target) {
163b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski  }
16477f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  virtual ~OpacityTransition() {}
16577f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
16677f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt protected:
16777f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
16877f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt    start_ = delegate->GetOpacityForAnimation();
16977f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  }
17077f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
171aa37acc1423126f555135935c687eb91995b9440Jan Engelhardt  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
17277f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt    delegate->SetOpacityFromAnimation(Tween::ValueBetween(t, start_, target_));
17339bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt    return true;
17439bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt  }
1750d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI
1760b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
177c021c3ce7b1583eb5dd71b10ac3d8ab3cd36beaaJan Engelhardt    target->opacity = target_;
1780b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  }
1792c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski
1802c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski  virtual void OnAbort() OVERRIDE {}
1812c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski
1822c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski private:
1832c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski  static AnimatableProperties GetProperties() {
1840d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI    AnimatableProperties properties;
1850d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI    properties.insert(LayerAnimationElement::OPACITY);
1860d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI    return properties;
1872c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski  }
1882c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski
1892c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski  float start_;
1902c6ac071a9c660b61a76565d1024d372deac8a98Maciej Zenczykowski  const float target_;
19139bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt
19239bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt  DISALLOW_COPY_AND_ASSIGN(OpacityTransition);
19339bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt};
19439bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt
19539bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt// VisibilityTransition --------------------------------------------------------
19639bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt
19739bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardtclass VisibilityTransition : public LayerAnimationElement {
19839bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt public:
19939bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt  VisibilityTransition(bool target, base::TimeDelta duration)
20039bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt      : LayerAnimationElement(GetProperties(), duration),
20139bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt        start_(false),
202ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt        target_(target) {
203ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt  }
204ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt  virtual ~VisibilityTransition() {}
205ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt
206ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt protected:
207ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
208ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt    start_ = delegate->GetVisibilityForAnimation();
209ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt  }
210ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt
211ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
212ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt    delegate->SetVisibilityFromAnimation(t == 1.0 ? target_ : start_);
213ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt    return t == 1.0;
214ec934198bd6ee2f21171dba440ca96334b0d874bJan Engelhardt  }
21539bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt
21639bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
21739bf9c8214d3073a496a8a1eff91046a8d6fbbdfJan Engelhardt    target->visibility = target_;
21877f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  }
21977f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
22077f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  virtual void OnAbort() OVERRIDE {}
22177f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
22277f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt private:
22377f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  static AnimatableProperties GetProperties() {
22477f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt    AnimatableProperties properties;
22577f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt    properties.insert(LayerAnimationElement::VISIBILITY);
22677f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt    return properties;
22777f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  }
22877f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
22977f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  bool start_;
23077f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  const bool target_;
23177f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt
23277f48c2f1ef21fa43aa68c25a1457db319ca2526Jan Engelhardt  DISALLOW_COPY_AND_ASSIGN(VisibilityTransition);
233630ef48037f3602333addfdb53789c9c6a4bb4c8Jan Engelhardt};
2347e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
2357e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim// BrightnessTransition --------------------------------------------------------
2367e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
2377e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salimclass BrightnessTransition : public LayerAnimationElement {
2387e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim public:
2397e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  BrightnessTransition(float target, base::TimeDelta duration)
2407e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim      : LayerAnimationElement(GetProperties(), duration),
2417e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim        start_(0.0f),
2427e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim        target_(target) {
2437e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  }
2447e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  virtual ~BrightnessTransition() {}
2457e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
2467e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim protected:
2477e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
2487e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim    start_ = delegate->GetBrightnessForAnimation();
2497e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  }
2507e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
2517e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
2527e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim    delegate->SetBrightnessFromAnimation(
2537e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim        Tween::ValueBetween(t, start_, target_));
2547e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim    return true;
2557e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  }
2567e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
2577e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
2587e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim    target->brightness = target_;
2597e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  }
2607e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
2617e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  virtual void OnAbort() OVERRIDE {}
2627e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim
2637e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim private:
2647e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim  static AnimatableProperties GetProperties() {
2657e4db2f50133007f549f222468bde4f3adcf41acJamal Hadi Salim    AnimatableProperties properties;
266630ef48037f3602333addfdb53789c9c6a4bb4c8Jan Engelhardt    properties.insert(LayerAnimationElement::BRIGHTNESS);
267630ef48037f3602333addfdb53789c9c6a4bb4c8Jan Engelhardt    return properties;
268630ef48037f3602333addfdb53789c9c6a4bb4c8Jan Engelhardt  }
2693dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI
2703dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  float start_;
2713dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  const float target_;
2723dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI
2733dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  DISALLOW_COPY_AND_ASSIGN(BrightnessTransition);
2743dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI};
2753dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI
2763dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI// GrayscaleTransition ---------------------------------------------------------
2773dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI
2783dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAIclass GrayscaleTransition : public LayerAnimationElement {
2793dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI public:
280630ef48037f3602333addfdb53789c9c6a4bb4c8Jan Engelhardt  GrayscaleTransition(float target, base::TimeDelta duration)
2813dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI      : LayerAnimationElement(GetProperties(), duration),
2823dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI        start_(0.0f),
2833dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI        target_(target) {
2843dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  }
2853dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  virtual ~GrayscaleTransition() {}
2863dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI
2873dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI protected:
2883dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
2893dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI    start_ = delegate->GetGrayscaleForAnimation();
2903dfa4488b032fc32aaf2470f48ac1fc3a534794fYasuyuki KOZAKAI  }
2910b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
292332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
293332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow    delegate->SetGrayscaleFromAnimation(
294332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow        Tween::ValueBetween(t, start_, target_));
295332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow    return true;
296332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow  }
297332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow
298332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
299332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow    target->grayscale = target_;
300332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow  }
301332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow
302332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow  virtual void OnAbort() OVERRIDE {}
303332e4acc574e3a348fe611d55bf642de0d50fbdaMichael Granzow
3040b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI private:
3050b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  static AnimatableProperties GetProperties() {
3060b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    AnimatableProperties properties;
3070b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    properties.insert(LayerAnimationElement::GRAYSCALE);
3080b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    return properties;
3090b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  }
3100b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3110b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  float start_;
3120b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  const float target_;
313a239728ec064666025de2723997d87b176d57fd6Maciej Zenczykowski
314a239728ec064666025de2723997d87b176d57fd6Maciej Zenczykowski  DISALLOW_COPY_AND_ASSIGN(GrayscaleTransition);
315a239728ec064666025de2723997d87b176d57fd6Maciej Zenczykowski};
316a239728ec064666025de2723997d87b176d57fd6Maciej Zenczykowski
317a239728ec064666025de2723997d87b176d57fd6Maciej Zenczykowski// ColorTransition -------------------------------------------------------------
3180b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
319371cea299f0b2eb100b9fc9fb99089640d2d606fJan Engelhardtclass ColorTransition : public LayerAnimationElement {
3200b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI public:
3210b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  ColorTransition(SkColor target, base::TimeDelta duration)
3220b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI      : LayerAnimationElement(GetProperties(), duration),
3230b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI        start_(SK_ColorBLACK),
3240b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI        target_(target) {
3250b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  }
3260b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  virtual ~ColorTransition() {}
3270b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3280b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI protected:
3290b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  virtual void OnStart(LayerAnimationDelegate* delegate) OVERRIDE {
3300b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    start_ = delegate->GetColorForAnimation();
3310b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  }
3320b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3330b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  virtual bool OnProgress(double t, LayerAnimationDelegate* delegate) OVERRIDE {
3340b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    delegate->SetColorFromAnimation(
3350b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI        SkColorSetARGB(
3360b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI            Tween::ValueBetween(t,
337c021c3ce7b1583eb5dd71b10ac3d8ab3cd36beaaJan Engelhardt                                static_cast<int>(SkColorGetA(start_)),
3380b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                                static_cast<int>(SkColorGetA(target_))),
3390b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI            Tween::ValueBetween(t,
3400b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                                static_cast<int>(SkColorGetR(start_)),
3410b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                                static_cast<int>(SkColorGetR(target_))),
3420b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI            Tween::ValueBetween(t,
3430b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                                static_cast<int>(SkColorGetG(start_)),
3440b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                                static_cast<int>(SkColorGetG(target_))),
3450b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI            Tween::ValueBetween(t,
3460b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                                static_cast<int>(SkColorGetB(start_)),
3470b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI                                static_cast<int>(SkColorGetB(target_)))));
3480b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    return true;
3490b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  }
3500b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
351c19f880d8aac7c0372381e29d7cea09accd0db26Jan Engelhardt  virtual void OnGetTarget(TargetValue* target) const OVERRIDE {
352c19f880d8aac7c0372381e29d7cea09accd0db26Jan Engelhardt    target->color = target_;
353c19f880d8aac7c0372381e29d7cea09accd0db26Jan Engelhardt  }
354c19f880d8aac7c0372381e29d7cea09accd0db26Jan Engelhardt
355c19f880d8aac7c0372381e29d7cea09accd0db26Jan Engelhardt  virtual void OnAbort() OVERRIDE {}
356c19f880d8aac7c0372381e29d7cea09accd0db26Jan Engelhardt
35794aa2ea67d7b8a669e8541f094661a1dc89722a3Jan Engelhardt private:
3580b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  static AnimatableProperties GetProperties() {
3590b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    AnimatableProperties properties;
3600b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    properties.insert(LayerAnimationElement::COLOR);
3610b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    return properties;
3620b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  }
3630b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3640b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  SkColor start_;
3650b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  const SkColor target_;
3660b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3670b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI  DISALLOW_COPY_AND_ASSIGN(ColorTransition);
3680b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI};
3690b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3700b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI}  // namespace
3710b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3720b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI// LayerAnimationElement::TargetValue ------------------------------------------
373f53710b16c2bae1843c3f5fee390f496dfa82526Jiri Popelka
3740b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAILayerAnimationElement::TargetValue::TargetValue()
3750b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    : opacity(0.0f),
3760b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI      visibility(false),
3770b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI      brightness(0.0f),
3780b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI      grayscale(0.0f),
3790b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI      color(SK_ColorBLACK) {
3800b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI}
3810b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI
3820b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAILayerAnimationElement::TargetValue::TargetValue(
3830b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    const LayerAnimationDelegate* delegate)
3840b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI    : bounds(delegate ? delegate->GetBoundsForAnimation() : gfx::Rect()),
3850b82e8e81e887843011c8771f70d2302901f7e5eYasuyuki KOZAKAI      transform(delegate ?
386b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski                delegate->GetTransformForAnimation() : gfx::Transform()),
387b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      opacity(delegate ? delegate->GetOpacityForAnimation() : 0.0f),
388b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      visibility(delegate ? delegate->GetVisibilityForAnimation() : false),
389b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      brightness(delegate ? delegate->GetBrightnessForAnimation() : 0.0f),
390b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      grayscale(delegate ? delegate->GetGrayscaleForAnimation() : 0.0f),
391b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      color(delegate ? delegate->GetColorForAnimation() : 0.0f) {
392b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski}
393b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski
394b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski// LayerAnimationElement -------------------------------------------------------
395b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski
396b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej ZenczykowskiLayerAnimationElement::LayerAnimationElement(
397b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski    const AnimatableProperties& properties,
398b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski    base::TimeDelta duration)
399b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski    : first_frame_(true),
400b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      properties_(properties),
401b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      duration_(GetEffectiveDuration(duration)),
402b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski      tween_type_(Tween::LINEAR) {
403c021c3ce7b1583eb5dd71b10ac3d8ab3cd36beaaJan Engelhardt}
4040d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI
405c021c3ce7b1583eb5dd71b10ac3d8ab3cd36beaaJan EngelhardtLayerAnimationElement::~LayerAnimationElement() {
406b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski}
4070d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI
408b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowskibool LayerAnimationElement::Progress(double t,
409b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski                                     LayerAnimationDelegate* delegate) {
410b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski  if (first_frame_)
411b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski    OnStart(delegate);
412b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski  bool need_draw = OnProgress(Tween::CalculateValue(tween_type_, t), delegate);
413b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski  first_frame_ = t == 1.0;
414b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski  return need_draw;
415b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski}
416b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski
417b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowskivoid LayerAnimationElement::GetTargetValue(TargetValue* target) const {
418b32b361a725c8fe3a3aa494e6cdec09a80785aacMaciej Zenczykowski  OnGetTarget(target);
4190d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI}
4200d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI
4210d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAIvoid LayerAnimationElement::Abort() {
4220d502bcdbc97ed359e84f6a21dfa0049b3b60a6cYasuyuki KOZAKAI  first_frame_ = true;
4235f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt  OnAbort();
4245f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt}
4255f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt
4265f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt// static
4275f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardtbase::TimeDelta LayerAnimationElement::GetEffectiveDuration(
4285f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt    const base::TimeDelta& duration) {
4295f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt  if (LayerAnimator::disable_animations_for_test())
4305f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt    return base::TimeDelta();
4315f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt
4325f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt  if (LayerAnimator::slow_animation_mode())
4335f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt    return duration * LayerAnimator::slow_animation_scale_factor();
4345f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt
435cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt  return duration;
4365f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt}
4375f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt
438cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt// static
4390b7a140944738d67b9c4e6f09992c8407eefb18aJan EngelhardtLayerAnimationElement* LayerAnimationElement::CreateTransformElement(
4400b7a140944738d67b9c4e6f09992c8407eefb18aJan Engelhardt    const gfx::Transform& transform,
441cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt    base::TimeDelta duration) {
4420b7a140944738d67b9c4e6f09992c8407eefb18aJan Engelhardt  return new TransformTransition(transform, duration);
443d61b02fbbbe7f6e643aad8649c8559c175c68c52Jan Engelhardt}
444cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt
445cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt// static
446cd9e7aa106e80c44bd526af74b616701b0772d05Jan EngelhardtLayerAnimationElement*
447d61b02fbbbe7f6e643aad8649c8559c175c68c52Jan EngelhardtLayerAnimationElement::CreateInterpolatedTransformElement(
448d61b02fbbbe7f6e643aad8649c8559c175c68c52Jan Engelhardt    InterpolatedTransform* interpolated_transform,
449d61b02fbbbe7f6e643aad8649c8559c175c68c52Jan Engelhardt    base::TimeDelta duration) {
450d61b02fbbbe7f6e643aad8649c8559c175c68c52Jan Engelhardt  return new InterpolatedTransformTransition(interpolated_transform, duration);
451d61b02fbbbe7f6e643aad8649c8559c175c68c52Jan Engelhardt}
4520b7a140944738d67b9c4e6f09992c8407eefb18aJan Engelhardt
453cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt// static
454cd9e7aa106e80c44bd526af74b616701b0772d05Jan EngelhardtLayerAnimationElement* LayerAnimationElement::CreateBoundsElement(
455cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt    const gfx::Rect& bounds,
456cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt    base::TimeDelta duration) {
457cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt  return new BoundsTransition(bounds, duration);
458cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt}
459cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt
460cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt// static
461cd9e7aa106e80c44bd526af74b616701b0772d05Jan EngelhardtLayerAnimationElement* LayerAnimationElement::CreateOpacityElement(
462cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt    float opacity,
463cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt    base::TimeDelta duration) {
464cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt  return new OpacityTransition(opacity, duration);
465cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt}
466cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt
467cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt// static
468cd9e7aa106e80c44bd526af74b616701b0772d05Jan EngelhardtLayerAnimationElement* LayerAnimationElement::CreateVisibilityElement(
4695f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt    bool visibility,
4705f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt    base::TimeDelta duration) {
471cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt  return new VisibilityTransition(visibility, duration);
4720b7a140944738d67b9c4e6f09992c8407eefb18aJan Engelhardt}
473cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt
474cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt// static
4755f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan EngelhardtLayerAnimationElement* LayerAnimationElement::CreateBrightnessElement(
476cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt    float brightness,
477cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt    base::TimeDelta duration) {
478cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt  return new BrightnessTransition(brightness, duration);
479cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt}
480cd9e7aa106e80c44bd526af74b616701b0772d05Jan Engelhardt
481aae6be9edc99e58164a3592c510fe5488141c698Jan Engelhardt// static
48204f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAILayerAnimationElement* LayerAnimationElement::CreateGrayscaleElement(
48304f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI    float grayscale,
48404f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI    base::TimeDelta duration) {
48504f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI  return new GrayscaleTransition(grayscale, duration);
48604f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI}
48704f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI
48804f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI// static
48904f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAILayerAnimationElement* LayerAnimationElement::CreatePauseElement(
49004f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI    const AnimatableProperties& properties,
4917ac405297ec38449b30e3b05fd6bf2082fd3d803Jan Engelhardt    base::TimeDelta duration) {
49204f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI  return new Pause(properties, duration);
4937a236f4cc685a420c1a782a5db614a93baf37ccfJan Engelhardt}
49404f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI
4955f2922cfc0bbfbeb878f5c12e9fb3eb602ae5507Jan Engelhardt// static
496aae6be9edc99e58164a3592c510fe5488141c698Jan EngelhardtLayerAnimationElement* LayerAnimationElement::CreateColorElement(
497213e185afbb298e6708881e4c2adffdc47a8b6daJan Engelhardt    SkColor color,
49804f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI    base::TimeDelta duration) {
4998b7baebc93989106fd5d26b262d0ce191f8ef7c0Jamal Hadi Salim  return new ColorTransition(color, duration);
50004f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI}
50104f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI
50204f8c54dc52e19096d31d94593bd1040716afe4dYasuyuki KOZAKAI}  // namespace ui
503aae6be9edc99e58164a3592c510fe5488141c698Jan Engelhardt