summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/animation.cc20
-rw-r--r--app/animation.h14
2 files changed, 34 insertions, 0 deletions
diff --git a/app/animation.cc b/app/animation.cc
index 94c99c2..b341d2a 100644
--- a/app/animation.cc
+++ b/app/animation.cc
@@ -4,6 +4,7 @@
#include "app/animation.h"
+#include "base/gfx/rect.h"
#include "base/message_loop.h"
#if defined(OS_WIN)
@@ -47,6 +48,25 @@ double Animation::GetCurrentValue() const {
return state_;
}
+double Animation::CurrentValueBetween(double start, double target) const {
+ return start + (target - start) * GetCurrentValue();
+}
+
+int Animation::CurrentValueBetween(int start, int target) const {
+ return static_cast<int>(CurrentValueBetween(static_cast<double>(start),
+ static_cast<double>(target)));
+}
+
+gfx::Rect Animation::CurrentValueBetween(const gfx::Rect& start_bounds,
+ const gfx::Rect& target_bounds) const {
+ return gfx::Rect(CurrentValueBetween(start_bounds.x(), target_bounds.x()),
+ CurrentValueBetween(start_bounds.y(), target_bounds.y()),
+ CurrentValueBetween(start_bounds.width(),
+ target_bounds.width()),
+ CurrentValueBetween(start_bounds.height(),
+ target_bounds.height()));
+}
+
void Animation::Start() {
if (!animating_) {
start_time_ = Time::Now();
diff --git a/app/animation.h b/app/animation.h
index bd38fb4..bfa7fd0 100644
--- a/app/animation.h
+++ b/app/animation.h
@@ -11,6 +11,10 @@
class Animation;
+namespace gfx {
+class Rect;
+}
+
// AnimationDelegate
//
// Implement this interface when you want to receive notifications about the
@@ -77,6 +81,13 @@ class Animation {
// however subclasses can override this to provide others.
virtual double GetCurrentValue() const;
+ // Convenience for returning a value between |start| and |target| based on
+ // the current value. This is (target - start) * GetCurrentValue() + start.
+ double CurrentValueBetween(double start, double target) const;
+ int CurrentValueBetween(int start, int target) const;
+ gfx::Rect CurrentValueBetween(const gfx::Rect& start_bounds,
+ const gfx::Rect& target_bounds) const;
+
// Start the animation.
void Start();
@@ -98,6 +109,9 @@ class Animation {
// to give guidance for heavy animations such as "start download" arrow.
static bool ShouldRenderRichAnimation();
+ // Sets the delegate.
+ void set_delegate(AnimationDelegate* delegate) { delegate_ = delegate; }
+
protected:
// Overriddable, called by Run.
virtual void Step();