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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
62 kWindowAnimation_Vertical_TranslateY); | 62 kWindowAnimation_Vertical_TranslateY); |
63 | 63 |
64 namespace { | 64 namespace { |
65 | 65 |
66 const int kDefaultAnimationDurationForMenuMS = 150; | 66 const int kDefaultAnimationDurationForMenuMS = 150; |
67 | 67 |
68 // Durations for the cross-fade animation, in milliseconds. | 68 // Durations for the cross-fade animation, in milliseconds. |
69 const float kCrossFadeDurationMinMs = 100.f; | 69 const float kCrossFadeDurationMinMs = 100.f; |
70 const float kCrossFadeDurationMaxMs = 400.f; | 70 const float kCrossFadeDurationMaxMs = 400.f; |
71 | 71 |
72 // Durations for the brightness/grayscale fade animation, in milliseconds. | |
73 const int kBrightnessGrayscaleFadeDurationMs = 2000; | |
sky
2012/07/19 19:22:19
This is a really long time. Are you sure we want 2
Nikita (slow)
2012/07/19 20:47:09
Yes, that what it should look like according to mo
Nikita (slow)
2012/07/20 18:21:29
Confirmed with UX.
| |
74 | |
75 // Brightness/grayscale values for hide/show window animations. | |
76 const float kWindowAnimation_HideBrightness = 1.f; | |
77 const float kWindowAnimation_HideGrayscale = 1.f; | |
78 const float kWindowAnimation_ShowBrightness = 0.f; | |
79 const float kWindowAnimation_ShowGrayscale = 0.f; | |
80 | |
72 const float kWindowAnimation_HideOpacity = 0.f; | 81 const float kWindowAnimation_HideOpacity = 0.f; |
73 const float kWindowAnimation_ShowOpacity = 1.f; | 82 const float kWindowAnimation_ShowOpacity = 1.f; |
74 const float kWindowAnimation_TranslateFactor = -0.025f; | 83 const float kWindowAnimation_TranslateFactor = -0.025f; |
75 const float kWindowAnimation_ScaleFactor = 1.05f; | 84 const float kWindowAnimation_ScaleFactor = 1.05f; |
76 const float kWindowAnimation_MinimizeRotate = -5.f; | 85 const float kWindowAnimation_MinimizeRotate = -5.f; |
77 | 86 |
78 // Amount windows are scaled during workspace animations. | 87 // Amount windows are scaled during workspace animations. |
79 const float kWorkspaceScale = .95f; | 88 const float kWorkspaceScale = .95f; |
80 | 89 |
81 int64 Round64(float f) { | 90 int64 Round64(float f) { |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
458 window->layer()->set_delegate(NULL); | 467 window->layer()->set_delegate(NULL); |
459 | 468 |
460 // Property sets within this scope will be implicitly animated. | 469 // Property sets within this scope will be implicitly animated. |
461 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); | 470 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); |
462 settings.AddObserver(new HidingWindowAnimationObserver(window)); | 471 settings.AddObserver(new HidingWindowAnimationObserver(window)); |
463 window->layer()->SetVisible(false); | 472 window->layer()->SetVisible(false); |
464 | 473 |
465 AddLayerAnimationsForMinimize(window, false); | 474 AddLayerAnimationsForMinimize(window, false); |
466 } | 475 } |
467 | 476 |
477 void AnimateShowWindow_BrightnessGrayscale(aura::Window* window) { | |
478 window->layer()->set_delegate(window); | |
479 window->layer()->SetOpacity(kWindowAnimation_ShowOpacity); | |
480 window->layer()->SetLayerBrightness(kWindowAnimation_HideBrightness); | |
481 window->layer()->SetLayerGrayscale(kWindowAnimation_HideGrayscale); | |
482 | |
483 window->layer()->SetVisible(true); | |
484 | |
485 scoped_ptr<ui::LayerAnimationSequence> brightness_sequence( | |
486 new ui::LayerAnimationSequence()); | |
487 scoped_ptr<ui::LayerAnimationSequence> grayscale_sequence( | |
488 new ui::LayerAnimationSequence()); | |
489 | |
490 brightness_sequence->AddElement( | |
491 ui::LayerAnimationElement::CreateBrightnessElement( | |
492 kWindowAnimation_ShowBrightness, | |
493 base::TimeDelta::FromMilliseconds( | |
494 kBrightnessGrayscaleFadeDurationMs))); | |
495 grayscale_sequence->AddElement( | |
496 ui::LayerAnimationElement::CreateGrayscaleElement( | |
497 kWindowAnimation_ShowGrayscale, | |
498 base::TimeDelta::FromMilliseconds( | |
499 kBrightnessGrayscaleFadeDurationMs))); | |
500 | |
501 std::vector<ui::LayerAnimationSequence*> animations; | |
502 animations.push_back(brightness_sequence.release()); | |
503 animations.push_back(grayscale_sequence.release()); | |
504 window->layer()->GetAnimator()->ScheduleTogether(animations); | |
505 } | |
506 | |
468 bool AnimateShowWindow(aura::Window* window) { | 507 bool AnimateShowWindow(aura::Window* window) { |
469 if (!HasWindowVisibilityAnimationTransition(window, ANIMATE_SHOW)) | 508 if (!HasWindowVisibilityAnimationTransition(window, ANIMATE_SHOW)) |
470 return false; | 509 return false; |
471 | 510 |
472 switch (GetWindowVisibilityAnimationType(window)) { | 511 switch (GetWindowVisibilityAnimationType(window)) { |
473 case WINDOW_VISIBILITY_ANIMATION_TYPE_DROP: | 512 case WINDOW_VISIBILITY_ANIMATION_TYPE_DROP: |
474 AnimateShowWindow_Drop(window); | 513 AnimateShowWindow_Drop(window); |
475 return true; | 514 return true; |
476 case WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL: | 515 case WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL: |
477 AnimateShowWindow_Vertical(window); | 516 AnimateShowWindow_Vertical(window); |
478 return true; | 517 return true; |
479 case WINDOW_VISIBILITY_ANIMATION_TYPE_FADE: | 518 case WINDOW_VISIBILITY_ANIMATION_TYPE_FADE: |
480 AnimateShowWindow_Fade(window); | 519 AnimateShowWindow_Fade(window); |
481 return true; | 520 return true; |
482 case WINDOW_VISIBILITY_ANIMATION_TYPE_WORKSPACE_SHOW: | 521 case WINDOW_VISIBILITY_ANIMATION_TYPE_WORKSPACE_SHOW: |
483 AnimateShowWindow_Workspace(window); | 522 AnimateShowWindow_Workspace(window); |
484 return true; | 523 return true; |
485 case WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE: | 524 case WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE: |
486 AnimateShowWindow_Minimize(window); | 525 AnimateShowWindow_Minimize(window); |
487 return true; | 526 return true; |
527 case WINDOW_VISIBILITY_ANIMATION_TYPE_BRIGHTNESS_GRAYSCALE: | |
sky
2012/07/19 19:22:19
What about the hide case?
Nikita (slow)
2012/07/19 20:47:09
Yes, I might refactor code a bit to support revers
Nikita (slow)
2012/07/20 18:21:29
Done.
| |
528 AnimateShowWindow_BrightnessGrayscale(window); | |
529 return true; | |
488 default: | 530 default: |
489 NOTREACHED(); | 531 NOTREACHED(); |
490 return false; | 532 return false; |
491 } | 533 } |
492 } | 534 } |
493 | 535 |
494 bool AnimateHideWindow(aura::Window* window) { | 536 bool AnimateHideWindow(aura::Window* window) { |
495 if (!HasWindowVisibilityAnimationTransition(window, ANIMATE_HIDE)) | 537 if (!HasWindowVisibilityAnimationTransition(window, ANIMATE_HIDE)) |
496 return false; | 538 return false; |
497 | 539 |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
778 AnimateHideWindow(window); | 820 AnimateHideWindow(window); |
779 } | 821 } |
780 } | 822 } |
781 | 823 |
782 void SetDelayedOldLayerDeletionInCrossFadeForTest(bool value) { | 824 void SetDelayedOldLayerDeletionInCrossFadeForTest(bool value) { |
783 delayed_old_layer_deletion_in_cross_fade_for_test_ = value; | 825 delayed_old_layer_deletion_in_cross_fade_for_test_ = value; |
784 } | 826 } |
785 | 827 |
786 } // namespace internal | 828 } // namespace internal |
787 } // namespace ash | 829 } // namespace ash |
OLD | NEW |