| Index: ash/common/shelf/shelf_background_animator.h
|
| diff --git a/ash/common/shelf/shelf_background_animator.h b/ash/common/shelf/shelf_background_animator.h
|
| index fcc95dd26a905dff656bd445075d59acc3d42215..a74adf9c25543a70844db7b25396fd0a505c148e 100644
|
| --- a/ash/common/shelf/shelf_background_animator.h
|
| +++ b/ash/common/shelf/shelf_background_animator.h
|
| @@ -10,13 +10,18 @@
|
|
|
| #include "ash/ash_export.h"
|
| #include "ash/common/shelf/wm_shelf_observer.h"
|
| -#include "ash/common/wm/background_animator.h"
|
| #include "ash/public/cpp/shelf_types.h"
|
| #include "base/macros.h"
|
| #include "base/observer_list.h"
|
| +#include "ui/gfx/animation/animation_delegate.h"
|
| +
|
| +namespace gfx {
|
| +class SlideAnimation;
|
| +} // namespace gfx
|
|
|
| namespace ash {
|
|
|
| +enum class AnimationChangeType;
|
| class ShelfBackgroundAnimatorObserver;
|
| class ShelfBackgroundAnimatorTestApi;
|
| class WmShelf;
|
| @@ -30,10 +35,10 @@ class WmShelf;
|
| //
|
| // Material Design:
|
| // 1. Shelf button backgrounds
|
| -// 2. Opaque overlay for the SHELF_BACKGROUND_OVERLAP and
|
| -// SHELF_BACKGROUND_MAXIMIZED states.
|
| +// 2. Overlay for the SHELF_BACKGROUND_OVERLAP and SHELF_BACKGROUND_MAXIMIZED
|
| +// states.
|
| class ASH_EXPORT ShelfBackgroundAnimator : public WmShelfObserver,
|
| - public BackgroundAnimatorDelegate {
|
| + public gfx::AnimationDelegate {
|
| public:
|
| // Initializes this with the given |background_type|. This will observe the
|
| // |wm_shelf| for background type changes if |wm_shelf| is not null.
|
| @@ -50,7 +55,7 @@ class ASH_EXPORT ShelfBackgroundAnimator : public WmShelfObserver,
|
| void RemoveObserver(ShelfBackgroundAnimatorObserver* observer);
|
|
|
| // Updates |observer| with current values.
|
| - void Initialize(ShelfBackgroundAnimatorObserver* observer) const;
|
| + void NotifyObserver(ShelfBackgroundAnimatorObserver* observer);
|
|
|
| // Conditionally animates the background to the specified |background_type|
|
| // and notifies observers of the new background parameters (e.g. alpha).
|
| @@ -63,36 +68,86 @@ class ASH_EXPORT ShelfBackgroundAnimator : public WmShelfObserver,
|
| // BACKGROUND_CHANGE_ANIMATE change type is received it will be ignored and
|
| // observers will NOT be notified.
|
| void PaintBackground(ShelfBackgroundType background_type,
|
| - BackgroundAnimatorChangeType change_type);
|
| + AnimationChangeType change_type);
|
| +
|
| + // gfx::AnimationDelegate:
|
| + void AnimationProgressed(const gfx::Animation* animation) override;
|
| + void AnimationEnded(const gfx::Animation* animation) override;
|
| + void AnimationCanceled(const gfx::Animation* animation) override;
|
|
|
| protected:
|
| // WmShelfObserver:
|
| - void OnBackgroundTypeChanged(
|
| - ShelfBackgroundType background_type,
|
| - BackgroundAnimatorChangeType change_type) override;
|
| -
|
| - // BackgroundAnimatorDelegate:
|
| - void UpdateBackground(BackgroundAnimator* animator, int alpha) override;
|
| - void BackgroundAnimationEnded(BackgroundAnimator* animator) override;
|
| + void OnBackgroundTypeChanged(ShelfBackgroundType background_type,
|
| + AnimationChangeType change_type) override;
|
|
|
| private:
|
| friend class ShelfBackgroundAnimatorTestApi;
|
|
|
| + // Track the values related to a single animation (e.g. Shelf background,
|
| + // shelf item background)
|
| + class AnimationValues {
|
| + public:
|
| + AnimationValues();
|
| + ~AnimationValues();
|
| +
|
| + int current_alpha() const { return current_alpha_; }
|
| +
|
| + // Updates the current values based on |t| value between 0 and 1.
|
| + void UpdateCurrentValues(double t);
|
| +
|
| + // Set the target values and assign the current values to the initial
|
| + // values.
|
| + void SetTargetValues(int target_alpha);
|
| +
|
| + // Returns true if the initial values of |this| equal the target values of
|
| + // |other|.
|
| + bool InitialValuesEqualTargetValuesOf(const AnimationValues& other) const;
|
| +
|
| + private:
|
| + int initial_alpha_ = 0;
|
| + int current_alpha_ = 0;
|
| + int target_alpha_ = 0;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(AnimationValues);
|
| + };
|
| +
|
| + // The maximum alpha value that can be used.
|
| + static const int kMaxAlpha = 255;
|
| +
|
| // Helper function used by PaintBackground() to animate the background.
|
| void AnimateBackground(ShelfBackgroundType background_type,
|
| - BackgroundAnimatorChangeType change_type);
|
| + AnimationChangeType change_type);
|
| +
|
| + // Returns true if the current |animator_| should be re-used to animate to the
|
| + // given |background_type|. This allows for pre-empted animations to take the
|
| + // same amount of time to reverse to the |previous_background_type_|.
|
| + bool CanReuseAnimator(ShelfBackgroundType background_type) const;
|
|
|
| - // Creates new BackgroundAnimators configured with the correct durations and
|
| - // initial/target alpha values. If any BackgroundAnimators are currently
|
| - // animating they will be stopped.
|
| - void CreateAnimators(ShelfBackgroundType background_type,
|
| - BackgroundAnimatorChangeType change_type);
|
| + // Creates a new |animator_| configured with the correct duration. If the
|
| + // |animator_| is currently animating it will be stopped.
|
| + void CreateAnimator(ShelfBackgroundType background_type);
|
|
|
| - // Stops all existing animators owned by this.
|
| - void StopAnimators();
|
| + // Stops the animator owned by this.
|
| + void StopAnimator();
|
|
|
| - // Called when an alpha value changes and observers need to be notified.
|
| - void OnAlphaChanged(BackgroundAnimator* animator, int alpha);
|
| + // Updates the |shelf_background_values_| and |shelf_item_background_values_|.
|
| + void SetTargetValues(ShelfBackgroundType background_type);
|
| +
|
| + // Sets the target values for |shelf_background_values| and
|
| + // |item_background_values| according to |background_type|.
|
| + void GetTargetValues(ShelfBackgroundType background_type,
|
| + AnimationValues* shelf_background_values,
|
| + AnimationValues* item_background_values) const;
|
| +
|
| + // Updates the animation values corresponding to the |t| value between 0 and
|
| + // 1.
|
| + void SetAnimationValues(double t);
|
| +
|
| + // Called when observers need to be notified.
|
| + void NotifyObservers();
|
| +
|
| + // The shelf to observe for changes to the shelf background type, can be null.
|
| + WmShelf* wm_shelf_;
|
|
|
| // The background type that this is animating towards or has reached.
|
| ShelfBackgroundType target_background_type_ = SHELF_BACKGROUND_DEFAULT;
|
| @@ -100,27 +155,16 @@ class ASH_EXPORT ShelfBackgroundAnimator : public WmShelfObserver,
|
| // The last background type this is animating away from.
|
| ShelfBackgroundType previous_background_type_ = SHELF_BACKGROUND_MAXIMIZED;
|
|
|
| - // Animates the solid color background of the Shelf.
|
| - // TODO(bruthig): Replace all BackgroundAnimators with a single
|
| - // gfx::SlideAnimation.
|
| - std::unique_ptr<BackgroundAnimator> opaque_background_animator_;
|
| + // Drives the animtion.
|
| + std::unique_ptr<gfx::SlideAnimation> animator_;
|
|
|
| - // Animates the backgrounds of Shelf child Views.
|
| - std::unique_ptr<BackgroundAnimator> item_background_animator_;
|
| + // Tracks the shelf background animation values.
|
| + AnimationValues shelf_background_values_;
|
|
|
| - base::ObserverList<ShelfBackgroundAnimatorObserver> observers_;
|
| -
|
| - // True if the existing BackgroundAnimators can be re-used to animate to the
|
| - // |previous_background_type_|. This allows for pre-empted animations to take
|
| - // the same amount of time to reverse to the |previous_background_type_|.
|
| - bool can_reuse_animators_ = false;
|
| -
|
| - // Tracks how many animators completed successfully since the last
|
| - // CreateAnimators() call. Used to properly set |can_reuse_animators_|.
|
| - int successful_animator_count_ = 0;
|
| + // Tracks the item background animation values.
|
| + AnimationValues item_background_values_;
|
|
|
| - // The shelf to observe for changes to the shelf background type, can be null.
|
| - WmShelf* wm_shelf_;
|
| + base::ObserverList<ShelfBackgroundAnimatorObserver> observers_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ShelfBackgroundAnimator);
|
| };
|
|
|