Index: ui/aura_shell/modal_container_layout_manager.cc |
=================================================================== |
--- ui/aura_shell/modal_container_layout_manager.cc (revision 115643) |
+++ ui/aura_shell/modal_container_layout_manager.cc (working copy) |
@@ -1,190 +0,0 @@ |
-// Copyright (c) 2011 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/aura_shell/modal_container_layout_manager.h" |
- |
-#include "base/bind.h" |
-#include "ui/aura/client/aura_constants.h" |
-#include "ui/aura/event.h" |
-#include "ui/aura/root_window.h" |
-#include "ui/aura/window.h" |
-#include "ui/aura_shell/modality_event_filter.h" |
-#include "ui/aura_shell/shell.h" |
-#include "ui/aura_shell/window_util.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/compositor/layer.h" |
-#include "ui/gfx/compositor/layer_animator.h" |
-#include "ui/views/view.h" |
-#include "ui/views/widget/widget.h" |
- |
-namespace aura_shell { |
-namespace internal { |
- |
-namespace { |
- |
-class ScreenView : public views::View { |
- public: |
- ScreenView() {} |
- virtual ~ScreenView() {} |
- |
- // Overridden from views::View: |
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { |
- canvas->FillRect(SK_ColorBLACK, GetLocalBounds()); |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(ScreenView); |
-}; |
- |
-} // namespace |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ModalContainerLayoutManager, public: |
- |
-ModalContainerLayoutManager::ModalContainerLayoutManager( |
- aura::Window* container) |
- : container_(container), |
- modal_screen_(NULL), |
- ALLOW_THIS_IN_INITIALIZER_LIST( |
- modality_filter_(new ModalityEventFilter(container, this))) { |
-} |
- |
-ModalContainerLayoutManager::~ModalContainerLayoutManager() { |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ModalContainerLayoutManager, aura::LayoutManager implementation: |
- |
-void ModalContainerLayoutManager::OnWindowResized() { |
- if (modal_screen_) { |
- modal_screen_->SetBounds(gfx::Rect(0, 0, container_->bounds().width(), |
- container_->bounds().height())); |
- } |
-} |
- |
-void ModalContainerLayoutManager::OnWindowAddedToLayout( |
- aura::Window* child) { |
- child->AddObserver(this); |
- if (child->GetIntProperty(aura::client::kModalKey)) |
- AddModalWindow(child); |
-} |
- |
-void ModalContainerLayoutManager::OnWillRemoveWindowFromLayout( |
- aura::Window* child) { |
- child->RemoveObserver(this); |
- if (child->GetIntProperty(aura::client::kModalKey)) |
- RemoveModalWindow(child); |
-} |
- |
-void ModalContainerLayoutManager::OnChildWindowVisibilityChanged( |
- aura::Window* child, |
- bool visible) { |
-} |
- |
-void ModalContainerLayoutManager::SetChildBounds( |
- aura::Window* child, |
- const gfx::Rect& requested_bounds) { |
- SetChildBoundsDirect(child, requested_bounds); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ModalContainerLayoutManager, aura::WindowObserver implementation: |
- |
-void ModalContainerLayoutManager::OnWindowPropertyChanged(aura::Window* window, |
- const char* key, |
- void* old) { |
- if (key != aura::client::kModalKey) |
- return; |
- |
- if (window->GetIntProperty(aura::client::kModalKey)) { |
- AddModalWindow(window); |
- } else if (static_cast<int>(reinterpret_cast<intptr_t>(old))) { |
- RemoveModalWindow(window); |
- } |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ModalContainerLayoutManager, ui::LayerAnimationObserver implementation: |
- |
-void ModalContainerLayoutManager::OnLayerAnimationEnded( |
- const ui::LayerAnimationSequence* sequence) { |
- if (modal_screen_ && !modal_screen_->GetNativeView()->layer()->ShouldDraw()) |
- DestroyModalScreen(); |
-} |
- |
-void ModalContainerLayoutManager::OnLayerAnimationAborted( |
- const ui::LayerAnimationSequence* sequence) { |
-} |
- |
-void ModalContainerLayoutManager::OnLayerAnimationScheduled( |
- const ui::LayerAnimationSequence* sequence) { |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ModalContainerLayoutManager, ModalityEventFilter::Delegate implementation: |
- |
-bool ModalContainerLayoutManager::CanWindowReceiveEvents( |
- aura::Window* window) { |
- return GetActivatableWindow(window) == modal_window(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// ModalContainerLayoutManager, private: |
- |
-void ModalContainerLayoutManager::AddModalWindow(aura::Window* window) { |
- modal_windows_.push_back(window); |
- CreateModalScreen(); |
-} |
- |
-void ModalContainerLayoutManager::RemoveModalWindow(aura::Window* window) { |
- aura::Window::Windows::iterator it = |
- std::find(modal_windows_.begin(), modal_windows_.end(), window); |
- if (it != modal_windows_.end()) |
- modal_windows_.erase(it); |
- |
- if (modal_windows_.empty()) |
- HideModalScreen(); |
- else |
- aura_shell::ActivateWindow(modal_window()); |
-} |
- |
-void ModalContainerLayoutManager::CreateModalScreen() { |
- if (modal_screen_) |
- return; |
- modal_screen_ = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); |
- params.parent = container_; |
- params.bounds = gfx::Rect(0, 0, container_->bounds().width(), |
- container_->bounds().height()); |
- modal_screen_->Init(params); |
- modal_screen_->GetNativeView()->SetName( |
- "ModalContainerLayoutManager.ModalScreen"); |
- modal_screen_->SetContentsView(new ScreenView); |
- modal_screen_->GetNativeView()->layer()->SetOpacity(0.0f); |
- modal_screen_->GetNativeView()->layer()->GetAnimator()->AddObserver(this); |
- |
- Shell::GetInstance()->AddRootWindowEventFilter(modality_filter_.get()); |
- |
- ui::LayerAnimator::ScopedSettings settings( |
- modal_screen_->GetNativeView()->layer()->GetAnimator()); |
- modal_screen_->Show(); |
- modal_screen_->GetNativeView()->layer()->SetOpacity(0.5f); |
- container_->StackChildAtTop(modal_screen_->GetNativeView()); |
-} |
- |
-void ModalContainerLayoutManager::DestroyModalScreen() { |
- modal_screen_->GetNativeView()->layer()->GetAnimator()->RemoveObserver(this); |
- modal_screen_->Close(); |
- modal_screen_ = NULL; |
-} |
- |
-void ModalContainerLayoutManager::HideModalScreen() { |
- Shell::GetInstance()->RemoveRootWindowEventFilter(modality_filter_.get()); |
- ui::LayerAnimator::ScopedSettings settings( |
- modal_screen_->GetNativeView()->layer()->GetAnimator()); |
- modal_screen_->GetNativeView()->layer()->SetOpacity(0.0f); |
-} |
- |
-} // namespace internal |
-} // namespace aura_shell |