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..593091e517979a7d3e8769b6f849937f27996378 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| 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); |
@@ -158,6 +159,8 @@ void HideWindow(aura::Window* window, |
ui::Layer* layer = window->layer(); |
ui::ScopedLayerAnimationSettings settings(layer->GetAnimator()); |
+ settings.SetPreemptionStrategy( |
+ ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
settings.SetTransitionDuration(duration); |
settings.SetTweenType(ui::Tween::EASE_OUT); |
@@ -188,19 +191,16 @@ void HideWindow(aura::Window* window, |
} |
} |
-void ShowWindow(aura::Window* window, |
- base::TimeDelta duration, |
- bool above, |
- ui::LayerAnimationObserver* observer) { |
+// Animates |window| to identity transform and full opacity over |duration|. |
+void TransformWindowToBaseState(aura::Window* window, |
+ base::TimeDelta duration, |
+ ui::LayerAnimationObserver* observer) { |
ui::Layer* layer = window->layer(); |
ui::ScopedLayerAnimationSettings settings(layer->GetAnimator()); |
- // Set initial state of animation |
- settings.SetTransitionDuration(base::TimeDelta()); |
- SetTransformForScaleAnimation(layer, |
- above ? LAYER_SCALE_ANIMATION_ABOVE : LAYER_SCALE_ANIMATION_BELOW); |
- |
// Animate to target values. |
+ settings.SetPreemptionStrategy( |
+ ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
settings.SetTransitionDuration(duration); |
settings.SetTweenType(ui::Tween::EASE_OUT); |
@@ -223,6 +223,23 @@ void ShowWindow(aura::Window* window, |
} |
} |
+void ShowWindow(aura::Window* window, |
+ base::TimeDelta duration, |
+ bool above, |
+ ui::LayerAnimationObserver* observer) { |
+ ui::Layer* layer = window->layer(); |
+ ui::ScopedLayerAnimationSettings settings(layer->GetAnimator()); |
+ |
+ // Set initial state of animation |
+ settings.SetPreemptionStrategy( |
+ ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
+ settings.SetTransitionDuration(base::TimeDelta()); |
+ SetTransformForScaleAnimation(layer, |
+ above ? LAYER_SCALE_ANIMATION_ABOVE : LAYER_SCALE_ANIMATION_BELOW); |
+ |
+ TransformWindowToBaseState(window, duration, observer); |
+} |
+ |
// Starts grayscale/brightness animation for |window| over |duration|. Target |
// value for both grayscale and brightness are specified by |target|. |
void StartGrayscaleBrightnessAnimationForWindow( |
@@ -232,8 +249,26 @@ void StartGrayscaleBrightnessAnimationForWindow( |
ui::LayerAnimationObserver* observer) { |
ui::LayerAnimator* animator = window->layer()->GetAnimator(); |
- std::vector<ui::LayerAnimationSequence*> animations = |
- CreateBrightnessGrayscaleAnimationSequence(target, duration); |
+ scoped_ptr<ui::LayerAnimationSequence> brightness_sequence( |
+ new ui::LayerAnimationSequence()); |
+ scoped_ptr<ui::LayerAnimationSequence> grayscale_sequence( |
+ new ui::LayerAnimationSequence()); |
+ |
+ scoped_ptr<ui::LayerAnimationElement> brightness_element( |
+ ui::LayerAnimationElement::CreateBrightnessElement( |
+ target, duration)); |
+ brightness_element->set_tween_type(ui::Tween::EASE_IN); |
+ brightness_sequence->AddElement(brightness_element.release()); |
+ |
+ scoped_ptr<ui::LayerAnimationElement> grayscale_element( |
+ ui::LayerAnimationElement::CreateGrayscaleElement( |
+ target, duration)); |
+ grayscale_element->set_tween_type(ui::Tween::EASE_IN); |
+ grayscale_sequence->AddElement(grayscale_element.release()); |
+ |
+ std::vector<ui::LayerAnimationSequence*> animations; |
+ animations.push_back(brightness_sequence.release()); |
+ animations.push_back(grayscale_sequence.release()); |
if (observer) |
animations[0]->AddObserver(observer); |
@@ -299,6 +334,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; |
@@ -318,6 +357,7 @@ bool IsLayerAnimated(ui::Layer* layer, |
return false; |
break; |
case SessionStateAnimator::ANIMATION_DROP: |
+ case SessionStateAnimator::ANIMATION_UNDO_LIFT: |
//ToDo(antim) : check other effects |
if (layer->GetTargetOpacity() < 0.9999) |
return false; |
@@ -391,15 +431,15 @@ base::TimeDelta SessionStateAnimator::GetDuration(AnimationSpeed speed) { |
case ANIMATION_SPEED_UNDOABLE: |
return base::TimeDelta::FromMilliseconds(400); |
case ANIMATION_SPEED_REVERT: |
- return base::TimeDelta::FromMilliseconds(100); |
+ 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(400); |
+ return base::TimeDelta::FromMilliseconds(350); |
case ANIMATION_SPEED_UNDO_MOVE_WINDOWS: |
- return base::TimeDelta::FromMilliseconds(600); |
+ return base::TimeDelta::FromMilliseconds(500); |
case ANIMATION_SPEED_SHUTDOWN: |
return base::TimeDelta::FromMilliseconds(1000); |
case ANIMATION_SPEED_REVERT_SHUTDOWN: |
@@ -458,11 +498,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, |
@@ -476,7 +511,6 @@ void SessionStateAnimator::StartAnimation(int container_mask, |
} |
} |
-// Apply animation |type| to all containers described by |container_mask|. |
void SessionStateAnimator::StartAnimationWithCallback( |
int container_mask, |
AnimationType type, |
@@ -492,6 +526,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 +563,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); |
@@ -532,6 +582,9 @@ void SessionStateAnimator::RunAnimationForWindow( |
case ANIMATION_DROP: |
ShowWindow(window, duration, true, observer); |
break; |
+ case ANIMATION_UNDO_LIFT: |
+ TransformWindowToBaseState(window, duration, observer); |
+ break; |
case ANIMATION_RAISE_TO_SCREEN: |
ShowWindow(window, duration, false, observer); |
break; |