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 50a980ce4021bf7c8190ef4865db2f8eac90ed62..2c1b83e03db1ceca913f50dbcaf4c28b796baa39 100644 |
--- a/ash/common/wm/overview/scoped_transform_overview_window.cc |
+++ b/ash/common/wm/overview/scoped_transform_overview_window.cc |
@@ -271,8 +271,7 @@ |
BeginScopedAnimation(OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW, |
&animation_settings_list); |
SetTransform(window()->GetRootWindow(), original_transform_, |
- false /* use_mask */); |
- set_overview_transform(original_transform_); |
+ false /* use_mask */, false /* use_shape */, 0); |
std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings = |
CreateScopedOverviewAnimationSettings( |
@@ -297,8 +296,19 @@ |
window_->GetWindowState()->set_ignored_by_shelf(ignored_by_shelf_); |
SetOpacity(original_opacity_); |
- if (ash::MaterialDesignController::IsOverviewMaterial()) |
- ShowHeaderAndResetShape(); |
+ if (ash::MaterialDesignController::IsOverviewMaterial()) { |
+ ui::Layer* layer = window()->GetLayer(); |
+ layer->SetMaskLayer(nullptr); |
+ mask_.reset(); |
+ |
+ if (original_window_shape_) { |
+ layer->SetAlphaShape( |
+ base::MakeUnique<SkRegion>(*original_window_shape_.get())); |
+ } else { |
+ layer->SetAlphaShape(nullptr); |
+ } |
+ window()->SetMasksToBounds(false); |
+ } |
} |
void ScopedTransformOverviewWindow::BeginScopedAnimation( |
@@ -335,9 +345,6 @@ |
gfx::Rect ScopedTransformOverviewWindow::GetTransformedBounds( |
bool hide_header) const { |
- if (window_->GetWindowState()->IsMinimized()) |
- return window_->GetMinimizeAnimationTargetBoundsInScreen(); |
- |
const bool material = ash::MaterialDesignController::IsOverviewMaterial(); |
const int top_inset = hide_header ? GetTopInset() : 0; |
gfx::Rect bounds; |
@@ -368,18 +375,6 @@ |
ToEnclosingRect(window_bounds))); |
} |
return bounds; |
-} |
- |
-SkColor ScopedTransformOverviewWindow::GetTopColor() const { |
- for (auto* window : GetTransientTreeIterator(window_)) { |
- // If there are regular windows in the transient ancestor tree, all those |
- // windows are shown in the same overview item and the header is not masked. |
- if (window != window_ && (window->GetType() == ui::wm::WINDOW_TYPE_NORMAL || |
- window->GetType() == ui::wm::WINDOW_TYPE_PANEL)) { |
- return SK_ColorTRANSPARENT; |
- } |
- } |
- return window_->GetColorProperty(WmWindowProperty::TOP_VIEW_COLOR); |
} |
int ScopedTransformOverviewWindow::GetTopInset() const { |
@@ -471,7 +466,9 @@ |
void ScopedTransformOverviewWindow::SetTransform( |
WmWindow* root_window, |
const gfx::Transform& transform, |
- bool use_mask) { |
+ bool use_mask, |
+ bool use_shape, |
+ float radius) { |
DCHECK(overview_started_); |
if (ash::MaterialDesignController::IsOverviewMaterial() && |
@@ -486,6 +483,26 @@ |
SkRegion* window_shape = window()->GetLayer()->alpha_shape(); |
if (!original_window_shape_ && window_shape) |
original_window_shape_.reset(new SkRegion(*window_shape)); |
+ } |
+ gfx::Rect bounds(GetTargetBoundsInScreen().size()); |
+ const int inset = (use_mask || use_shape) ? GetTopInset() : 0; |
+ if (mask_) { |
+ // Mask layer is used both to hide the window header and to use rounded |
+ // corners. Its layout needs to be update when setting a transform. |
+ mask_->layer()->SetBounds(bounds); |
+ mask_->set_inset(inset); |
+ mask_->set_radius(radius); |
+ window()->GetLayer()->SchedulePaint(bounds); |
+ } else if (inset > 0) { |
+ // Alpha shape is only used to to hide the window header and only when |
+ // not using a mask layer. |
+ bounds.Inset(0, inset, 0, 0); |
+ SkRegion* region = new SkRegion; |
+ region->setRect(RectToSkIRect(bounds)); |
+ if (original_window_shape_) |
+ region->op(*original_window_shape_, SkRegion::kIntersect_Op); |
+ window()->GetLayer()->SetAlphaShape(base::WrapUnique(region)); |
+ window()->SetMasksToBounds(true); |
} |
} |
@@ -509,45 +526,6 @@ |
} |
} |
-void ScopedTransformOverviewWindow::HideHeaderAndSetShape(bool use_mask, |
- bool use_shape, |
- int radius) { |
- gfx::Rect bounds(GetTargetBoundsInScreen().size()); |
- const int inset = (use_mask || use_shape) ? GetTopInset() : 0; |
- if (mask_) { |
- // Mask layer is used both to hide the window header and to use rounded |
- // corners. Its layout needs to be updated when setting a transform. |
- mask_->layer()->SetBounds(bounds); |
- mask_->set_inset(inset); |
- mask_->set_radius(radius); |
- window()->GetLayer()->SchedulePaint(bounds); |
- } else if (inset > 0) { |
- // Alpha shape is only used to hide the window header and only when not |
- // using a mask layer. |
- bounds.Inset(0, inset, 0, 0); |
- std::unique_ptr<SkRegion> region(new SkRegion); |
- region->setRect(RectToSkIRect(bounds)); |
- if (original_window_shape_) |
- region->op(*original_window_shape_, SkRegion::kIntersect_Op); |
- window()->GetLayer()->SetAlphaShape(std::move(region)); |
- window()->SetMasksToBounds(true); |
- } |
-} |
- |
-void ScopedTransformOverviewWindow::ShowHeaderAndResetShape() { |
- ui::Layer* layer = window()->GetLayer(); |
- layer->SetMaskLayer(nullptr); |
- mask_.reset(); |
- |
- if (original_window_shape_) { |
- layer->SetAlphaShape( |
- base::MakeUnique<SkRegion>(*original_window_shape_.get())); |
- } else { |
- layer->SetAlphaShape(nullptr); |
- } |
- window()->SetMasksToBounds(false); |
-} |
- |
void ScopedTransformOverviewWindow::Close() { |
if (immediate_close_for_tests || |
!ash::MaterialDesignController::IsOverviewMaterial()) { |