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

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

Issue 2239233002: [ash-md] Fades overview header in and out (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [ash-md] Fades overview header in and out (rebase) Created 4 years, 3 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 2c1b83e03db1ceca913f50dbcaf4c28b796baa39..1d107611086f361907c477014c777b58b6aa96e5 100644
--- a/ash/common/wm/overview/scoped_transform_overview_window.cc
+++ b/ash/common/wm/overview/scoped_transform_overview_window.cc
@@ -271,7 +271,8 @@ void ScopedTransformOverviewWindow::RestoreWindow() {
BeginScopedAnimation(OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW,
&animation_settings_list);
SetTransform(window()->GetRootWindow(), original_transform_,
- false /* use_mask */, false /* use_shape */, 0);
+ false /* use_mask */);
+ set_overview_transform(original_transform_);
std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings =
CreateScopedOverviewAnimationSettings(
@@ -296,19 +297,8 @@ void ScopedTransformOverviewWindow::RestoreWindow() {
window_->GetWindowState()->set_ignored_by_shelf(ignored_by_shelf_);
SetOpacity(original_opacity_);
- 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);
- }
+ if (ash::MaterialDesignController::IsOverviewMaterial())
+ ShowHeaderAndResetShape();
bruthig 2016/09/02 16:00:12 AFAICT it is not guaranteed that HideHeaderAndSetS
varkha 2016/09/08 00:09:50 Done. Added a comment in the header since I think
}
void ScopedTransformOverviewWindow::BeginScopedAnimation(
@@ -345,6 +335,9 @@ gfx::Rect ScopedTransformOverviewWindow::GetTargetBoundsInScreen() const {
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;
@@ -377,6 +370,19 @@ gfx::Rect ScopedTransformOverviewWindow::GetTransformedBounds(
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 static_cast<SkColor>(
+ window_->GetIntProperty(WmWindowProperty::TOP_VIEW_COLOR));
+}
+
int ScopedTransformOverviewWindow::GetTopInset() const {
for (auto* window : GetTransientTreeIterator(window_)) {
// If there are regular windows in the transient ancestor tree, all those
@@ -466,9 +472,7 @@ gfx::Transform ScopedTransformOverviewWindow::GetTransformForRect(
void ScopedTransformOverviewWindow::SetTransform(
WmWindow* root_window,
const gfx::Transform& transform,
- bool use_mask,
- bool use_shape,
- float radius) {
+ bool use_mask) {
DCHECK(overview_started_);
if (ash::MaterialDesignController::IsOverviewMaterial() &&
@@ -484,26 +488,6 @@ void ScopedTransformOverviewWindow::SetTransform(
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);
- }
}
gfx::Point target_origin(GetTargetBoundsInScreen().origin());
@@ -526,6 +510,45 @@ void ScopedTransformOverviewWindow::SetOpacity(float opacity) {
}
}
+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);
+ 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);
+ }
+}
+
+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()) {

Powered by Google App Engine
This is Rietveld 408576698