1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef ASH_WM_WINDOW_ANIMATIONS_H_ 6 #define ASH_WM_WINDOW_ANIMATIONS_H_ 7 8 #include "ash/ash_export.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "ui/gfx/animation/tween.h" 11 #include "ui/gfx/transform.h" 12 #include "ui/wm/core/window_animations.h" 13 14 namespace aura { 15 class Window; 16 } 17 namespace ui { 18 class Layer; 19 class LayerTreeOwner; 20 } 21 namespace views { 22 } 23 24 // This is only for animations specific to Ash. For window animations shared 25 // with desktop Chrome, see ui/views/corewm/window_animations.h. 26 namespace ash { 27 28 // An extension of the window animations provided by CoreWm. These should be 29 // Ash-specific only. 30 enum WindowVisibilityAnimationType { 31 // Window scale/rotates down to its launcher icon. 32 WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE = 33 ::wm::WINDOW_VISIBILITY_ANIMATION_MAX, 34 // Fade in/out using brightness and grayscale web filters. 35 WINDOW_VISIBILITY_ANIMATION_TYPE_BRIGHTNESS_GRAYSCALE 36 }; 37 38 // Direction for ash-specific window animations used in workspaces and 39 // lock/unlock animations. 40 enum LayerScaleAnimationDirection { 41 LAYER_SCALE_ANIMATION_ABOVE, 42 LAYER_SCALE_ANIMATION_BELOW, 43 }; 44 45 // Amount of time for the cross fade animation. 46 extern const int kCrossFadeDurationMS; 47 48 // Implementation of cross fading. Window is the window being cross faded. It 49 // should be at the target bounds. |old_layer_owner| contains the previous layer 50 // from |window|. |tween_type| specifies the tween type of the cross fade 51 // animation. 52 ASH_EXPORT base::TimeDelta CrossFadeAnimation( 53 aura::Window* window, 54 scoped_ptr<ui::LayerTreeOwner> old_layer_owner, 55 gfx::Tween::Type tween_type); 56 57 ASH_EXPORT bool AnimateOnChildWindowVisibilityChanged(aura::Window* window, 58 bool visible); 59 60 // Creates vector of animation sequences that lasts for |duration| and changes 61 // brightness and grayscale to |target_value|. Caller takes ownership of 62 // returned LayerAnimationSequence objects. 63 ASH_EXPORT std::vector<ui::LayerAnimationSequence*> 64 CreateBrightnessGrayscaleAnimationSequence(float target_value, 65 base::TimeDelta duration); 66 67 // Applies scale related to the specified AshWindowScaleType. 68 ASH_EXPORT void SetTransformForScaleAnimation( 69 ui::Layer* layer, 70 LayerScaleAnimationDirection type); 71 72 // Returns the approximate bounds to which |window| will be animated when it 73 // is minimized. The bounds are approximate because the minimize animation 74 // involves rotation. 75 ASH_EXPORT gfx::Rect GetMinimizeAnimationTargetBoundsInScreen( 76 aura::Window* window); 77 78 } // namespace ash 79 80 #endif // ASH_WM_WINDOW_ANIMATIONS_H_ 81