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

Unified Diff: ash/common/wm/overview/scoped_transform_overview_window.cc

Issue 2101843003: [ash-md] Animates a window closed while in overview mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [ash-md] Animates a window closed while in overview mode (comments) Created 4 years, 6 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
Index: ash/common/wm/overview/scoped_transform_overview_window.cc
diff --git a/ash/common/wm/overview/scoped_transform_overview_window.cc b/ash/common/wm/overview/scoped_transform_overview_window.cc
index 40864a12d8ec77e41c4d4543dd6b1478024ff042..3ae4de1876d3e146e67cfb7bc6940475fb6350e3 100644
--- a/ash/common/wm/overview/scoped_transform_overview_window.cc
+++ b/ash/common/wm/overview/scoped_transform_overview_window.cc
@@ -15,6 +15,8 @@
#include "ash/common/wm_window.h"
#include "ash/common/wm_window_property.h"
#include "base/macros.h"
+#include "base/single_thread_task_runner.h"
+#include "base/threading/thread_task_runner_handle.h"
#include "third_party/skia/include/core/SkPaint.h"
#include "third_party/skia/include/core/SkPath.h"
#include "third_party/skia/include/core/SkRect.h"
@@ -31,14 +33,20 @@ namespace ash {
namespace {
+// When set to true by tests makes closing the widget synchronous.
+bool immediate_close_for_tests = false;
+
// The opacity level that windows will be set to when they are restored.
const float kRestoreWindowOpacity = 1.0f;
// Alpha value used to paint mask layer that masks the original window header.
const int kOverviewContentMaskAlpha = 255;
+// Delay closing window with Material Design to allow it to shrink and fade out.
+const int kCloseWindowDelayInMilliseconds = 150;
+
WmWindow* GetTransientRoot(WmWindow* window) {
- while (window->GetTransientParent())
+ while (window && window->GetTransientParent())
window = window->GetTransientParent();
return window;
}
@@ -246,7 +254,8 @@ ScopedTransformOverviewWindow::ScopedTransformOverviewWindow(WmWindow* window)
ignored_by_shelf_(window->GetWindowState()->ignored_by_shelf()),
overview_started_(false),
original_transform_(window->GetTargetTransform()),
- original_opacity_(window->GetTargetOpacity()) {}
+ original_opacity_(window->GetTargetOpacity()),
+ weak_ptr_factory_(this) {}
ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {}
@@ -388,7 +397,7 @@ void ScopedTransformOverviewWindow::SetTransform(
int radius) {
DCHECK(overview_started_);
- if (ash::MaterialDesignController::IsOverviewMaterial()) {
+ if (ash::MaterialDesignController::IsOverviewMaterial() && !mask_) {
mask_.reset(new OverviewContentMask(
window()->GetIntProperty(WmWindowProperty::TOP_VIEW_INSET), radius));
mask_->layer()->SetBounds(GetTargetBoundsInScreen());
@@ -416,7 +425,15 @@ void ScopedTransformOverviewWindow::SetOpacity(float opacity) {
}
void ScopedTransformOverviewWindow::Close() {
- GetTransientRoot(window_)->CloseWidget();
+ if (immediate_close_for_tests ||
+ !ash::MaterialDesignController::IsOverviewMaterial()) {
+ CloseWidget();
+ return;
+ }
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE, base::Bind(&ScopedTransformOverviewWindow::CloseWidget,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kCloseWindowDelayInMilliseconds));
}
void ScopedTransformOverviewWindow::PrepareForOverview() {
@@ -426,4 +443,15 @@ void ScopedTransformOverviewWindow::PrepareForOverview() {
ShowWindowIfMinimized();
}
+void ScopedTransformOverviewWindow::CloseWidget() {
+ WmWindow* parent_window = GetTransientRoot(window_);
+ if (parent_window)
+ parent_window->CloseWidget();
+}
+
+// static
+void ScopedTransformOverviewWindow::SetImmediateCloseForTests() {
+ immediate_close_for_tests = true;
+}
+
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698