| Index: ui/views/corewm/shadow_controller.cc
|
| diff --git a/ui/views/corewm/shadow_controller.cc b/ui/views/corewm/shadow_controller.cc
|
| deleted file mode 100644
|
| index 2ec2f151b3a46ddff47520bdb9789d33a9e16d4b..0000000000000000000000000000000000000000
|
| --- a/ui/views/corewm/shadow_controller.cc
|
| +++ /dev/null
|
| @@ -1,274 +0,0 @@
|
| -// 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 "ui/views/corewm/shadow_controller.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/linked_ptr.h"
|
| -#include "base/scoped_observer.h"
|
| -#include "ui/aura/client/activation_client.h"
|
| -#include "ui/aura/env.h"
|
| -#include "ui/aura/env_observer.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_event_dispatcher.h"
|
| -#include "ui/aura/window_observer.h"
|
| -#include "ui/compositor/layer.h"
|
| -#include "ui/views/corewm/shadow.h"
|
| -#include "ui/views/corewm/shadow_types.h"
|
| -#include "ui/views/corewm/window_util.h"
|
| -
|
| -using std::make_pair;
|
| -
|
| -namespace views {
|
| -namespace corewm {
|
| -
|
| -namespace {
|
| -
|
| -ShadowType GetShadowTypeFromWindow(aura::Window* window) {
|
| - switch (window->type()) {
|
| - case ui::wm::WINDOW_TYPE_NORMAL:
|
| - case ui::wm::WINDOW_TYPE_PANEL:
|
| - case ui::wm::WINDOW_TYPE_MENU:
|
| - case ui::wm::WINDOW_TYPE_TOOLTIP:
|
| - return SHADOW_TYPE_RECTANGULAR;
|
| - default:
|
| - break;
|
| - }
|
| - return SHADOW_TYPE_NONE;
|
| -}
|
| -
|
| -bool ShouldUseSmallShadowForWindow(aura::Window* window) {
|
| - switch (window->type()) {
|
| - case ui::wm::WINDOW_TYPE_MENU:
|
| - case ui::wm::WINDOW_TYPE_TOOLTIP:
|
| - return true;
|
| - default:
|
| - break;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -// Returns the shadow style to be applied to |losing_active| when it is losing
|
| -// active to |gaining_active|. |gaining_active| may be of a type that hides when
|
| -// inactive, and as such we do not want to render |losing_active| as inactive.
|
| -Shadow::Style GetShadowStyleForWindowLosingActive(
|
| - aura::Window* losing_active,
|
| - aura::Window* gaining_active) {
|
| - if (gaining_active && aura::client::GetHideOnDeactivate(gaining_active)) {
|
| - aura::Window::Windows::const_iterator it =
|
| - std::find(GetTransientChildren(losing_active).begin(),
|
| - GetTransientChildren(losing_active).end(),
|
| - gaining_active);
|
| - if (it != GetTransientChildren(losing_active).end())
|
| - return Shadow::STYLE_ACTIVE;
|
| - }
|
| - return Shadow::STYLE_INACTIVE;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// ShadowController::Impl ------------------------------------------------------
|
| -
|
| -// Real implementation of the ShadowController. ShadowController observes
|
| -// ActivationChangeObserver, which are per ActivationClient, where as there is
|
| -// only a single Impl (as it observes all window creation by way of an
|
| -// EnvObserver).
|
| -class ShadowController::Impl :
|
| - public aura::EnvObserver,
|
| - public aura::WindowObserver,
|
| - public base::RefCounted<Impl> {
|
| - public:
|
| - // Returns the singleton instance, destroyed when there are no more refs.
|
| - static Impl* GetInstance();
|
| -
|
| - // aura::EnvObserver override:
|
| - virtual void OnWindowInitialized(aura::Window* window) OVERRIDE;
|
| -
|
| - // aura::WindowObserver overrides:
|
| - virtual void OnWindowPropertyChanged(
|
| - aura::Window* window, const void* key, intptr_t old) OVERRIDE;
|
| - virtual void OnWindowBoundsChanged(
|
| - aura::Window* window,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds) OVERRIDE;
|
| - virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE;
|
| -
|
| - private:
|
| - friend class base::RefCounted<Impl>;
|
| - friend class ShadowController;
|
| - friend class ShadowController::TestApi;
|
| -
|
| - typedef std::map<aura::Window*, linked_ptr<Shadow> > WindowShadowMap;
|
| -
|
| - Impl();
|
| - virtual ~Impl();
|
| -
|
| - // Forwarded from ShadowController.
|
| - void OnWindowActivated(aura::Window* gained_active,
|
| - aura::Window* lost_active);
|
| -
|
| - // Checks if |window| is visible and contains a property requesting a shadow.
|
| - bool ShouldShowShadowForWindow(aura::Window* window) const;
|
| -
|
| - // Returns |window|'s shadow from |window_shadows_|, or NULL if no shadow
|
| - // exists.
|
| - Shadow* GetShadowForWindow(aura::Window* window);
|
| -
|
| - // Updates the shadow styles for windows when activation changes.
|
| - void HandleWindowActivationChange(aura::Window* gaining_active,
|
| - aura::Window* losing_active);
|
| -
|
| - // Shows or hides |window|'s shadow as needed (creating the shadow if
|
| - // necessary).
|
| - void HandlePossibleShadowVisibilityChange(aura::Window* window);
|
| -
|
| - // Creates a new shadow for |window| and stores it in |window_shadows_|. The
|
| - // shadow's bounds are initialized and it is added to the window's layer.
|
| - void CreateShadowForWindow(aura::Window* window);
|
| -
|
| - WindowShadowMap window_shadows_;
|
| -
|
| - ScopedObserver<aura::Window, aura::WindowObserver> observer_manager_;
|
| -
|
| - static Impl* instance_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Impl);
|
| -};
|
| -
|
| -// static
|
| -ShadowController::Impl* ShadowController::Impl::instance_ = NULL;
|
| -
|
| -// static
|
| -ShadowController::Impl* ShadowController::Impl::GetInstance() {
|
| - if (!instance_)
|
| - instance_ = new Impl();
|
| - return instance_;
|
| -}
|
| -
|
| -void ShadowController::Impl::OnWindowInitialized(aura::Window* window) {
|
| - observer_manager_.Add(window);
|
| - SetShadowType(window, GetShadowTypeFromWindow(window));
|
| - HandlePossibleShadowVisibilityChange(window);
|
| -}
|
| -
|
| -void ShadowController::Impl::OnWindowPropertyChanged(aura::Window* window,
|
| - const void* key,
|
| - intptr_t old) {
|
| - if (key == kShadowTypeKey) {
|
| - HandlePossibleShadowVisibilityChange(window);
|
| - return;
|
| - }
|
| -}
|
| -
|
| -void ShadowController::Impl::OnWindowBoundsChanged(
|
| - aura::Window* window,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds) {
|
| - Shadow* shadow = GetShadowForWindow(window);
|
| - if (shadow)
|
| - shadow->SetContentBounds(gfx::Rect(new_bounds.size()));
|
| -}
|
| -
|
| -void ShadowController::Impl::OnWindowDestroyed(aura::Window* window) {
|
| - window_shadows_.erase(window);
|
| - observer_manager_.Remove(window);
|
| -}
|
| -
|
| -void ShadowController::Impl::OnWindowActivated(aura::Window* gained_active,
|
| - aura::Window* lost_active) {
|
| - if (gained_active) {
|
| - Shadow* shadow = GetShadowForWindow(gained_active);
|
| - if (shadow && !ShouldUseSmallShadowForWindow(gained_active))
|
| - shadow->SetStyle(Shadow::STYLE_ACTIVE);
|
| - }
|
| - if (lost_active) {
|
| - Shadow* shadow = GetShadowForWindow(lost_active);
|
| - if (shadow && !ShouldUseSmallShadowForWindow(lost_active)) {
|
| - shadow->SetStyle(GetShadowStyleForWindowLosingActive(lost_active,
|
| - gained_active));
|
| - }
|
| - }
|
| -}
|
| -
|
| -bool ShadowController::Impl::ShouldShowShadowForWindow(
|
| - aura::Window* window) const {
|
| - const ShadowType type = GetShadowType(window);
|
| - switch (type) {
|
| - case SHADOW_TYPE_NONE:
|
| - return false;
|
| - case SHADOW_TYPE_RECTANGULAR:
|
| - return true;
|
| - default:
|
| - NOTREACHED() << "Unknown shadow type " << type;
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -Shadow* ShadowController::Impl::GetShadowForWindow(aura::Window* window) {
|
| - WindowShadowMap::const_iterator it = window_shadows_.find(window);
|
| - return it != window_shadows_.end() ? it->second.get() : NULL;
|
| -}
|
| -
|
| -void ShadowController::Impl::HandlePossibleShadowVisibilityChange(
|
| - aura::Window* window) {
|
| - const bool should_show = ShouldShowShadowForWindow(window);
|
| - Shadow* shadow = GetShadowForWindow(window);
|
| - if (shadow)
|
| - shadow->layer()->SetVisible(should_show);
|
| - else if (should_show && !shadow)
|
| - CreateShadowForWindow(window);
|
| -}
|
| -
|
| -void ShadowController::Impl::CreateShadowForWindow(aura::Window* window) {
|
| - linked_ptr<Shadow> shadow(new Shadow());
|
| - window_shadows_.insert(make_pair(window, shadow));
|
| -
|
| - shadow->Init(ShouldUseSmallShadowForWindow(window) ?
|
| - Shadow::STYLE_SMALL : Shadow::STYLE_ACTIVE);
|
| - shadow->SetContentBounds(gfx::Rect(window->bounds().size()));
|
| - shadow->layer()->SetVisible(ShouldShowShadowForWindow(window));
|
| - window->layer()->Add(shadow->layer());
|
| -}
|
| -
|
| -ShadowController::Impl::Impl()
|
| - : observer_manager_(this) {
|
| - aura::Env::GetInstance()->AddObserver(this);
|
| -}
|
| -
|
| -ShadowController::Impl::~Impl() {
|
| - DCHECK_EQ(instance_, this);
|
| - aura::Env::GetInstance()->RemoveObserver(this);
|
| - instance_ = NULL;
|
| -}
|
| -
|
| -// ShadowController ------------------------------------------------------------
|
| -
|
| -ShadowController::ShadowController(
|
| - aura::client::ActivationClient* activation_client)
|
| - : activation_client_(activation_client),
|
| - impl_(Impl::GetInstance()) {
|
| - // Watch for window activation changes.
|
| - activation_client_->AddObserver(this);
|
| -}
|
| -
|
| -ShadowController::~ShadowController() {
|
| - activation_client_->RemoveObserver(this);
|
| -}
|
| -
|
| -void ShadowController::OnWindowActivated(aura::Window* gained_active,
|
| - aura::Window* lost_active) {
|
| - impl_->OnWindowActivated(gained_active, lost_active);
|
| -}
|
| -
|
| -// ShadowController::TestApi ---------------------------------------------------
|
| -
|
| -Shadow* ShadowController::TestApi::GetShadowForWindow(aura::Window* window) {
|
| - return controller_->impl_->GetShadowForWindow(window);
|
| -}
|
| -
|
| -} // namespace corewm
|
| -} // namespace views
|
|
|