- add sources.
[platform/framework/web/crosswalk.git] / src / ash / wm / resize_shadow_controller.cc
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/resize_shadow_controller.h"
6
7 #include <utility>
8
9 #include "ash/wm/resize_shadow.h"
10 #include "ui/aura/window.h"
11
12 namespace ash {
13 namespace internal {
14
15 ResizeShadowController::ResizeShadowController() {
16 }
17
18 ResizeShadowController::~ResizeShadowController() {
19   for (WindowShadowMap::const_iterator it = window_shadows_.begin();
20        it != window_shadows_.end(); ++it) {
21     it->first->RemoveObserver(this);
22   }
23 }
24
25 void ResizeShadowController::ShowShadow(aura::Window* window, int hit_test) {
26   ResizeShadow* shadow = GetShadowForWindow(window);
27   if (!shadow)
28     shadow = CreateShadow(window);
29   shadow->ShowForHitTest(hit_test);
30 }
31
32 void ResizeShadowController::HideShadow(aura::Window* window) {
33   ResizeShadow* shadow = GetShadowForWindow(window);
34   if (shadow)
35     shadow->Hide();
36 }
37
38 ResizeShadow* ResizeShadowController::GetShadowForWindowForTest(
39     aura::Window* window) {
40   return GetShadowForWindow(window);
41 }
42
43 void ResizeShadowController::OnWindowBoundsChanged(
44     aura::Window* window,
45     const gfx::Rect& old_bounds,
46     const gfx::Rect& new_bounds) {
47   ResizeShadow* shadow = GetShadowForWindow(window);
48   if (shadow)
49     shadow->Layout(new_bounds);
50 }
51
52 void ResizeShadowController::OnWindowDestroyed(aura::Window* window) {
53   window_shadows_.erase(window);
54 }
55
56 ResizeShadow* ResizeShadowController::CreateShadow(aura::Window* window) {
57   linked_ptr<ResizeShadow> shadow(new ResizeShadow());
58   window_shadows_.insert(std::make_pair(window, shadow));
59   // Attach the layers to this window.
60   shadow->Init(window);
61   // Ensure initial bounds are correct.
62   shadow->Layout(window->bounds());
63   // Watch for bounds changes.
64   window->AddObserver(this);
65   return shadow.get();
66 }
67
68 ResizeShadow* ResizeShadowController::GetShadowForWindow(aura::Window* window) {
69   WindowShadowMap::const_iterator it = window_shadows_.find(window);
70   return it != window_shadows_.end() ? it->second.get() : NULL;
71 }
72
73 }  // namespace internal
74 }  // namespace ash