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

Unified Diff: ui/gfx/compositor/layer_animator.h

Issue 8395046: Allows observers to be notified when layer animations complete. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address reviewer comments. Created 9 years, 2 months 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
Index: ui/gfx/compositor/layer_animator.h
diff --git a/ui/gfx/compositor/layer_animator.h b/ui/gfx/compositor/layer_animator.h
index e6751ffc12c69c1e3e27221cdd31ed887418db58..4fca4e575a849bdd2a7a72c8ff49700de5301ee1 100644
--- a/ui/gfx/compositor/layer_animator.h
+++ b/ui/gfx/compositor/layer_animator.h
@@ -7,10 +7,12 @@
#pragma once
#include <deque>
+#include <set>
#include <vector>
#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
+#include "base/observer_list.h"
#include "base/time.h"
#include "ui/base/animation/animation_container_element.h"
#include "ui/gfx/compositor/compositor_export.h"
@@ -24,7 +26,8 @@ namespace ui {
class Animation;
class Layer;
class LayerAnimationSequence;
-class LayerAnimatorDelegate;
+class LayerAnimationDelegate;
+class LayerAnimationObserver;
class Transform;
// When a property of layer needs to be changed it is set by way of
@@ -62,7 +65,7 @@ class COMPOSITOR_EXPORT LayerAnimator : public AnimationContainerElement {
// Sets the layer animation delegate the animator is associated with. The
// animator does not own the delegate.
- void SetDelegate(LayerAnimatorDelegate* delegate);
+ void SetDelegate(LayerAnimationDelegate* delegate);
// Sets the animation preemption strategy. This determines the behaviour if
// a property is set during an animation. The default is
@@ -85,18 +88,16 @@ class COMPOSITOR_EXPORT LayerAnimator : public AnimationContainerElement {
// animation sequences.
void ScheduleTogether(const std::vector<LayerAnimationSequence*>& animations);
- // These are cover functions that create sequences for you to wrap the given
- // elements. These sequences are then passed to the corresponding function
- // above.
- void StartAnimationElement(LayerAnimationElement* element);
- void ScheduleAnimationElement(LayerAnimationElement* element);
- void ScheduleElementsTogether(
- const std::vector<LayerAnimationElement*>& element);
-
// Returns true if there is an animation in the queue (animations remain in
- // the queue until they complete).
+ // the queue until they complete, so this includes running animations).
bool is_animating() const { return !animation_queue_.empty(); }
+ // Returns true if there is an animation in the queue that animates the given
+ // property (animations remain in the queue until they complete, so this
+ // includes running animations).
+ bool IsAnimatingProperty(
+ LayerAnimationElement::AnimatableProperty property) const;
+
// Stops animating the given property. No effect if there is no running
// animation for the given property. Skips to the final state of the
// animation.
@@ -112,6 +113,11 @@ class COMPOSITOR_EXPORT LayerAnimator : public AnimationContainerElement {
}
base::TimeTicks get_last_step_time_for_test() { return last_step_time_; }
+ // These functions are used for adding or removing observers from the observer
+ // list. The observers are notified when animations end.
+ void AddObserver(LayerAnimationObserver* observer);
+ void RemoveObserver(LayerAnimationObserver* observer);
+
// Scoped settings allow you to temporarily change the animator's settings and
// these changes are reverted when the object is destroyed. NOTE: when the
// settings object is created, it applies the default transition duration
@@ -121,20 +127,22 @@ class COMPOSITOR_EXPORT LayerAnimator : public AnimationContainerElement {
explicit ScopedSettings(LayerAnimator* animator);
virtual ~ScopedSettings();
+ void AddObserver(LayerAnimationObserver* observer);
void SetTransitionDuration(base::TimeDelta duration);
private:
LayerAnimator* animator_;
base::TimeDelta old_transition_duration_;
+ std::set<LayerAnimationObserver*> observers_;
DISALLOW_COPY_AND_ASSIGN(ScopedSettings);
};
protected:
- LayerAnimatorDelegate* delegate() { return delegate_; }
+ LayerAnimationDelegate* delegate() { return delegate_; }
private:
- friend class TransientSettings;
+ friend class ScopedSettings;
// We need to keep track of the start time of every running animation.
struct RunningAnimation {
@@ -211,11 +219,15 @@ class COMPOSITOR_EXPORT LayerAnimator : public AnimationContainerElement {
// allowed to finish.
void GetTargetValue(LayerAnimationElement::TargetValue* target) const;
+ // Called whenever an animation is added to the animation queue. Either by
+ // starting the animation or adding to the queue.
+ void OnScheduled(LayerAnimationSequence* sequence);
+
// This is the queue of animations to run.
AnimationQueue animation_queue_;
// The target of all layer animations.
- LayerAnimatorDelegate* delegate_;
+ LayerAnimationDelegate* delegate_;
// The currently running animations.
RunningAnimations running_animations_;
@@ -236,6 +248,10 @@ class COMPOSITOR_EXPORT LayerAnimator : public AnimationContainerElement {
// and allows for manual stepping.
bool disable_timer_for_test_;
+ // Observers are notified when layer animations end, are scheduled or are
+ // aborted.
+ ObserverList<LayerAnimationObserver> observers_;
+
DISALLOW_COPY_AND_ASSIGN(LayerAnimator);
};

Powered by Google App Engine
This is Rietveld 408576698