Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1605)

Unified Diff: ash/wm/overview/scoped_window_copy.cc

Issue 844763006: Change overview mode to so that docked panel windows are not grouped together. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed stale pointer in ScopedTransformOverviewWindow. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/wm/overview/scoped_window_copy.h ('k') | ash/wm/overview/transparent_activate_window_button.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ash/wm/overview/scoped_window_copy.h ('k') | ash/wm/overview/transparent_activate_window_button.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698