// 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 #include #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 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> window_animation_observers_; }; } // namespace ash #endif // ASH_SHELF_WINDOW_SCALE_ANIMATION_H_