// 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_IMPL_H_ #define ASH_WM_SESSION_STATE_ANIMATOR_IMPL_H_ #include "ash/ash_export.h" #include "ash/wm/session_state_animator.h" #include "base/macros.h" #include "ui/aura/window.h" namespace ui { class LayerAnimationObserver; } namespace ash { // Displays onscreen animations for session state changes (lock/unlock, sign // out, shut down). class ASH_EXPORT SessionStateAnimatorImpl : public SessionStateAnimator { public: // Helper class used by tests to access internal state. class ASH_EXPORT TestApi { public: explicit TestApi(SessionStateAnimatorImpl* animator) : animator_(animator) {} // 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, SessionStateAnimator::AnimationType type) const; // Returns true if root window was last animated with |type| (probably; // the analysis is fairly ad-hoc). bool RootWindowIsAnimated(SessionStateAnimator::AnimationType type) const; private: SessionStateAnimatorImpl* animator_; // not owned DISALLOW_COPY_AND_ASSIGN(TestApi); }; SessionStateAnimatorImpl(); ~SessionStateAnimatorImpl() override; // Fills |containers| with the containers included in |container_mask|. static void GetContainers(int container_mask, aura::Window::Windows* containers); // ash::SessionStateAnimator: void StartAnimation(int container_mask, AnimationType type, AnimationSpeed speed) override; void StartAnimationWithCallback(int container_mask, AnimationType type, AnimationSpeed speed, base::Closure callback) override; AnimationSequence* BeginAnimationSequence(base::Closure callback) override; bool IsBackgroundHidden() const override; void ShowBackground() override; void HideBackground() override; private: class AnimationSequence; friend class AnimationSequence; virtual void StartAnimationInSequence(int container_mask, AnimationType type, AnimationSpeed speed, AnimationSequence* observer); // 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, SessionStateAnimator::AnimationType type, SessionStateAnimator::AnimationSpeed speed, ui::LayerAnimationObserver* observer); DISALLOW_COPY_AND_ASSIGN(SessionStateAnimatorImpl); }; } // namespace ash #endif // ASH_WM_SESSION_STATE_ANIMATOR_IMPL_H_