Index: ash/wm/session_state_animator.cc |
diff --git a/ash/wm/session_state_animator.cc b/ash/wm/session_state_animator.cc |
index 6f55b90a6b5f965c84df2702587cad6fe5f375b1..694996ce9731f616a65f3fa53c15a57590745821 100644 |
--- a/ash/wm/session_state_animator.cc |
+++ b/ash/wm/session_state_animator.cc |
@@ -120,15 +120,16 @@ void StartPartialFadeAnimation(aura::Window* window, |
sequence->AddObserver(observer); |
} |
-// Fades |window| in to full opacity over |duration|. |
-void FadeInWindow(aura::Window* window, |
- base::TimeDelta duration, |
- ui::LayerAnimationObserver* observer) { |
+// Fades |window| in to |opacity| over |duration|. |
+void StartOpacityAnimationForWindow(aura::Window* window, |
+ float opacity, |
+ base::TimeDelta duration, |
+ ui::LayerAnimationObserver* observer) { |
ui::LayerAnimator* animator = window->layer()->GetAnimator(); |
animator->set_preemption_strategy( |
ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
ui::LayerAnimationSequence* sequence = new ui::LayerAnimationSequence( |
- ui::LayerAnimationElement::CreateOpacityElement(1.0, duration)); |
+ ui::LayerAnimationElement::CreateOpacityElement(opacity, duration)); |
animator->StartAnimation(sequence); |
if (observer) |
sequence->AddObserver(observer); |
@@ -299,6 +300,10 @@ bool IsLayerAnimated(ui::Layer* layer, |
if (layer->GetTargetOpacity() < 0.9999) |
return false; |
break; |
+ case SessionStateAnimator::ANIMATION_FADE_OUT: |
+ if (layer->GetTargetOpacity() > 0.0001) |
+ return false; |
+ break; |
case SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY: |
if (layer->GetTargetOpacity() > 0.0001) |
return false; |
@@ -458,11 +463,6 @@ void SessionStateAnimator::GetContainers(int container_mask, |
root_window, |
internal::kShellWindowId_LockScreenRelatedContainersContainer)); |
} |
- if (container_mask & LOCK_SCREEN_SYSTEM_FOREGROUND) { |
- containers->push_back(Shell::GetContainer( |
- root_window, |
- internal::kShellWindowId_PowerButtonAnimationContainer)); |
- } |
} |
void SessionStateAnimator::StartAnimation(int container_mask, |
@@ -492,6 +492,19 @@ void SessionStateAnimator::StartAnimationWithCallback( |
} |
} |
+void SessionStateAnimator::StartAnimationWithObserver( |
+ int container_mask, |
+ AnimationType type, |
+ AnimationSpeed speed, |
+ ui::LayerAnimationObserver* observer) { |
+ aura::Window::Windows containers; |
+ GetContainers(container_mask, &containers); |
+ for (aura::Window::Windows::const_iterator it = containers.begin(); |
+ it != containers.end(); ++it) { |
+ RunAnimationForWindow(*it, type, speed, observer); |
+ } |
+} |
+ |
void SessionStateAnimator::StartGlobalAnimation(AnimationType type, |
AnimationSpeed speed) { |
aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); |
@@ -516,7 +529,10 @@ void SessionStateAnimator::RunAnimationForWindow( |
StartFastCloseAnimationForWindow(window, duration, observer); |
break; |
case ANIMATION_FADE_IN: |
- FadeInWindow(window, duration, observer); |
+ StartOpacityAnimationForWindow(window, 1.0, duration, observer); |
+ break; |
+ case ANIMATION_FADE_OUT: |
+ StartOpacityAnimationForWindow(window, 0.0, duration, observer); |
break; |
case ANIMATION_HIDE_IMMEDIATELY: |
DCHECK_EQ(speed, ANIMATION_SPEED_IMMEDIATE); |