Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / ash / wm / overview / window_selector_window.cc
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
18 namespace ash {
19
20 WindowSelectorWindow::WindowSelectorWindow(aura::Window* window)
21     : transform_window_(window) {
22   window->AddObserver(this);
23 }
24
25 WindowSelectorWindow::~WindowSelectorWindow() {
26   if (transform_window_.window())
27     transform_window_.window()->RemoveObserver(this);
28 }
29
30 aura::Window* WindowSelectorWindow::GetRootWindow() {
31   return transform_window_.window()->GetRootWindow();
32 }
33
34 bool WindowSelectorWindow::HasSelectableWindow(const aura::Window* window) {
35   return transform_window_.window() == window;
36 }
37
38 bool WindowSelectorWindow::Contains(const aura::Window* target) {
39   return transform_window_.Contains(target);
40 }
41
42 void WindowSelectorWindow::RestoreWindowOnExit(aura::Window* window) {
43   transform_window_.RestoreWindowOnExit();
44 }
45
46 aura::Window* WindowSelectorWindow::SelectionWindow() {
47   return transform_window_.window();
48 }
49
50 void 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
57 bool WindowSelectorWindow::empty() const {
58   return transform_window_.window() == NULL;
59 }
60
61 void WindowSelectorWindow::PrepareForOverview() {
62   transform_window_.PrepareForOverview();
63 }
64
65 void 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
76 void WindowSelectorWindow::SetOpacity(float opacity) {
77   transform_window_.window()->layer()->SetOpacity(opacity);
78   WindowSelectorItem::SetOpacity(opacity);
79 }
80
81 }  // namespace ash