| // 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 "ash/shell.h" |
| #include "ash/shell_window_ids.h" |
| #include "ash/wm/window_animations.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 { |
| |
| const int SessionStateAnimator::kAllLockScreenContainersMask = |
| SessionStateAnimator::LOCK_SCREEN_BACKGROUND | |
| SessionStateAnimator::LOCK_SCREEN_CONTAINERS | |
| SessionStateAnimator::LOCK_SCREEN_RELATED_CONTAINERS; |
| |
| const int SessionStateAnimator::kAllNonRootContainersMask = |
| SessionStateAnimator::kAllLockScreenContainersMask | |
| SessionStateAnimator::DESKTOP_BACKGROUND | |
| SessionStateAnimator::LAUNCHER | |
| SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS; |
| |
| SessionStateAnimator::AnimationSequence::AnimationSequence( |
| base::Closure callback) |
| : sequence_ended_(false), |
| animation_completed_(false), |
| invoke_callback_(false), |
| callback_(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_) |
| 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 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 |