// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ash/wm/resize_shadow_controller.h" #include #include "ash/wm/resize_shadow.h" #include "ui/aura/window.h" namespace ash { ResizeShadowController::ResizeShadowController() { } ResizeShadowController::~ResizeShadowController() { for (WindowShadowMap::const_iterator it = window_shadows_.begin(); it != window_shadows_.end(); ++it) { it->first->RemoveObserver(this); } } void ResizeShadowController::ShowShadow(aura::Window* window, int hit_test) { ResizeShadow* shadow = GetShadowForWindow(window); if (!shadow) shadow = CreateShadow(window); shadow->ShowForHitTest(hit_test); } void ResizeShadowController::HideShadow(aura::Window* window) { ResizeShadow* shadow = GetShadowForWindow(window); if (shadow) shadow->Hide(); } ResizeShadow* ResizeShadowController::GetShadowForWindowForTest( aura::Window* window) { return GetShadowForWindow(window); } void ResizeShadowController::OnWindowBoundsChanged( aura::Window* window, const gfx::Rect& old_bounds, const gfx::Rect& new_bounds) { ResizeShadow* shadow = GetShadowForWindow(window); if (shadow) shadow->Layout(new_bounds); } void ResizeShadowController::OnWindowDestroyed(aura::Window* window) { window_shadows_.erase(window); } ResizeShadow* ResizeShadowController::CreateShadow(aura::Window* window) { linked_ptr shadow(new ResizeShadow()); window_shadows_.insert(std::make_pair(window, shadow)); // Attach the layers to this window. shadow->Init(window); // Ensure initial bounds are correct. shadow->Layout(window->bounds()); // Watch for bounds changes. window->AddObserver(this); return shadow.get(); } ResizeShadow* ResizeShadowController::GetShadowForWindow(aura::Window* window) { WindowShadowMap::const_iterator it = window_shadows_.find(window); return it != window_shadows_.end() ? it->second.get() : NULL; } } // namespace ash