Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(847)

Unified Diff: ui/compositor/layer_animator.cc

Issue 11316135: NOT READY FOR REVIEW - Add support for custom animation timers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/compositor/layer_animator.h ('k') | ui/compositor/test/test_layer_animation_timer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/compositor/layer_animator.cc
diff --git a/ui/compositor/layer_animator.cc b/ui/compositor/layer_animator.cc
index 96a184c52ab244b88e06dbec98932109635173d0..69454eaaf2e270eb66f45a00304a6654b6ba5d39 100644
--- a/ui/compositor/layer_animator.cc
+++ b/ui/compositor/layer_animator.cc
@@ -13,6 +13,7 @@
#include "ui/compositor/layer_animation_delegate.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/layer_animation_sequence.h"
+#include "ui/compositor/layer_animation_timer.h"
#define SAFE_INVOKE_VOID(function, running_anim, ...) \
if (running_anim.is_sequence_alive()) \
@@ -38,14 +39,42 @@ static const base::TimeDelta kDefaultTransitionDuration =
static const base::TimeDelta kTimerInterval =
base::TimeDelta::FromMilliseconds(10);
-// Returns the AnimationContainer we're added to.
-ui::AnimationContainer* GetAnimationContainer() {
- static ui::AnimationContainer* container = NULL;
- if (!container) {
- container = new AnimationContainer();
- container->AddRef();
+// The default timer is simply a thin wrapper around an AnimationContainer.
+class DefaultLayerAnimationTimer : public LayerAnimationTimer {
+ public:
+ DefaultLayerAnimationTimer() : container_(new AnimationContainer()) {
}
- return container;
+
+ private:
+ // LayerAnimationTimer implementation.
+ virtual void Start(AnimationContainerElement* element) {
+ container_->Start(element);
+ }
+
+ virtual void Stop(AnimationContainerElement* element) {
+ container_->Stop(element);
+ }
+
+ virtual base::TimeTicks last_tick_time() const {
+ return container_->last_tick_time();
+ }
+
+ virtual bool is_running() const {
+ return container_->is_running();
+ }
+
+ scoped_refptr<AnimationContainer> container_;
+
+ DISALLOW_COPY_AND_ASSIGN(DefaultLayerAnimationTimer);
+};
+
+static LayerAnimationTimer* s_timer = NULL;
+
+// Returns the LayerAnimationTimer we're added to.
+static LayerAnimationTimer* GetAnimationTimer() {
+ if (!s_timer)
+ s_timer = new DefaultLayerAnimationTimer();
+ return s_timer;
}
} // namespace
@@ -181,8 +210,8 @@ void LayerAnimator::StartTogether(
adding_animations_ = true;
if (!is_animating()) {
- if (GetAnimationContainer()->is_running())
- last_step_time_ = GetAnimationContainer()->last_tick_time();
+ if (GetAnimationTimer()->is_running())
+ last_step_time_ = GetAnimationTimer()->last_tick_time();
else
last_step_time_ = base::TimeTicks::Now();
}
@@ -323,6 +352,13 @@ void LayerAnimator::RemoveObserver(LayerAnimationObserver* observer) {
}
}
+// static
+void LayerAnimator::SetAnimationTimer(LayerAnimationTimer* timer) {
+ if (s_timer && s_timer != timer)
+ delete s_timer;
+ s_timer = timer;
+}
+
// LayerAnimator protected -----------------------------------------------------
void LayerAnimator::ProgressAnimation(LayerAnimationSequence* sequence,
@@ -388,9 +424,9 @@ void LayerAnimator::UpdateAnimationState() {
const bool should_start = is_animating();
if (should_start && !is_started_)
- GetAnimationContainer()->Start(this);
+ GetAnimationTimer()->Start(this);
else if (!should_start && is_started_)
- GetAnimationContainer()->Stop(this);
+ GetAnimationTimer()->Stop(this);
is_started_ = should_start;
}
@@ -676,8 +712,8 @@ bool LayerAnimator::StartSequenceImmediately(LayerAnimationSequence* sequence) {
base::TimeTicks start_time;
if (is_animating() || adding_animations_)
start_time = last_step_time_;
- else if (GetAnimationContainer()->is_running())
- start_time = GetAnimationContainer()->last_tick_time();
+ else if (GetAnimationTimer()->is_running())
+ start_time = GetAnimationTimer()->last_tick_time();
else
start_time = base::TimeTicks::Now();
« no previous file with comments | « ui/compositor/layer_animator.h ('k') | ui/compositor/test/test_layer_animation_timer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698