OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "ash/wm/workspace/desktop_background_fade_controller.h" | |
6 | |
7 #include "ash/wm/window_animations.h" | |
8 #include "ash/wm/workspace/colored_window_controller.h" | |
9 #include "base/time/time.h" | |
10 #include "ui/aura/window.h" | |
11 #include "ui/compositor/scoped_layer_animation_settings.h" | |
12 #include "ui/views/widget/widget.h" | |
13 | |
14 namespace ash { | |
15 namespace internal { | |
16 | |
17 DesktopBackgroundFadeController::DesktopBackgroundFadeController( | |
18 aura::Window* parent, | |
19 aura::Window* position_above, | |
20 base::TimeDelta duration, | |
21 Direction direction) { | |
22 SkColor start_color, target_color; | |
23 gfx::Tween::Type tween_type; | |
24 if (direction == FADE_OUT) { | |
25 start_color = SkColorSetARGB(0, 0, 0, 0); | |
26 target_color = SK_ColorBLACK; | |
27 tween_type = gfx::Tween::EASE_IN_OUT; | |
28 } else { | |
29 start_color = SK_ColorBLACK; | |
30 target_color = SkColorSetARGB(0, 0, 0, 0); | |
31 tween_type = gfx::Tween::EASE_IN_OUT; | |
32 } | |
33 | |
34 window_controller_.reset( | |
35 new ColoredWindowController(parent, "DesktopFade")); | |
36 | |
37 // Force the window to be directly on top of the desktop. | |
38 aura::Window* fade_window = window_controller_->GetWidget()->GetNativeView(); | |
39 parent->StackChildBelow(fade_window, position_above); | |
40 parent->StackChildAbove(fade_window, position_above); | |
41 window_controller_->SetColor(start_color); | |
42 views::corewm::SetWindowVisibilityAnimationTransition( | |
43 window_controller_->GetWidget()->GetNativeView(), | |
44 views::corewm::ANIMATE_NONE); | |
45 window_controller_->GetWidget()->Show(); | |
46 { | |
47 ui::ScopedLayerAnimationSettings scoped_setter( | |
48 fade_window->layer()->GetAnimator()); | |
49 scoped_setter.AddObserver(this); | |
50 scoped_setter.SetTweenType(tween_type); | |
51 scoped_setter.SetTransitionDuration(duration); | |
52 window_controller_->SetColor(target_color); | |
53 } | |
54 } | |
55 | |
56 DesktopBackgroundFadeController::~DesktopBackgroundFadeController() { | |
57 StopObservingImplicitAnimations(); | |
58 } | |
59 | |
60 void DesktopBackgroundFadeController::OnImplicitAnimationsCompleted() { | |
61 window_controller_.reset(); | |
62 } | |
63 | |
64 } // namespace internal | |
65 } // namespace ash | |
OLD | NEW |