blob: 8d3e1980f7e1c97580c4e8d51a4c4814e09a321d [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// 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"
Torne (Richard Coles)a1401312014-03-18 10:20:56 +00009#include "base/memory/scoped_ptr.h"
10#include "ui/gfx/animation/tween.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000011#include "ui/gfx/transform.h"
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000012#include "ui/wm/core/window_animations.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000013
14namespace aura {
15class Window;
16}
Torne (Richard Coles)58218062012-11-14 11:43:16 +000017namespace ui {
Torne (Richard Coles)58218062012-11-14 11:43:16 +000018class Layer;
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000019class LayerTreeOwner;
20}
21namespace views {
Torne (Richard Coles)58218062012-11-14 11:43:16 +000022}
23
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000024// This is only for animations specific to Ash. For window animations shared
25// with desktop Chrome, see ui/views/corewm/window_animations.h.
Torne (Richard Coles)58218062012-11-14 11:43:16 +000026namespace ash {
27
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000028// An extension of the window animations provided by CoreWm. These should be
29// Ash-specific only.
Torne (Richard Coles)58218062012-11-14 11:43:16 +000030enum WindowVisibilityAnimationType {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000031 // Window scale/rotates down to its launcher icon.
32 WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE =
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000033 ::wm::WINDOW_VISIBILITY_ANIMATION_MAX,
Torne (Richard Coles)58218062012-11-14 11:43:16 +000034 // Fade in/out using brightness and grayscale web filters.
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000035 WINDOW_VISIBILITY_ANIMATION_TYPE_BRIGHTNESS_GRAYSCALE
Torne (Richard Coles)58218062012-11-14 11:43:16 +000036};
37
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000038// Direction for ash-specific window animations used in workspaces and
39// lock/unlock animations.
40enum LayerScaleAnimationDirection {
41 LAYER_SCALE_ANIMATION_ABOVE,
42 LAYER_SCALE_ANIMATION_BELOW,
Torne (Richard Coles)58218062012-11-14 11:43:16 +000043};
44
Ben Murdoch2385ea32013-08-06 11:01:04 +010045// Amount of time for the cross fade animation.
46extern const int kCrossFadeDurationMS;
47
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000048// 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.
52ASH_EXPORT base::TimeDelta CrossFadeAnimation(
53 aura::Window* window,
54 scoped_ptr<ui::LayerTreeOwner> old_layer_owner,
55 gfx::Tween::Type tween_type);
Torne (Richard Coles)58218062012-11-14 11:43:16 +000056
Torne (Richard Coles)58218062012-11-14 11:43:16 +000057ASH_EXPORT bool AnimateOnChildWindowVisibilityChanged(aura::Window* window,
58 bool visible);
59
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000060// 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.
63ASH_EXPORT std::vector<ui::LayerAnimationSequence*>
64CreateBrightnessGrayscaleAnimationSequence(float target_value,
65 base::TimeDelta duration);
66
67// Applies scale related to the specified AshWindowScaleType.
68ASH_EXPORT void SetTransformForScaleAnimation(
69 ui::Layer* layer,
70 LayerScaleAnimationDirection type);
71
Ben Murdochca12bfa2013-07-23 11:17:05 +010072// 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.
75ASH_EXPORT gfx::Rect GetMinimizeAnimationTargetBoundsInScreen(
76 aura::Window* window);
Torne (Richard Coles)58218062012-11-14 11:43:16 +000077
Ben Murdochca12bfa2013-07-23 11:17:05 +010078} // namespace ash
Torne (Richard Coles)58218062012-11-14 11:43:16 +000079
80#endif // ASH_WM_WINDOW_ANIMATIONS_H_