Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / ash / wm / session_state_animator.cc
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 #include "ash/wm/session_state_animator.h"
6
7 #include "ash/shell.h"
8 #include "ash/shell_window_ids.h"
9 #include "ash/wm/window_animations.h"
10 #include "ui/aura/client/aura_constants.h"
11 #include "ui/aura/window_event_dispatcher.h"
12 #include "ui/compositor/layer_animation_observer.h"
13 #include "ui/compositor/layer_animation_sequence.h"
14 #include "ui/compositor/scoped_layer_animation_settings.h"
15 #include "ui/views/widget/widget.h"
16
17 namespace ash {
18
19 const int SessionStateAnimator::kAllLockScreenContainersMask =
20     SessionStateAnimator::LOCK_SCREEN_BACKGROUND |
21     SessionStateAnimator::LOCK_SCREEN_CONTAINERS |
22     SessionStateAnimator::LOCK_SCREEN_RELATED_CONTAINERS;
23
24 const int SessionStateAnimator::kAllNonRootContainersMask =
25     SessionStateAnimator::kAllLockScreenContainersMask |
26     SessionStateAnimator::DESKTOP_BACKGROUND |
27     SessionStateAnimator::LAUNCHER |
28     SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS;
29
30 SessionStateAnimator::AnimationSequence::AnimationSequence(
31     base::Closure callback)
32   : sequence_ended_(false),
33     animation_completed_(false),
34     invoke_callback_(false),
35     callback_(callback) {
36 }
37
38 SessionStateAnimator::AnimationSequence::~AnimationSequence() {
39 }
40
41 void SessionStateAnimator::AnimationSequence::EndSequence() {
42   sequence_ended_ = true;
43   CleanupIfSequenceCompleted();
44 }
45
46 void SessionStateAnimator::AnimationSequence::OnAnimationCompleted() {
47   animation_completed_ = true;
48   invoke_callback_ = true;
49   CleanupIfSequenceCompleted();
50 }
51
52 void SessionStateAnimator::AnimationSequence::OnAnimationAborted() {
53   animation_completed_ = true;
54   invoke_callback_ = false;
55   CleanupIfSequenceCompleted();
56 }
57
58 void SessionStateAnimator::AnimationSequence::CleanupIfSequenceCompleted() {
59   if (sequence_ended_ && animation_completed_) {
60     if (invoke_callback_)
61       callback_.Run();
62     delete this;
63   }
64 }
65
66 SessionStateAnimator::SessionStateAnimator() {
67 }
68
69 SessionStateAnimator::~SessionStateAnimator() {
70 }
71
72 base::TimeDelta SessionStateAnimator::GetDuration(
73     SessionStateAnimator::AnimationSpeed speed) {
74   switch (speed) {
75     case ANIMATION_SPEED_IMMEDIATE:
76       return base::TimeDelta();
77     case ANIMATION_SPEED_UNDOABLE:
78       return base::TimeDelta::FromMilliseconds(400);
79     case ANIMATION_SPEED_REVERT:
80       return base::TimeDelta::FromMilliseconds(150);
81     case ANIMATION_SPEED_FAST:
82       return base::TimeDelta::FromMilliseconds(150);
83     case ANIMATION_SPEED_SHOW_LOCK_SCREEN:
84       return base::TimeDelta::FromMilliseconds(200);
85     case ANIMATION_SPEED_MOVE_WINDOWS:
86       return base::TimeDelta::FromMilliseconds(350);
87     case ANIMATION_SPEED_UNDO_MOVE_WINDOWS:
88       return base::TimeDelta::FromMilliseconds(350);
89     case ANIMATION_SPEED_SHUTDOWN:
90       return base::TimeDelta::FromMilliseconds(1000);
91     case ANIMATION_SPEED_REVERT_SHUTDOWN:
92       return base::TimeDelta::FromMilliseconds(500);
93   }
94   // Satisfy compilers that do not understand that we will return from switch
95   // above anyway.
96   DCHECK(false) << "Unhandled animation speed " << speed;
97   return base::TimeDelta();
98 }
99
100 }  // namespace ash