Home | History | Annotate | Download | only in corewm
      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 UI_VIEWS_COREWM_WINDOW_ANIMATIONS_H_
      6 #define UI_VIEWS_COREWM_WINDOW_ANIMATIONS_H_
      7 
      8 #include <vector>
      9 
     10 #include "ui/views/views_export.h"
     11 
     12 namespace aura {
     13 class Window;
     14 }
     15 namespace base {
     16 class TimeDelta;
     17 }
     18 namespace gfx {
     19 class Rect;
     20 }
     21 namespace ui {
     22 class ImplicitAnimationObserver;
     23 class Layer;
     24 class LayerAnimationSequence;
     25 }
     26 
     27 namespace views {
     28 namespace corewm {
     29 
     30 // A variety of canned animations for window transitions.
     31 enum WindowVisibilityAnimationType {
     32   WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT = 0,     // Default. Lets the system
     33                                                     // decide based on window
     34                                                     // type.
     35   WINDOW_VISIBILITY_ANIMATION_TYPE_DROP,            // Window shrinks in.
     36   WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL,        // Vertical Glenimation.
     37   WINDOW_VISIBILITY_ANIMATION_TYPE_FADE,            // Fades in/out.
     38   WINDOW_VISIBILITY_ANIMATION_TYPE_ROTATE,          // Window rotates in.
     39 
     40   // Downstream library animations start above this point.
     41   WINDOW_VISIBILITY_ANIMATION_MAX
     42 };
     43 
     44 // Canned animations that take effect once but don't have a symmetric pair as
     45 // visibility animations do.
     46 enum WindowAnimationType {
     47   WINDOW_ANIMATION_TYPE_BOUNCE = 0,  // Window scales up and down.
     48 };
     49 
     50 // Type of visibility change transition that a window should animate.
     51 // Default behavior is to animate both show and hide.
     52 enum WindowVisibilityAnimationTransition {
     53   ANIMATE_SHOW = 0x1,
     54   ANIMATE_HIDE = 0x2,
     55   ANIMATE_BOTH = ANIMATE_SHOW | ANIMATE_HIDE,
     56   ANIMATE_NONE = 0x4,
     57 };
     58 
     59 // These two methods use int for type rather than WindowVisibilityAnimationType
     60 // since downstream libraries can extend the set of animations.
     61 VIEWS_EXPORT void SetWindowVisibilityAnimationType(aura::Window* window,
     62                                                    int type);
     63 VIEWS_EXPORT int GetWindowVisibilityAnimationType(aura::Window* window);
     64 
     65 VIEWS_EXPORT void SetWindowVisibilityAnimationTransition(
     66     aura::Window* window,
     67     WindowVisibilityAnimationTransition transition);
     68 
     69 VIEWS_EXPORT bool HasWindowVisibilityAnimationTransition(
     70     aura::Window* window,
     71     WindowVisibilityAnimationTransition transition);
     72 
     73 VIEWS_EXPORT void SetWindowVisibilityAnimationDuration(
     74     aura::Window* window,
     75     const base::TimeDelta& duration);
     76 
     77 VIEWS_EXPORT void SetWindowVisibilityAnimationVerticalPosition(
     78     aura::Window* window,
     79     float position);
     80 
     81 // Creates an ImplicitAnimationObserver that takes ownership of the layers
     82 // associated with a Window so that the animation can continue after the Window
     83 // has been destroyed.
     84 // The returned object deletes itself when the animations are done.
     85 VIEWS_EXPORT ui::ImplicitAnimationObserver* CreateHidingWindowAnimationObserver(
     86     aura::Window* window);
     87 
     88 // Returns false if the |window| didn't animate.
     89 VIEWS_EXPORT bool AnimateOnChildWindowVisibilityChanged(aura::Window* window,
     90                                                         bool visible);
     91 VIEWS_EXPORT bool AnimateWindow(aura::Window* window, WindowAnimationType type);
     92 
     93 // Returns true if window animations are disabled for |window|. Window
     94 // animations are enabled by default. If |window| is NULL, this just checks
     95 // if the global flag disabling window animations is present.
     96 VIEWS_EXPORT bool WindowAnimationsDisabled(aura::Window* window);
     97 
     98 }  // namespace corewm
     99 }  // namespace views
    100 
    101 #endif  // UI_VIEWS_COREWM_WINDOW_ANIMATIONS_H_
    102