| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/wm/window_animations.h" | 5 #include "ash/wm/window_animations.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 // Brightness/grayscale values for hide/show window animations. | 53 // Brightness/grayscale values for hide/show window animations. |
| 54 const float kWindowAnimation_HideBrightnessGrayscale = 1.f; | 54 const float kWindowAnimation_HideBrightnessGrayscale = 1.f; |
| 55 const float kWindowAnimation_ShowBrightnessGrayscale = 0.f; | 55 const float kWindowAnimation_ShowBrightnessGrayscale = 0.f; |
| 56 | 56 |
| 57 const float kWindowAnimation_HideOpacity = 0.f; | 57 const float kWindowAnimation_HideOpacity = 0.f; |
| 58 const float kWindowAnimation_ShowOpacity = 1.f; | 58 const float kWindowAnimation_ShowOpacity = 1.f; |
| 59 // TODO(sky): if we end up sticking with 0, nuke the code doing the rotation. | 59 // TODO(sky): if we end up sticking with 0, nuke the code doing the rotation. |
| 60 const float kWindowAnimation_MinimizeRotate = 0.f; | 60 const float kWindowAnimation_MinimizeRotate = 0.f; |
| 61 | 61 |
| 62 // Tween type when cross fading a workspace window. | 62 // Tween type when cross fading a workspace window. |
| 63 const ui::Tween::Type kCrossFadeTweenType = ui::Tween::EASE_IN_OUT; | 63 const gfx::Tween::Type kCrossFadeTweenType = gfx::Tween::EASE_IN_OUT; |
| 64 | 64 |
| 65 // Scales for AshWindow above/below current workspace. | 65 // Scales for AshWindow above/below current workspace. |
| 66 const float kLayerScaleAboveSize = 1.1f; | 66 const float kLayerScaleAboveSize = 1.1f; |
| 67 const float kLayerScaleBelowSize = .9f; | 67 const float kLayerScaleBelowSize = .9f; |
| 68 | 68 |
| 69 int64 Round64(float f) { | 69 int64 Round64(float f) { |
| 70 return static_cast<int64>(f + 0.5f); | 70 return static_cast<int64>(f + 0.5f); |
| 71 } | 71 } |
| 72 | 72 |
| 73 } // namespace | 73 } // namespace |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 rotation_about_pivot->SetReversed(show); | 109 rotation_about_pivot->SetReversed(show); |
| 110 | 110 |
| 111 base::TimeDelta duration = base::TimeDelta::FromMilliseconds( | 111 base::TimeDelta duration = base::TimeDelta::FromMilliseconds( |
| 112 kLayerAnimationsForMinimizeDurationMS); | 112 kLayerAnimationsForMinimizeDurationMS); |
| 113 | 113 |
| 114 scoped_ptr<ui::LayerAnimationElement> transition( | 114 scoped_ptr<ui::LayerAnimationElement> transition( |
| 115 ui::LayerAnimationElement::CreateInterpolatedTransformElement( | 115 ui::LayerAnimationElement::CreateInterpolatedTransformElement( |
| 116 rotation_about_pivot.release(), duration)); | 116 rotation_about_pivot.release(), duration)); |
| 117 | 117 |
| 118 transition->set_tween_type( | 118 transition->set_tween_type( |
| 119 show ? ui::Tween::EASE_IN : ui::Tween::EASE_IN_OUT); | 119 show ? gfx::Tween::EASE_IN : gfx::Tween::EASE_IN_OUT); |
| 120 | 120 |
| 121 window->layer()->GetAnimator()->ScheduleAnimation( | 121 window->layer()->GetAnimator()->ScheduleAnimation( |
| 122 new ui::LayerAnimationSequence(transition.release())); | 122 new ui::LayerAnimationSequence(transition.release())); |
| 123 | 123 |
| 124 // When hiding a window, turn off blending until the animation is 3 / 4 done | 124 // When hiding a window, turn off blending until the animation is 3 / 4 done |
| 125 // to save bandwidth and reduce jank. | 125 // to save bandwidth and reduce jank. |
| 126 if (!show) { | 126 if (!show) { |
| 127 window->layer()->GetAnimator()->SchedulePauseForProperties( | 127 window->layer()->GetAnimator()->SchedulePauseForProperties( |
| 128 (duration * 3) / 4, ui::LayerAnimationElement::OPACITY, -1); | 128 (duration * 3) / 4, ui::LayerAnimationElement::OPACITY, -1); |
| 129 } | 129 } |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 DISALLOW_COPY_AND_ASSIGN(CrossFadeObserver); | 311 DISALLOW_COPY_AND_ASSIGN(CrossFadeObserver); |
| 312 }; | 312 }; |
| 313 | 313 |
| 314 // Implementation of cross fading. Window is the window being cross faded. It | 314 // Implementation of cross fading. Window is the window being cross faded. It |
| 315 // should be at the target bounds. |old_layer| the previous layer from |window|. | 315 // should be at the target bounds. |old_layer| the previous layer from |window|. |
| 316 // This takes ownership of |old_layer| and deletes when the animation is done. | 316 // This takes ownership of |old_layer| and deletes when the animation is done. |
| 317 // |pause_duration| is the duration to pause at the current bounds before | 317 // |pause_duration| is the duration to pause at the current bounds before |
| 318 // animating. Returns the duration of the fade. | 318 // animating. Returns the duration of the fade. |
| 319 base::TimeDelta CrossFadeImpl(aura::Window* window, | 319 base::TimeDelta CrossFadeImpl(aura::Window* window, |
| 320 ui::Layer* old_layer, | 320 ui::Layer* old_layer, |
| 321 ui::Tween::Type tween_type) { | 321 gfx::Tween::Type tween_type) { |
| 322 const gfx::Rect old_bounds(old_layer->bounds()); | 322 const gfx::Rect old_bounds(old_layer->bounds()); |
| 323 const gfx::Rect new_bounds(window->bounds()); | 323 const gfx::Rect new_bounds(window->bounds()); |
| 324 const bool old_on_top = (old_bounds.width() > new_bounds.width()); | 324 const bool old_on_top = (old_bounds.width() > new_bounds.width()); |
| 325 | 325 |
| 326 // Shorten the animation if there's not much visual movement. | 326 // Shorten the animation if there's not much visual movement. |
| 327 const base::TimeDelta duration = GetCrossFadeDuration(old_bounds, new_bounds); | 327 const base::TimeDelta duration = GetCrossFadeDuration(old_bounds, new_bounds); |
| 328 | 328 |
| 329 // Scale up the old layer while translating to new position. | 329 // Scale up the old layer while translating to new position. |
| 330 { | 330 { |
| 331 old_layer->GetAnimator()->StopAnimating(); | 331 old_layer->GetAnimator()->StopAnimating(); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 // Resize the window to the new size, which will force a layout and paint. | 406 // Resize the window to the new size, which will force a layout and paint. |
| 407 window->SetBounds(new_bounds); | 407 window->SetBounds(new_bounds); |
| 408 | 408 |
| 409 // Ensure the higher-resolution layer is on top. | 409 // Ensure the higher-resolution layer is on top. |
| 410 bool old_on_top = (old_bounds.width() > new_bounds.width()); | 410 bool old_on_top = (old_bounds.width() > new_bounds.width()); |
| 411 if (old_on_top) | 411 if (old_on_top) |
| 412 old_layer->parent()->StackBelow(new_layer, old_layer); | 412 old_layer->parent()->StackBelow(new_layer, old_layer); |
| 413 else | 413 else |
| 414 old_layer->parent()->StackAbove(new_layer, old_layer); | 414 old_layer->parent()->StackAbove(new_layer, old_layer); |
| 415 | 415 |
| 416 CrossFadeImpl(window, old_layer, ui::Tween::EASE_OUT); | 416 CrossFadeImpl(window, old_layer, gfx::Tween::EASE_OUT); |
| 417 } | 417 } |
| 418 | 418 |
| 419 void CrossFadeWindowBetweenWorkspaces(aura::Window* new_workspace, | 419 void CrossFadeWindowBetweenWorkspaces(aura::Window* new_workspace, |
| 420 aura::Window* window, | 420 aura::Window* window, |
| 421 ui::Layer* old_layer) { | 421 ui::Layer* old_layer) { |
| 422 ui::Layer* layer_parent = new_workspace->layer()->parent(); | 422 ui::Layer* layer_parent = new_workspace->layer()->parent(); |
| 423 layer_parent->Add(old_layer); | 423 layer_parent->Add(old_layer); |
| 424 const bool restoring = old_layer->bounds().width() > window->bounds().width(); | 424 const bool restoring = old_layer->bounds().width() > window->bounds().width(); |
| 425 if (restoring) | 425 if (restoring) |
| 426 layer_parent->StackAbove(old_layer, new_workspace->layer()); | 426 layer_parent->StackAbove(old_layer, new_workspace->layer()); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 if (visible) | 466 if (visible) |
| 467 return AnimateShowWindow(window); | 467 return AnimateShowWindow(window); |
| 468 // Don't start hiding the window again if it's already being hidden. | 468 // Don't start hiding the window again if it's already being hidden. |
| 469 return window->layer()->GetTargetOpacity() != 0.0f && | 469 return window->layer()->GetTargetOpacity() != 0.0f && |
| 470 AnimateHideWindow(window); | 470 AnimateHideWindow(window); |
| 471 } | 471 } |
| 472 | 472 |
| 473 std::vector<ui::LayerAnimationSequence*> | 473 std::vector<ui::LayerAnimationSequence*> |
| 474 CreateBrightnessGrayscaleAnimationSequence(float target_value, | 474 CreateBrightnessGrayscaleAnimationSequence(float target_value, |
| 475 base::TimeDelta duration) { | 475 base::TimeDelta duration) { |
| 476 ui::Tween::Type animation_type = ui::Tween::EASE_OUT; | 476 gfx::Tween::Type animation_type = gfx::Tween::EASE_OUT; |
| 477 scoped_ptr<ui::LayerAnimationSequence> brightness_sequence( | 477 scoped_ptr<ui::LayerAnimationSequence> brightness_sequence( |
| 478 new ui::LayerAnimationSequence()); | 478 new ui::LayerAnimationSequence()); |
| 479 scoped_ptr<ui::LayerAnimationSequence> grayscale_sequence( | 479 scoped_ptr<ui::LayerAnimationSequence> grayscale_sequence( |
| 480 new ui::LayerAnimationSequence()); | 480 new ui::LayerAnimationSequence()); |
| 481 | 481 |
| 482 scoped_ptr<ui::LayerAnimationElement> brightness_element( | 482 scoped_ptr<ui::LayerAnimationElement> brightness_element( |
| 483 ui::LayerAnimationElement::CreateBrightnessElement( | 483 ui::LayerAnimationElement::CreateBrightnessElement( |
| 484 target_value, duration)); | 484 target_value, duration)); |
| 485 brightness_element->set_tween_type(animation_type); | 485 brightness_element->set_tween_type(animation_type); |
| 486 brightness_sequence->AddElement(brightness_element.release()); | 486 brightness_sequence->AddElement(brightness_element.release()); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 } | 554 } |
| 555 | 555 |
| 556 // Assume the launcher is overflowed, zoom off to the bottom right of the | 556 // Assume the launcher is overflowed, zoom off to the bottom right of the |
| 557 // work area. | 557 // work area. |
| 558 gfx::Rect work_area = | 558 gfx::Rect work_area = |
| 559 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area(); | 559 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area(); |
| 560 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0); | 560 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0); |
| 561 } | 561 } |
| 562 | 562 |
| 563 } // namespace ash | 563 } // namespace ash |
| OLD | NEW |