1// Copyright 2013 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/overview/window_selector_window.h" 6 7#include "ash/screen_util.h" 8#include "ash/shell.h" 9#include "ash/shell_window_ids.h" 10#include "ash/wm/overview/scoped_transform_overview_window.h" 11#include "ui/aura/window.h" 12#include "ui/compositor/scoped_layer_animation_settings.h" 13#include "ui/gfx/rect.h" 14#include "ui/gfx/transform.h" 15#include "ui/views/controls/button/image_button.h" 16#include "ui/views/widget/widget.h" 17 18namespace ash { 19 20WindowSelectorWindow::WindowSelectorWindow(aura::Window* window) 21 : transform_window_(window) { 22 window->AddObserver(this); 23} 24 25WindowSelectorWindow::~WindowSelectorWindow() { 26 if (transform_window_.window()) 27 transform_window_.window()->RemoveObserver(this); 28} 29 30aura::Window* WindowSelectorWindow::GetRootWindow() { 31 return transform_window_.window()->GetRootWindow(); 32} 33 34bool WindowSelectorWindow::HasSelectableWindow(const aura::Window* window) { 35 return transform_window_.window() == window; 36} 37 38bool WindowSelectorWindow::Contains(const aura::Window* target) { 39 return transform_window_.Contains(target); 40} 41 42void WindowSelectorWindow::RestoreWindowOnExit(aura::Window* window) { 43 transform_window_.RestoreWindowOnExit(); 44} 45 46aura::Window* WindowSelectorWindow::SelectionWindow() { 47 return transform_window_.window(); 48} 49 50void WindowSelectorWindow::RemoveWindow(const aura::Window* window) { 51 DCHECK_EQ(transform_window_.window(), window); 52 transform_window_.window()->RemoveObserver(this); 53 transform_window_.OnWindowDestroyed(); 54 WindowSelectorItem::RemoveWindow(window); 55} 56 57bool WindowSelectorWindow::empty() const { 58 return transform_window_.window() == NULL; 59} 60 61void WindowSelectorWindow::PrepareForOverview() { 62 transform_window_.PrepareForOverview(); 63} 64 65void WindowSelectorWindow::SetItemBounds(aura::Window* root_window, 66 const gfx::Rect& target_bounds, 67 bool animate) { 68 gfx::Rect src_rect = transform_window_.GetBoundsInScreen(); 69 set_bounds(ScopedTransformOverviewWindow:: 70 ShrinkRectToFitPreservingAspectRatio(src_rect, target_bounds)); 71 transform_window_.SetTransform(root_window, 72 ScopedTransformOverviewWindow::GetTransformForRect(src_rect, bounds()), 73 animate); 74} 75 76void WindowSelectorWindow::SetOpacity(float opacity) { 77 transform_window_.window()->layer()->SetOpacity(opacity); 78 WindowSelectorItem::SetOpacity(opacity); 79} 80 81} // namespace ash 82