11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright (c) 2012 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef ASH_WM_SESSION_STATE_ANIMATOR_IMPL_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define ASH_WM_SESSION_STATE_ANIMATOR_IMPL_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ash/ash_export.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ash/wm/session_state_animator.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/basictypes.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/aura/window.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace ui { 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass LayerAnimationObserver; 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace ash { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Displays onscreen animations for session state changes (lock/unlock, sign 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// out, shut down). 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ASH_EXPORT SessionStateAnimatorImpl : public SessionStateAnimator { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Helper class used by tests to access internal state. 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci class ASH_EXPORT TestApi { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit TestApi(SessionStateAnimatorImpl* animator) 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : animator_(animator) {} 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns true if containers of a given |container_mask| 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // were last animated with |type| (probably; the analysis is fairly ad-hoc). 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |container_mask| is a bitfield of a Container. 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool ContainersAreAnimated(int container_mask, 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SessionStateAnimator::AnimationType type) const; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns true if root window was last animated with |type| (probably; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the analysis is fairly ad-hoc). 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool RootWindowIsAnimated(SessionStateAnimator::AnimationType type) const; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SessionStateAnimatorImpl* animator_; // not owned 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(TestApi); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SessionStateAnimatorImpl(); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~SessionStateAnimatorImpl(); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Fills |containers| with the containers included in |container_mask|. 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static void GetContainers(int container_mask, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci aura::Window::Windows* containers); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ash::SessionStateAnimator: 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void StartAnimation(int container_mask, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnimationType type, 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnimationSpeed speed) OVERRIDE; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void StartAnimationWithCallback( 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int container_mask, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnimationType type, 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnimationSpeed speed, 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure callback) OVERRIDE; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual AnimationSequence* BeginAnimationSequence( 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure callback) OVERRIDE; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool IsBackgroundHidden() const OVERRIDE; 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void ShowBackground() OVERRIDE; 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void HideBackground() OVERRIDE; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci class AnimationSequence; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci friend class AnimationSequence; 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void StartAnimationInSequence(int container_mask, 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnimationType type, 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnimationSpeed speed, 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnimationSequence* observer); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Apply animation |type| to window |window| with |speed| and add |observer| 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // if it is not NULL to the last animation sequence. 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void RunAnimationForWindow(aura::Window* window, 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SessionStateAnimator::AnimationType type, 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SessionStateAnimator::AnimationSpeed speed, 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::LayerAnimationObserver* observer); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(SessionStateAnimatorImpl); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace ash 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // ASH_WM_SESSION_STATE_ANIMATOR_IMPL_H_ 89