forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsession_state_animator.cc
109 lines (90 loc) · 3.52 KB
/
session_state_animator.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// 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.
#include "ash/wm/session_state_animator.h"
#include <utility>
#include "ash/ash_switches.h"
#include "ash/public/cpp/shell_window_ids.h"
#include "ash/shell.h"
#include "ash/wm/window_animations.h"
#include "base/command_line.h"
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/layer_animation_sequence.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/views/widget/widget.h"
namespace ash {
namespace {
bool IsTouchViewEnabled() {
return base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshEnableTouchView);
}
} // namespace
const int SessionStateAnimator::kAllLockScreenContainersMask =
SessionStateAnimator::LOCK_SCREEN_WALLPAPER |
SessionStateAnimator::LOCK_SCREEN_CONTAINERS |
SessionStateAnimator::LOCK_SCREEN_RELATED_CONTAINERS;
const int SessionStateAnimator::kAllNonRootContainersMask =
SessionStateAnimator::kAllLockScreenContainersMask |
SessionStateAnimator::WALLPAPER | SessionStateAnimator::LAUNCHER |
SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS;
SessionStateAnimator::AnimationSequence::AnimationSequence(
base::OnceClosure callback)
: sequence_ended_(false),
animation_completed_(false),
invoke_callback_(false),
callback_(std::move(callback)) {}
SessionStateAnimator::AnimationSequence::~AnimationSequence() {}
void SessionStateAnimator::AnimationSequence::EndSequence() {
sequence_ended_ = true;
CleanupIfSequenceCompleted();
}
void SessionStateAnimator::AnimationSequence::OnAnimationCompleted() {
animation_completed_ = true;
invoke_callback_ = true;
CleanupIfSequenceCompleted();
}
void SessionStateAnimator::AnimationSequence::OnAnimationAborted() {
animation_completed_ = true;
invoke_callback_ = false;
CleanupIfSequenceCompleted();
}
void SessionStateAnimator::AnimationSequence::CleanupIfSequenceCompleted() {
if (sequence_ended_ && animation_completed_) {
if (invoke_callback_)
std::move(callback_).Run();
delete this;
}
}
SessionStateAnimator::SessionStateAnimator() {}
SessionStateAnimator::~SessionStateAnimator() {}
base::TimeDelta SessionStateAnimator::GetDuration(
SessionStateAnimator::AnimationSpeed speed) {
switch (speed) {
case ANIMATION_SPEED_IMMEDIATE:
return base::TimeDelta();
case ANIMATION_SPEED_UNDOABLE:
return base::TimeDelta::FromMilliseconds(400);
case ANIMATION_SPEED_REVERT:
return base::TimeDelta::FromMilliseconds(150);
case ANIMATION_SPEED_FAST:
return base::TimeDelta::FromMilliseconds(150);
case ANIMATION_SPEED_SHOW_LOCK_SCREEN:
return base::TimeDelta::FromMilliseconds(200);
case ANIMATION_SPEED_MOVE_WINDOWS:
return base::TimeDelta::FromMilliseconds(350);
case ANIMATION_SPEED_UNDO_MOVE_WINDOWS:
return base::TimeDelta::FromMilliseconds(350);
case ANIMATION_SPEED_SHUTDOWN:
return IsTouchViewEnabled() ? base::TimeDelta::FromMilliseconds(1500)
: base::TimeDelta::FromMilliseconds(1000);
case ANIMATION_SPEED_REVERT_SHUTDOWN:
return base::TimeDelta::FromMilliseconds(500);
}
// Satisfy compilers that do not understand that we will return from switch
// above anyway.
DCHECK(false) << "Unhandled animation speed " << speed;
return base::TimeDelta();
}
} // namespace ash