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 14namespace ash { 15namespace internal { 16 17DesktopBackgroundFadeController::DesktopBackgroundFadeController( 18 aura::Window* parent, 19 aura::Window* position_above, 20 base::TimeDelta duration, 21 Direction direction) { 22 SkColor start_color, target_color; 23 ui::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 = ui::Tween::EASE_IN_OUT; 28 } else { 29 start_color = SK_ColorBLACK; 30 target_color = SkColorSetARGB(0, 0, 0, 0); 31 tween_type = ui::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 56DesktopBackgroundFadeController::~DesktopBackgroundFadeController() { 57 StopObservingImplicitAnimations(); 58} 59 60void DesktopBackgroundFadeController::OnImplicitAnimationsCompleted() { 61 window_controller_.reset(); 62} 63 64} // namespace internal 65} // namespace ash 66