123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- // Copyright (c) 2012 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.
- #ifndef ASH_WM_SESSION_STATE_ANIMATOR_H_
- #define ASH_WM_SESSION_STATE_ANIMATOR_H_
- #include "ash/ash_export.h"
- #include "base/callback.h"
- #include "base/time/time.h"
- namespace ash {
- // Displays onscreen animations for session state changes (lock/unlock, sign
- // out, shut down).
- class ASH_EXPORT SessionStateAnimator {
- public:
- // Animations that can be applied to groups of containers.
- enum AnimationType {
- ANIMATION_FADE_IN,
- ANIMATION_FADE_OUT,
- ANIMATION_HIDE_IMMEDIATELY,
- // Animations that raise/lower windows to/from area "in front" of the
- // screen.
- ANIMATION_LIFT,
- ANIMATION_UNDO_LIFT,
- ANIMATION_DROP,
- // Animations that raise/lower windows from/to area "behind" of the screen.
- ANIMATION_RAISE_TO_SCREEN,
- ANIMATION_GRAYSCALE_BRIGHTNESS,
- ANIMATION_UNDO_GRAYSCALE_BRIGHTNESS,
- // Pseudo animation type to copy layer.
- ANIMATION_COPY_LAYER,
- };
- // Constants for determining animation speed.
- enum AnimationSpeed {
- // Immediately change state.
- ANIMATION_SPEED_IMMEDIATE = 0,
- // Speed for animations associated with user action that can be undone.
- // Used for pre-lock and pre-shutdown animations.
- ANIMATION_SPEED_UNDOABLE,
- // Speed for workspace-like animations in "new" animation set.
- ANIMATION_SPEED_MOVE_WINDOWS,
- // Speed for undoing workspace-like animations in "new" animation set.
- ANIMATION_SPEED_UNDO_MOVE_WINDOWS,
- // Speed for shutdown in "new" animation set.
- ANIMATION_SPEED_SHUTDOWN,
- // Speed for reverting shutdown in "new" animation set.
- ANIMATION_SPEED_REVERT_SHUTDOWN,
- };
- // Specific containers or groups of containers that can be animated.
- enum Container {
- WALLPAPER = 1 << 0,
- SHELF = 1 << 1,
- // All user session related containers including the system wallpaper but
- // not including the user's wallpaper.
- NON_LOCK_SCREEN_CONTAINERS = 1 << 2,
- // Desktop wallpaper is moved to this layer when screen is locked.
- // This layer is excluded from lock animation so that wallpaper stays as is,
- // user session windows are hidden and lock UI is shown on top of it.
- // This layer is included in shutdown animation.
- LOCK_SCREEN_WALLPAPER = 1 << 3,
- // Lock screen and lock screen modal containers.
- LOCK_SCREEN_CONTAINERS = 1 << 4,
- // 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,
- };
- using AnimationCallback = base::OnceCallback<void(bool)>;
- // 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:
- AnimationSequence(const AnimationSequence&) = delete;
- AnimationSequence& operator=(const AnimationSequence&) = delete;
- 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(AnimationCallback 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();
- private:
- // Destroys this and calls the callback if the contained animations
- // completed successfully.
- void CleanupIfSequenceCompleted();
- // Tracks whether the sequence has ended.
- bool sequence_ended_ = false;
- // Track whether the contained animations have completed or not, both
- // successfully and unsuccessfully.
- bool animation_finished_ = false;
- // Flag to specify whether the callback should be invoked once the sequence
- // has completed.
- bool animation_aborted_ = false;
- // Callback to be called when the aniamtion is finished or aborted.
- AnimationCallback callback_;
- };
- SessionStateAnimator();
- SessionStateAnimator(const SessionStateAnimator&) = delete;
- SessionStateAnimator& operator=(const SessionStateAnimator&) = delete;
- virtual ~SessionStateAnimator();
- // Reports animation duration for |speed|.
- virtual base::TimeDelta GetDuration(AnimationSpeed speed);
- // Apply animation |type| to all containers included in |container_mask| with
- // specified |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| once at the end of the animations,
- // if it is not null.
- virtual void StartAnimationWithCallback(int container_mask,
- AnimationType type,
- AnimationSpeed speed,
- base::OnceClosure 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(
- AnimationCallback callback) = 0;
- // Returns true if the wallpaper is hidden.
- virtual bool IsWallpaperHidden() const = 0;
- // Shows the wallpaper immediately.
- virtual void ShowWallpaper() = 0;
- // Hides the wallpaper immediately.
- virtual void HideWallpaper() = 0;
- };
- } // namespace ash
- #endif // ASH_WM_SESSION_STATE_ANIMATOR_H_
|