12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright 2019 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_SHELF_WINDOW_SCALE_ANIMATION_H_
- #define ASH_SHELF_WINDOW_SCALE_ANIMATION_H_
- #include <memory>
- #include <vector>
- #include "ash/ash_export.h"
- #include "base/auto_reset.h"
- #include "base/callback.h"
- #include "base/callback_helpers.h"
- #include "base/scoped_observation.h"
- #include "ui/aura/window.h"
- namespace ash {
- enum class BackdropWindowMode;
- // The class which does the scale-down animation to shelf or scale-up to restore
- // to its original bounds for all windows in the transient tree of |window_|
- // after drag ends. Window(s) will be minimized with the descending order
- // in the transient tree after animation completes if we're scaling down to
- // shelf.
- class ASH_EXPORT WindowScaleAnimation {
- public:
- enum class WindowScaleType {
- kScaleDownToShelf,
- kScaleUpToRestore,
- };
- WindowScaleAnimation(aura::Window* window,
- WindowScaleType scale_type,
- base::OnceClosure opt_callback);
- WindowScaleAnimation(const WindowScaleAnimation&) = delete;
- WindowScaleAnimation& operator=(const WindowScaleAnimation&) = delete;
- ~WindowScaleAnimation();
- // Starts animating and creating animation observers for all window(s) in the
- // transient tree of `window_` in a descending order,
- void Start();
- // For tests only:
- static base::AutoReset<bool>
- EnableScopedFastAnimationForTransientChildForTest();
- private:
- class AnimationObserver;
- void DestroyWindowAnimationObserver(
- WindowScaleAnimation::AnimationObserver* animation_observer);
- void OnScaleWindowsOnAnimationsCompleted();
- aura::Window* window_;
- base::OnceClosure opt_callback_;
- const WindowScaleType scale_type_;
- // Each window in the transient tree has its own |WindowAnimationObserver|.
- std::vector<std::unique_ptr<AnimationObserver>> window_animation_observers_;
- };
- } // namespace ash
- #endif // ASH_SHELF_WINDOW_SCALE_ANIMATION_H_
|