Home | History | Annotate | Download | only in overview
      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