| Index: ash/wm/session_state_animator.h
|
| diff --git a/ash/wm/session_state_animator.h b/ash/wm/session_state_animator.h
|
| index a9e43db4c04d62c6b7bdd3eb89c15f704974a483..b293b470afbfc221941b31ff010a257bb923f389 100644
|
| --- a/ash/wm/session_state_animator.h
|
| +++ b/ash/wm/session_state_animator.h
|
| @@ -7,19 +7,8 @@
|
|
|
| #include "ash/ash_export.h"
|
| #include "base/basictypes.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/timer/timer.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/compositor/layer_animation_observer.h"
|
| -
|
| -namespace gfx {
|
| -class Rect;
|
| -class Size;
|
| -}
|
| -
|
| -namespace ui {
|
| -class Layer;
|
| -}
|
| +#include "base/callback.h"
|
| +#include "base/time/time.h"
|
|
|
| namespace ash {
|
|
|
| @@ -98,78 +87,135 @@ class ASH_EXPORT SessionStateAnimator {
|
| // Multiple system layers belong here like status, menu, tooltip
|
| // and overlay layers.
|
| LOCK_SCREEN_RELATED_CONTAINERS = 1 << 5,
|
| +
|
| + // The primary root window.
|
| + ROOT_CONTAINER = 1 << 6,
|
| };
|
|
|
| - // Helper class used by tests to access internal state.
|
| - class ASH_EXPORT TestApi {
|
| + // A bitfield mask including LOCK_SCREEN_WALLPAPER,
|
| + // LOCK_SCREEN_CONTAINERS, and LOCK_SCREEN_RELATED_CONTAINERS.
|
| + static const int kAllLockScreenContainersMask;
|
| +
|
| + // A bitfield mask of all containers except the ROOT_CONTAINER.
|
| + static const int kAllNonRootContainersMask;
|
| +
|
| + // The AnimationSequence groups together multiple animations and invokes a
|
| + // callback once all contained animations are completed successfully.
|
| + // Subclasses of AnimationSequence should call one of OnAnimationCompleted or
|
| + // OnAnimationAborted once and behaviour is undefined if called multiple
|
| + // times.
|
| + // AnimationSequences will destroy themselves once EndSquence and one of
|
| + // OnAnimationCompleted or OnAnimationAborted has been called.
|
| + //
|
| + // Typical usage:
|
| + // AnimationSequence* animation_sequence =
|
| + // session_state_animator->BeginAnimationSequence(some_callback);
|
| + // animation_sequence->StartAnimation(
|
| + // SessionStateAnimator::LAUNCHER,
|
| + // SessionStateAnimator::ANIMATION_FADE_IN,
|
| + // SessionStateAnimator::ANIMATION_SPEED_UNDOABLE);
|
| + // animation_sequence->StartAnimation(
|
| + // SessionStateAnimator::LAUNCHER,
|
| + // SessionStateAnimator::ANIMATION_FADE_IN,
|
| + // SessionStateAnimator::ANIMATION_SPEED_UNDOABLE);
|
| + // animation_sequence->EndSequence();
|
| + // // some_callback won't be called until here even if the animations
|
| + // // were completed before the EndSequence call.
|
| + //
|
| + class ASH_EXPORT AnimationSequence {
|
| public:
|
| - explicit TestApi(SessionStateAnimator* animator)
|
| - : animator_(animator) {}
|
| + virtual ~AnimationSequence();
|
| +
|
| + // Apply animation |type| to all containers included in |container_mask|
|
| + // with specified |speed|.
|
| + virtual void StartAnimation(int container_mask,
|
| + AnimationType type,
|
| + AnimationSpeed speed) = 0;
|
| +
|
| + // Ends the animation sequence and enables the callback to be invoked
|
| + // when the animation sequence has completed. No more animations should be
|
| + // started after EndSequence is called because the AnimationSequenceObserver
|
| + // may have destroyed itself.
|
| + // NOTE: Clients of AnimationSequence should not access it after EndSequence
|
| + // has been called.
|
| + virtual void EndSequence();
|
| +
|
| + protected:
|
| + // AnimationSequence should not be instantiated directly, only through
|
| + // subclasses.
|
| + explicit AnimationSequence(base::Closure callback);
|
| +
|
| + // Subclasses should call this when the contained animations completed
|
| + // successfully.
|
| + // NOTE: This should NOT be accessed after OnAnimationCompleted has been
|
| + // called.
|
| + virtual void OnAnimationCompleted();
|
| +
|
| + // Subclasses should call this when the contained animations did NOT
|
| + // complete successfully.
|
| + // NOTE: This should NOT be accessed after OnAnimationAborted has been
|
| + // called.
|
| + virtual void OnAnimationAborted();
|
|
|
| - // Returns true if containers of a given |container_mask|
|
| - // were last animated with |type| (probably; the analysis is fairly ad-hoc).
|
| - // |container_mask| is a bitfield of a Container.
|
| - bool ContainersAreAnimated(int container_mask, AnimationType type) const;
|
| + private:
|
| + // Destroys this and calls the callback if the contained animations
|
| + // completed successfully.
|
| + void CleanupIfSequenceCompleted();
|
|
|
| - // Returns true if root window was last animated with |type| (probably;
|
| - // the analysis is fairly ad-hoc).
|
| - bool RootWindowIsAnimated(AnimationType type) const;
|
| + // Tracks whether the sequence has ended.
|
| + bool sequence_ended_;
|
|
|
| - private:
|
| - SessionStateAnimator* animator_; // not owned
|
| + // Track whether the contained animations have completed or not, both
|
| + // successfully and unsuccessfully.
|
| + bool animation_completed_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(TestApi);
|
| - };
|
| + // Flag to specify whether the callback should be invoked once the sequence
|
| + // has completed.
|
| + bool invoke_callback_;
|
|
|
| - // A bitfield mask including LOCK_SCREEN_WALLPAPER,
|
| - // LOCK_SCREEN_CONTAINERS, and LOCK_SCREEN_RELATED_CONTAINERS.
|
| - const static int kAllLockScreenContainersMask;
|
| + // Callback to be called.
|
| + base::Closure callback_;
|
|
|
| - // A bitfield mask of all containers.
|
| - const static int kAllContainersMask;
|
| + DISALLOW_COPY_AND_ASSIGN(AnimationSequence);
|
| + };
|
|
|
| SessionStateAnimator();
|
| virtual ~SessionStateAnimator();
|
|
|
| // Reports animation duration for |speed|.
|
| - static base::TimeDelta GetDuration(AnimationSpeed speed);
|
| -
|
| - // Fills |containers| with the containers included in |container_mask|.
|
| - static void GetContainers(int container_mask,
|
| - aura::Window::Windows* containers);
|
| + virtual base::TimeDelta GetDuration(AnimationSpeed speed);
|
|
|
| // Apply animation |type| to all containers included in |container_mask| with
|
| // specified |speed|.
|
| - void StartAnimation(int container_mask,
|
| - AnimationType type,
|
| - AnimationSpeed speed);
|
| + virtual void StartAnimation(int container_mask,
|
| + AnimationType type,
|
| + AnimationSpeed speed) = 0;
|
|
|
| // Apply animation |type| to all containers included in |container_mask| with
|
| // specified |speed| and call a |callback| at the end of the animation, if it
|
| // is not null.
|
| - void StartAnimationWithCallback(int container_mask,
|
| - AnimationType type,
|
| - AnimationSpeed speed,
|
| - base::Callback<void(void)>& callback);
|
| -
|
| -// Apply animation |type| to all containers included in |container_mask| with
|
| -// specified |speed| and add |observer| to all animations.
|
| - void StartAnimationWithObserver(int container_mask,
|
| - AnimationType type,
|
| - AnimationSpeed speed,
|
| - ui::LayerAnimationObserver* observer);
|
| -
|
| - // Applies animation |type| whith specified |speed| to the root container.
|
| - void StartGlobalAnimation(AnimationType type,
|
| - AnimationSpeed speed);
|
| -
|
| - // Apply animation |type| to window |window| with |speed| and add |observer|
|
| - // if it is not NULL to the last animation sequence.
|
| - void RunAnimationForWindow(aura::Window* window,
|
| - AnimationType type,
|
| - AnimationSpeed speed,
|
| - ui::LayerAnimationObserver* observer);
|
| + virtual void StartAnimationWithCallback(
|
| + int container_mask,
|
| + AnimationType type,
|
| + AnimationSpeed speed,
|
| + base::Closure callback) = 0;
|
| +
|
| + // Begins an animation sequence. Use this when you need to be notified when
|
| + // a group of animations are completed. See AnimationSequence documentation
|
| + // for more details.
|
| + virtual AnimationSequence* BeginAnimationSequence(
|
| + base::Closure callback) = 0;
|
| +
|
| + // Retruns true if the background is hidden.
|
| + virtual bool IsBackgroundHidden() const = 0;
|
| +
|
| + // Shows the background immediately.
|
| + virtual void ShowBackground() = 0;
|
| +
|
| + // Hides the background immediately.
|
| + virtual void HideBackground() = 0;
|
|
|
| + private:
|
| DISALLOW_COPY_AND_ASSIGN(SessionStateAnimator);
|
| };
|
|
|
|
|