| Index: athena/screen/modal_window_controller.cc
|
| diff --git a/athena/screen/modal_window_controller.cc b/athena/screen/modal_window_controller.cc
|
| deleted file mode 100644
|
| index 61d0b4258944a1bb61394e08433b08c91c44da5a..0000000000000000000000000000000000000000
|
| --- a/athena/screen/modal_window_controller.cc
|
| +++ /dev/null
|
| @@ -1,146 +0,0 @@
|
| -// Copyright 2014 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 "athena/screen/modal_window_controller.h"
|
| -
|
| -#include "athena/screen/public/screen_manager.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_property.h"
|
| -#include "ui/compositor/layer.h"
|
| -#include "ui/compositor/layer_animation_observer.h"
|
| -#include "ui/compositor/scoped_layer_animation_settings.h"
|
| -#include "ui/wm/core/window_animations.h"
|
| -
|
| -namespace athena {
|
| -namespace {
|
| -
|
| -DEFINE_OWNED_WINDOW_PROPERTY_KEY(ModalWindowController,
|
| - kModalWindowControllerKey,
|
| - NULL);
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -ModalWindowController* ModalWindowController::Get(aura::Window* container) {
|
| - ModalWindowController* controller =
|
| - container->GetProperty(kModalWindowControllerKey);
|
| - CHECK(controller);
|
| - return controller;
|
| -}
|
| -
|
| -ModalWindowController::ModalWindowController(int priority)
|
| - : modal_container_(new aura::Window(NULL)),
|
| - dimmer_window_(new aura::Window(NULL)),
|
| - dimmed_(false) {
|
| - ScreenManager::ContainerParams params("ModalContainer", priority);
|
| - params.can_activate_children = true;
|
| - params.block_events = true;
|
| - modal_container_ = ScreenManager::Get()->CreateContainer(params);
|
| - modal_container_->SetProperty(kModalWindowControllerKey, this);
|
| -
|
| - dimmer_window_->SetType(ui::wm::WINDOW_TYPE_NORMAL);
|
| - dimmer_window_->Init(aura::WINDOW_LAYER_SOLID_COLOR);
|
| - dimmer_window_->layer()->SetColor(SK_ColorBLACK);
|
| - dimmer_window_->layer()->SetOpacity(0.0f);
|
| - dimmer_window_->Show();
|
| -
|
| - modal_container_->AddChild(dimmer_window_);
|
| - modal_container_->AddObserver(this);
|
| -
|
| - UpdateDimmerWindowBounds();
|
| -}
|
| -
|
| -ModalWindowController::~ModalWindowController() {
|
| - if (modal_container_)
|
| - modal_container_->RemoveObserver(this);
|
| -}
|
| -
|
| -void ModalWindowController::OnWindowAdded(aura::Window* child) {
|
| - DCHECK_NE(child, dimmer_window_);
|
| - if (IsChildWindow(child)) {
|
| - child->AddObserver(this);
|
| - UpdateDimming(NULL);
|
| - }
|
| -}
|
| -
|
| -void ModalWindowController::OnWindowVisibilityChanged(aura::Window* window,
|
| - bool visible) {
|
| - if (IsChildWindow(window))
|
| - UpdateDimming(NULL);
|
| -}
|
| -
|
| -void ModalWindowController::OnWindowBoundsChanged(aura::Window* window,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds) {
|
| - if (window == modal_container_)
|
| - UpdateDimmerWindowBounds();
|
| -}
|
| -
|
| -void ModalWindowController::OnWindowDestroyed(aura::Window* window) {
|
| - UpdateDimming(window);
|
| -}
|
| -
|
| -bool ModalWindowController::IsChildWindow(aura::Window* child) const {
|
| - return child->parent() == modal_container_ && child != dimmer_window_;
|
| -}
|
| -
|
| -void ModalWindowController::UpdateDimmerWindowBounds() {
|
| - gfx::Rect bounds(modal_container_->bounds().size());
|
| - dimmer_window_->SetBounds(bounds);
|
| -}
|
| -
|
| -void ModalWindowController::UpdateDimming(aura::Window* ignore) {
|
| - if (!modal_container_ || !dimmer_window_)
|
| - return;
|
| - bool should_delete = true;
|
| - for (aura::Window* window : modal_container_->children()) {
|
| - if (window == dimmer_window_ || window == ignore)
|
| - continue;
|
| - should_delete = false;
|
| - if (window->TargetVisibility()) {
|
| - SetDimmed(true);
|
| - return;
|
| - }
|
| - }
|
| - SetDimmed(false);
|
| -
|
| - if (should_delete) {
|
| - // Remove the container from root so that the container becomes
|
| - // invisible, but don't delete it until next event execution
|
| - // because the call stack may still have and use the pointer.
|
| - modal_container_->RemoveObserver(this);
|
| - modal_container_->parent()->RemoveChild(modal_container_);
|
| - base::MessageLoopForUI::current()->DeleteSoon(FROM_HERE, modal_container_);
|
| - modal_container_ = NULL;
|
| - dimmer_window_ = NULL;
|
| - }
|
| -}
|
| -
|
| -void ModalWindowController::SetDimmed(bool dimmed) {
|
| - const float kDimmedOpacity = 0.4f;
|
| -
|
| - if (!dimmer_window_ || dimmed_ == dimmed)
|
| - return;
|
| - dimmed_ = dimmed;
|
| -
|
| - const int kDimmAnimationDurationMs = 500;
|
| - if (dimmed) {
|
| - ui::ScopedLayerAnimationSettings settings(
|
| - dimmer_window_->layer()->GetAnimator());
|
| - settings.SetTransitionDuration(
|
| - base::TimeDelta::FromMilliseconds(kDimmAnimationDurationMs));
|
| - dimmer_window_->layer()->SetOpacity(kDimmedOpacity);
|
| - } else {
|
| - // ScopedHidingAnimationSettings will detach the animating and
|
| - // recreate layers for the container so that animation can continue
|
| - // even if the container is removed immediately.
|
| - wm::ScopedHidingAnimationSettings settings(modal_container_);
|
| - settings.layer_animation_settings()->SetTransitionDuration(
|
| - base::TimeDelta::FromMilliseconds(kDimmAnimationDurationMs));
|
| - modal_container_->layer()->SetOpacity(0.0f);
|
| - }
|
| -}
|
| -
|
| -} // namespace athena
|
|
|