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

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

Issue 2129213003: [ash-md] Hides frame headers in overview mode not using a mask (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [ash-md] Hides frame headers in overview mode not using a mask (using SetAlphaShape) Created 4 years, 5 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 ca1974343fc8cc04797ae5dae6cc593286b98d7c..59299b0f1a941fcb5288f15ed89375c974a8fe8d 100644
--- a/ash/common/wm/overview/scoped_transform_overview_window.cc
+++ b/ash/common/wm/overview/scoped_transform_overview_window.cc
@@ -180,7 +180,7 @@ TransientDescendantIteratorRange GetTransientTreeIterator(WmWindow* window) {
class ScopedTransformOverviewWindow::OverviewContentMask
: public ui::LayerDelegate {
public:
- OverviewContentMask(int inset, int radius);
+ OverviewContentMask(float radius);
tdanderson 2016/07/09 21:23:21 Make this constructor explicit
varkha 2016/07/09 22:00:17 Done.
~OverviewContentMask() override;
ui::Layer* layer() { return &layer_; }
@@ -193,16 +193,14 @@ class ScopedTransformOverviewWindow::OverviewContentMask
private:
ui::Layer layer_;
- int inset_;
- int radius_;
+ float radius_;
DISALLOW_COPY_AND_ASSIGN(OverviewContentMask);
};
ScopedTransformOverviewWindow::OverviewContentMask::OverviewContentMask(
- int inset,
- int radius)
- : layer_(ui::LAYER_TEXTURED), inset_(inset), radius_(radius) {
+ float radius)
+ : layer_(ui::LAYER_TEXTURED), radius_(radius) {
layer_.set_delegate(this);
}
@@ -214,7 +212,6 @@ void ScopedTransformOverviewWindow::OverviewContentMask::OnPaintLayer(
const ui::PaintContext& context) {
ui::PaintRecorder recorder(context, layer()->size());
gfx::Rect bounds(layer()->bounds().size());
- bounds.Inset(0, inset_, 0, 0);
// Tile a window into an area, rounding the bottom corners.
const SkRect rect = gfx::RectToSkRect(bounds);
@@ -250,6 +247,7 @@ base::Closure ScopedTransformOverviewWindow::OverviewContentMask::
ScopedTransformOverviewWindow::ScopedTransformOverviewWindow(WmWindow* window)
: window_(window),
+ alpha_shape_set_(false),
minimized_(window->GetShowState() == ui::SHOW_STATE_MINIMIZED),
ignored_by_shelf_(window->GetWindowState()->ignored_by_shelf()),
overview_started_(false),
@@ -260,11 +258,6 @@ ScopedTransformOverviewWindow::ScopedTransformOverviewWindow(WmWindow* window)
ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {}
void ScopedTransformOverviewWindow::RestoreWindow() {
- if (ash::MaterialDesignController::IsOverviewMaterial()) {
- window()->GetLayer()->SetMaskLayer(nullptr);
- mask_.reset();
- }
-
ScopedAnimationSettings animation_settings_list;
BeginScopedAnimation(OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW,
&animation_settings_list);
@@ -288,6 +281,21 @@ 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_alpha_shape_) {
+ layer->SetAlphaShape(
+ base::WrapUnique(new SkRegion(*original_alpha_shape_.get())));
+ } else {
+ layer->SetAlphaShape(nullptr);
+ }
+ window()->SetMasksToBounds(false);
+ alpha_shape_set_ = false;
+ }
}
void ScopedTransformOverviewWindow::BeginScopedAnimation(
@@ -394,14 +402,30 @@ gfx::Transform ScopedTransformOverviewWindow::GetTransformForRect(
void ScopedTransformOverviewWindow::SetTransform(
WmWindow* root_window,
const gfx::Transform& transform,
- int radius) {
+ float radius) {
DCHECK(overview_started_);
- if (ash::MaterialDesignController::IsOverviewMaterial() && !mask_) {
- mask_.reset(new OverviewContentMask(
- window()->GetIntProperty(WmWindowProperty::TOP_VIEW_INSET), radius));
- mask_->layer()->SetBounds(GetTargetBoundsInScreen());
+ if (ash::MaterialDesignController::IsOverviewMaterial() &&
+ &transform != &original_transform_) {
tdanderson 2016/07/09 21:23:21 Hmm, shouldn't all of SetTransform() be a no-op i
varkha 2016/07/09 22:00:17 No. This method is used to both set the transform
+ gfx::Rect bounds(GetTargetBoundsInScreen().size());
+ mask_.reset(new OverviewContentMask(radius));
+ mask_->layer()->SetBounds(bounds);
tdanderson 2016/07/09 21:23:21 I don't understand why you're setting bounds with
varkha 2016/07/09 22:00:17 This is for a mask layer - my understanding is tha
window()->GetLayer()->SetMaskLayer(mask_->layer());
+
+ if (!alpha_shape_set_) {
tdanderson 2016/07/09 21:23:21 I don't think you need |alpha_shape_set_| at all.
varkha 2016/07/09 22:00:17 Done.
+ if (window()->GetLayer()->alpha_shape())
tdanderson 2016/07/09 21:23:21 {} since call to reset() spans two lines
varkha 2016/07/09 22:00:17 Done.
+ original_alpha_shape_.reset(
+ new SkRegion(*window()->GetLayer()->alpha_shape()));
+ window()->SetMasksToBounds(true);
+ alpha_shape_set_ = true;
+ }
+ bounds.Inset(0, window()->GetIntProperty(WmWindowProperty::TOP_VIEW_INSET),
+ 0, 0);
+ SkRegion* region = new SkRegion;
+ region->setRect(RectToSkIRect(bounds));
+ if (original_alpha_shape_)
+ region->op(*original_alpha_shape_, SkRegion::kIntersect_Op);
+ window()->GetLayer()->SetAlphaShape(base::WrapUnique(region));
varkha 2016/07/09 21:07:32 Self review: this could be done only for windows t
varkha 2016/07/09 22:00:17 Done.
}
gfx::Point target_origin(GetTargetBoundsInScreen().origin());

Powered by Google App Engine
This is Rietveld 408576698