Index: app/animation.h |
diff --git a/app/animation.h b/app/animation.h |
index bfa7fd0e12c2d9207ae5b4a34b4588f1f37947ff..c483e1dd40ac6eeb1938879533b4759867a6c909 100644 |
--- a/app/animation.h |
+++ b/app/animation.h |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
// Inspired by NSAnimation |
@@ -6,10 +6,11 @@ |
#ifndef APP_ANIMATION_H_ |
#define APP_ANIMATION_H_ |
+#include "base/ref_counted.h" |
#include "base/time.h" |
-#include "base/timer.h" |
class Animation; |
+class AnimationContainer; |
namespace gfx { |
class Rect; |
@@ -69,9 +70,6 @@ class Animation { |
Animation(int duration, int frame_rate, AnimationDelegate* delegate); |
virtual ~Animation(); |
- // Reset state so that the animation can be started again. |
- virtual void Reset(); |
- |
// Called when the animation progresses. Subclasses override this to |
// efficiently update their state. |
virtual void AnimateToState(double state) = 0; |
@@ -112,13 +110,27 @@ class Animation { |
// Sets the delegate. |
void set_delegate(AnimationDelegate* delegate) { delegate_ = delegate; } |
+ // Sets the container used to manage the timer. A value of NULL results in |
+ // creating a new AnimationContainer. |
+ void SetContainer(AnimationContainer* container); |
+ |
+ base::TimeDelta timer_interval() const { return timer_interval_; } |
+ |
protected: |
- // Overriddable, called by Run. |
- virtual void Step(); |
+ // Invoked by the AnimationContainer when the animation is running to advance |
+ // the animation. Use |time_now| rather than Time::Now to avoid multiple |
+ // animations running at the same time diverging. |
+ virtual void Step(base::TimeTicks time_now); |
// Calculates the timer interval from the constructor list. |
base::TimeDelta CalculateInterval(int frame_rate); |
+ private: |
+ friend class AnimationContainer; |
+ |
+ // Invoked from AnimationContainer when started. |
+ void set_start_time(base::TimeTicks start_time) { start_time_ = start_time; } |
+ |
// Whether or not we are currently animating. |
bool animating_; |
@@ -129,15 +141,11 @@ class Animation { |
// Current state, on a scale from 0.0 to 1.0. |
double state_; |
- base::Time start_time_; |
+ base::TimeTicks start_time_; |
AnimationDelegate* delegate_; |
- base::RepeatingTimer<Animation> timer_; |
- |
- private: |
- // Called when the animation's timer expires, calls Step. |
- void Run(); |
+ scoped_refptr<AnimationContainer> container_; |
DISALLOW_COPY_AND_ASSIGN(Animation); |
}; |