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 "grit/ash_resources.h" 12 #include "ui/aura/window.h" 13 #include "ui/base/resource/resource_bundle.h" 14 #include "ui/compositor/scoped_layer_animation_settings.h" 15 #include "ui/gfx/rect.h" 16 #include "ui/gfx/transform.h" 17 #include "ui/views/controls/button/image_button.h" 18 #include "ui/views/widget/widget.h" 19 20 namespace ash { 21 22 WindowSelectorWindow::WindowSelectorWindow(aura::Window* window) 23 : transform_window_(window) { 24 } 25 26 WindowSelectorWindow::~WindowSelectorWindow() { 27 } 28 29 aura::Window* WindowSelectorWindow::GetRootWindow() { 30 return transform_window_.window()->GetRootWindow(); 31 } 32 33 bool WindowSelectorWindow::HasSelectableWindow(const aura::Window* window) { 34 return transform_window_.window() == window; 35 } 36 37 bool WindowSelectorWindow::Contains(const aura::Window* target) { 38 return transform_window_.Contains(target); 39 } 40 41 void WindowSelectorWindow::RestoreWindowOnExit(aura::Window* window) { 42 transform_window_.RestoreWindowOnExit(); 43 } 44 45 aura::Window* WindowSelectorWindow::SelectionWindow() { 46 return transform_window_.window(); 47 } 48 49 void WindowSelectorWindow::RemoveWindow(const aura::Window* window) { 50 DCHECK_EQ(transform_window_.window(), window); 51 transform_window_.OnWindowDestroyed(); 52 WindowSelectorItem::RemoveWindow(window); 53 } 54 55 bool WindowSelectorWindow::empty() const { 56 return transform_window_.window() == NULL; 57 } 58 59 void WindowSelectorWindow::PrepareForOverview() { 60 transform_window_.PrepareForOverview(); 61 } 62 63 void WindowSelectorWindow::SetItemBounds(aura::Window* root_window, 64 const gfx::Rect& target_bounds, 65 bool animate) { 66 gfx::Rect src_rect = transform_window_.GetBoundsInScreen(); 67 set_bounds(ScopedTransformOverviewWindow:: 68 ShrinkRectToFitPreservingAspectRatio(src_rect, target_bounds)); 69 transform_window_.SetTransform(root_window, 70 ScopedTransformOverviewWindow::GetTransformForRect(src_rect, bounds()), 71 animate); 72 } 73 74 } // namespace ash 75