Index: ash/wm/overview/scoped_window_copy.cc |
diff --git a/ash/wm/overview/scoped_window_copy.cc b/ash/wm/overview/scoped_window_copy.cc |
deleted file mode 100644 |
index 40f156bd5f7481327048cd8e0ef6166d00005573..0000000000000000000000000000000000000000 |
--- a/ash/wm/overview/scoped_window_copy.cc |
+++ /dev/null |
@@ -1,175 +0,0 @@ |
-// Copyright 2013 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/overview/scoped_window_copy.h" |
- |
-#include "ash/screen_util.h" |
-#include "ash/shell.h" |
-#include "ui/aura/client/aura_constants.h" |
-#include "ui/aura/client/screen_position_client.h" |
-#include "ui/aura/window.h" |
-#include "ui/aura/window_event_dispatcher.h" |
-#include "ui/compositor/layer_animation_observer.h" |
-#include "ui/compositor/layer_tree_owner.h" |
-#include "ui/gfx/display.h" |
-#include "ui/views/widget/widget.h" |
-#include "ui/wm/core/shadow_types.h" |
-#include "ui/wm/core/window_util.h" |
- |
-namespace ash { |
- |
-namespace { |
- |
-// Creates a copy of |window| with |recreated_layer| in the |target_root|. |
-views::Widget* CreateCopyOfWindow(aura::Window* target_root, |
- aura::Window* src_window, |
- ui::Layer* recreated_layer) { |
- // Save and remove the transform from the layer to later reapply to both the |
- // source and newly created copy window. |
- gfx::Transform transform = recreated_layer->transform(); |
- recreated_layer->SetTransform(gfx::Transform()); |
- |
- src_window->SetTransform(transform); |
- views::Widget* widget = new views::Widget; |
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); |
- params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
- params.parent = src_window->parent(); |
- params.keep_on_top = true; |
- widget->set_focus_on_creation(false); |
- widget->Init(params); |
- widget->SetVisibilityChangedAnimationsEnabled(false); |
- std::string name = src_window->name() + " (Copy)"; |
- widget->GetNativeWindow()->SetName(name); |
- ::wm::SetShadowType(widget->GetNativeWindow(), |
- ::wm::SHADOW_TYPE_RECTANGULAR); |
- |
- // Set the bounds in the target root window. |
- gfx::Display target_display = |
- Shell::GetScreen()->GetDisplayNearestWindow(target_root); |
- aura::client::ScreenPositionClient* screen_position_client = |
- aura::client::GetScreenPositionClient(src_window->GetRootWindow()); |
- if (screen_position_client && target_display.is_valid()) { |
- screen_position_client->SetBounds(widget->GetNativeWindow(), |
- src_window->GetBoundsInScreen(), target_display); |
- } else { |
- widget->SetBounds(src_window->GetBoundsInScreen()); |
- } |
- widget->StackAbove(src_window); |
- |
- // Move the |recreated_layer| to the newly created window. |
- recreated_layer->set_delegate(src_window->layer()->delegate()); |
- gfx::Rect layer_bounds = recreated_layer->bounds(); |
- layer_bounds.set_origin(gfx::Point(0, 0)); |
- recreated_layer->SetBounds(layer_bounds); |
- recreated_layer->SetVisible(false); |
- recreated_layer->parent()->Remove(recreated_layer); |
- |
- aura::Window* window = widget->GetNativeWindow(); |
- recreated_layer->SetVisible(true); |
- window->layer()->Add(recreated_layer); |
- window->layer()->StackAtTop(recreated_layer); |
- window->layer()->SetOpacity(1); |
- window->SetTransform(transform); |
- window->Show(); |
- return widget; |
-} |
- |
-} // namespace |
- |
-// An observer which closes the widget and deletes the layer after an |
-// animation finishes. |
-class CleanupWidgetAfterAnimationObserver : public ui::LayerAnimationObserver { |
- public: |
- CleanupWidgetAfterAnimationObserver( |
- views::Widget* widget, |
- scoped_ptr<ui::LayerTreeOwner> layer_owner); |
- |
- // Takes ownership of the widget. At this point the class will delete itself |
- // and clean up the layer when there are no pending animations. |
- void TakeOwnershipOfWidget(); |
- |
- // ui::LayerAnimationObserver: |
- void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override; |
- void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override; |
- void OnLayerAnimationScheduled(ui::LayerAnimationSequence* sequence) override; |
- |
- private: |
- ~CleanupWidgetAfterAnimationObserver() override; |
- |
- // If the necessary conditions have been satisfied to destruct this |
- // class, deletes itself and cleans up the widget and layer. |
- void MaybeDestruct(); |
- |
- views::Widget* widget_; |
- scoped_ptr<ui::LayerTreeOwner> layer_owner_; |
- bool owns_widget_; |
- int pending_animations_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CleanupWidgetAfterAnimationObserver); |
-}; |
- |
-CleanupWidgetAfterAnimationObserver::CleanupWidgetAfterAnimationObserver( |
- views::Widget* widget, |
- scoped_ptr<ui::LayerTreeOwner> layer_owner) |
- : widget_(widget), |
- layer_owner_(layer_owner.Pass()), |
- owns_widget_(false), |
- pending_animations_(0) { |
- widget_->GetNativeWindow()->layer()->GetAnimator()->AddObserver(this); |
-} |
- |
-void CleanupWidgetAfterAnimationObserver::TakeOwnershipOfWidget() { |
- owns_widget_ = true; |
- MaybeDestruct(); |
-} |
- |
-void CleanupWidgetAfterAnimationObserver::OnLayerAnimationEnded( |
- ui::LayerAnimationSequence* sequence) { |
- pending_animations_--; |
- MaybeDestruct(); |
-} |
- |
-void CleanupWidgetAfterAnimationObserver::OnLayerAnimationAborted( |
- ui::LayerAnimationSequence* sequence) { |
- pending_animations_--; |
- MaybeDestruct(); |
-} |
- |
-void CleanupWidgetAfterAnimationObserver::OnLayerAnimationScheduled( |
- ui::LayerAnimationSequence* sequence) { |
- pending_animations_++; |
-} |
- |
-CleanupWidgetAfterAnimationObserver::~CleanupWidgetAfterAnimationObserver() { |
- widget_->GetNativeWindow()->layer()->GetAnimator()->RemoveObserver(this); |
- widget_->Close(); |
- widget_ = NULL; |
-} |
- |
-void CleanupWidgetAfterAnimationObserver::MaybeDestruct() { |
- if (pending_animations_ || !owns_widget_) |
- return; |
- delete this; |
-} |
- |
-ScopedWindowCopy::ScopedWindowCopy(aura::Window* target_root, |
- aura::Window* src_window) { |
- scoped_ptr<ui::LayerTreeOwner> layer_owner = |
- ::wm::RecreateLayers(src_window); |
- widget_ = CreateCopyOfWindow(target_root, src_window, layer_owner->root()); |
- cleanup_observer_ = |
- new CleanupWidgetAfterAnimationObserver(widget_, layer_owner.Pass()); |
-} |
- |
-ScopedWindowCopy::~ScopedWindowCopy() { |
- // The cleanup observer will delete itself and the window when any pending |
- // animations have completed. |
- cleanup_observer_->TakeOwnershipOfWidget(); |
-} |
- |
-aura::Window* ScopedWindowCopy::GetWindow() { |
- return widget_->GetNativeWindow(); |
-} |
- |
-} // namespace ash |