// 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 UI_WM_CORE_WINDOW_ANIMATIONS_H_ #define UI_WM_CORE_WINDOW_ANIMATIONS_H_ #include #include "ui/compositor/scoped_layer_animation_settings.h" #include "ui/wm/wm_export.h" namespace aura { class Window; } namespace base { class TimeDelta; } namespace gfx { class Rect; } namespace ui { class ImplicitAnimationObserver; class Layer; class LayerAnimationSequence; } namespace wm { // A variety of canned animations for window transitions. enum WindowVisibilityAnimationType { WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT = 0, // Default. Lets the system // decide based on window // type. WINDOW_VISIBILITY_ANIMATION_TYPE_DROP, // Window shrinks in. WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL, // Vertical Glenimation. WINDOW_VISIBILITY_ANIMATION_TYPE_FADE, // Fades in/out. WINDOW_VISIBILITY_ANIMATION_TYPE_ROTATE, // Window rotates in. // Downstream library animations start above this point. WINDOW_VISIBILITY_ANIMATION_MAX }; // Canned animations that take effect once but don't have a symmetric pair as // visibility animations do. enum WindowAnimationType { WINDOW_ANIMATION_TYPE_BOUNCE = 0, // Window scales up and down. }; // Type of visibility change transition that a window should animate. // Default behavior is to animate both show and hide. enum WindowVisibilityAnimationTransition { ANIMATE_SHOW = 0x1, ANIMATE_HIDE = 0x2, ANIMATE_BOTH = ANIMATE_SHOW | ANIMATE_HIDE, ANIMATE_NONE = 0x4, }; // These two methods use int for type rather than WindowVisibilityAnimationType // since downstream libraries can extend the set of animations. WM_EXPORT void SetWindowVisibilityAnimationType(aura::Window* window, int type); WM_EXPORT int GetWindowVisibilityAnimationType(aura::Window* window); WM_EXPORT void SetWindowVisibilityAnimationTransition( aura::Window* window, WindowVisibilityAnimationTransition transition); WM_EXPORT bool HasWindowVisibilityAnimationTransition( aura::Window* window, WindowVisibilityAnimationTransition transition); WM_EXPORT void SetWindowVisibilityAnimationDuration( aura::Window* window, const base::TimeDelta& duration); WM_EXPORT base::TimeDelta GetWindowVisibilityAnimationDuration( const aura::Window& window); WM_EXPORT void SetWindowVisibilityAnimationVerticalPosition( aura::Window* window, float position); class ImplicitHidingWindowAnimationObserver; // A wrapper of ui::ScopedLayerAnimationSettings for implicit hiding animations. // Use this to ensure that the hiding animation is visible even after // the window is deleted or deactivated, instead of using // ui::ScopedLayerAnimationSettings directly. class WM_EXPORT ScopedHidingAnimationSettings { public: explicit ScopedHidingAnimationSettings(aura::Window* window); ~ScopedHidingAnimationSettings(); // Returns the wrapped ScopedLayeAnimationSettings instance. ui::ScopedLayerAnimationSettings* layer_animation_settings() { return &layer_animation_settings_; } private: ui::ScopedLayerAnimationSettings layer_animation_settings_; ImplicitHidingWindowAnimationObserver* observer_; DISALLOW_COPY_AND_ASSIGN(ScopedHidingAnimationSettings); }; // Returns false if the |window| didn't animate. WM_EXPORT bool AnimateOnChildWindowVisibilityChanged(aura::Window* window, bool visible); WM_EXPORT bool AnimateWindow(aura::Window* window, WindowAnimationType type); // Returns true if window animations are disabled for |window|. Window // animations are enabled by default. If |window| is NULL, this just checks // if the global flag disabling window animations is present. WM_EXPORT bool WindowAnimationsDisabled(aura::Window* window); } // namespace wm #endif // UI_WM_CORE_WINDOW_ANIMATIONS_H_