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

Side by Side Diff: ash/common/wm/overview/scoped_transform_overview_window.cc

Issue 2146323004: [ash-md] Improves smoothness with many windows in overview (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [ash-md] Improves smoothness with many windows in overview (rebased) 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/common/wm/overview/scoped_transform_overview_window.h" 5 #include "ash/common/wm/overview/scoped_transform_overview_window.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/common/material_design/material_design_controller.h" 10 #include "ash/common/material_design/material_design_controller.h"
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 original_transform_(window->GetTargetTransform()), 261 original_transform_(window->GetTargetTransform()),
262 original_opacity_(window->GetTargetOpacity()), 262 original_opacity_(window->GetTargetOpacity()),
263 weak_ptr_factory_(this) {} 263 weak_ptr_factory_(this) {}
264 264
265 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {} 265 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {}
266 266
267 void ScopedTransformOverviewWindow::RestoreWindow() { 267 void ScopedTransformOverviewWindow::RestoreWindow() {
268 ScopedAnimationSettings animation_settings_list; 268 ScopedAnimationSettings animation_settings_list;
269 BeginScopedAnimation(OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW, 269 BeginScopedAnimation(OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW,
270 &animation_settings_list); 270 &animation_settings_list);
271 SetTransform(window()->GetRootWindow(), original_transform_, 0); 271 SetTransform(window()->GetRootWindow(), original_transform_, false, 0);
272 272
273 std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings = 273 std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings =
274 CreateScopedOverviewAnimationSettings( 274 CreateScopedOverviewAnimationSettings(
275 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS, 275 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS,
276 window_); 276 window_);
277 gfx::Transform transform; 277 gfx::Transform transform;
278 if ((original_visibility_ == ORIGINALLY_MINIMIZED && 278 if ((original_visibility_ == ORIGINALLY_MINIMIZED &&
279 window_->GetShowState() != ui::SHOW_STATE_MINIMIZED) || 279 window_->GetShowState() != ui::SHOW_STATE_MINIMIZED) ||
280 (original_visibility_ == ORIGINALLY_DOCKED_MINIMIZED && 280 (original_visibility_ == ORIGINALLY_DOCKED_MINIMIZED &&
281 window_->GetWindowState()->GetStateType() != 281 window_->GetWindowState()->GetStateType() !=
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 gfx::Transform transform; 410 gfx::Transform transform;
411 transform.Translate(dst_rect.x() - src_rect.x(), dst_rect.y() - src_rect.y()); 411 transform.Translate(dst_rect.x() - src_rect.x(), dst_rect.y() - src_rect.y());
412 transform.Scale(static_cast<float>(dst_rect.width()) / src_rect.width(), 412 transform.Scale(static_cast<float>(dst_rect.width()) / src_rect.width(),
413 static_cast<float>(dst_rect.height()) / src_rect.height()); 413 static_cast<float>(dst_rect.height()) / src_rect.height());
414 return transform; 414 return transform;
415 } 415 }
416 416
417 void ScopedTransformOverviewWindow::SetTransform( 417 void ScopedTransformOverviewWindow::SetTransform(
418 WmWindow* root_window, 418 WmWindow* root_window,
419 const gfx::Transform& transform, 419 const gfx::Transform& transform,
420 bool use_masks,
420 float radius) { 421 float radius) {
421 DCHECK(overview_started_); 422 DCHECK(overview_started_);
422 423
423 if (ash::MaterialDesignController::IsOverviewMaterial() && 424 if (ash::MaterialDesignController::IsOverviewMaterial() &&
424 &transform != &original_transform_) { 425 &transform != &original_transform_) {
425 if (!mask_) { 426 if (use_masks && !mask_) {
426 mask_.reset(new OverviewContentMask(radius)); 427 mask_.reset(new OverviewContentMask(radius));
427 mask_->layer()->SetFillsBoundsOpaquely(false); 428 mask_->layer()->SetFillsBoundsOpaquely(false);
428 window()->GetLayer()->SetMaskLayer(mask_->layer()); 429 window()->GetLayer()->SetMaskLayer(mask_->layer());
429 } 430 }
430 gfx::Rect bounds(GetTargetBoundsInScreen().size()); 431 gfx::Rect bounds(GetTargetBoundsInScreen().size());
431 mask_->layer()->SetBounds(bounds); 432 if (mask_) {
432 mask_->set_radius(radius); 433 mask_->layer()->SetBounds(bounds);
433 window()->GetLayer()->SchedulePaint(bounds); 434 mask_->set_radius(radius);
434 435 window()->GetLayer()->SchedulePaint(bounds);
436 }
435 if (!determined_original_window_shape_) { 437 if (!determined_original_window_shape_) {
436 determined_original_window_shape_ = true; 438 determined_original_window_shape_ = true;
437 SkRegion* window_shape = window()->GetLayer()->alpha_shape(); 439 SkRegion* window_shape = window()->GetLayer()->alpha_shape();
438 if (!original_window_shape_ && window_shape) 440 if (!original_window_shape_ && window_shape)
439 original_window_shape_.reset(new SkRegion(*window_shape)); 441 original_window_shape_.reset(new SkRegion(*window_shape));
440 } 442 }
441 const int inset = 443 const int inset =
442 window()->GetIntProperty(WmWindowProperty::TOP_VIEW_INSET); 444 use_masks ? window()->GetIntProperty(WmWindowProperty::TOP_VIEW_INSET)
445 : 0;
443 if (inset > 0) { 446 if (inset > 0) {
444 bounds.Inset(0, inset, 0, 0); 447 bounds.Inset(0, inset, 0, 0);
445 SkRegion* region = new SkRegion; 448 SkRegion* region = new SkRegion;
446 region->setRect(RectToSkIRect(bounds)); 449 region->setRect(RectToSkIRect(bounds));
447 if (original_window_shape_) 450 if (original_window_shape_)
448 region->op(*original_window_shape_, SkRegion::kIntersect_Op); 451 region->op(*original_window_shape_, SkRegion::kIntersect_Op);
449 window()->GetLayer()->SetAlphaShape(base::WrapUnique(region)); 452 window()->GetLayer()->SetAlphaShape(base::WrapUnique(region));
450 window()->SetMasksToBounds(true); 453 window()->SetMasksToBounds(true);
451 } 454 }
452 } 455 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 if (parent_window) 498 if (parent_window)
496 parent_window->CloseWidget(); 499 parent_window->CloseWidget();
497 } 500 }
498 501
499 // static 502 // static
500 void ScopedTransformOverviewWindow::SetImmediateCloseForTests() { 503 void ScopedTransformOverviewWindow::SetImmediateCloseForTests() {
501 immediate_close_for_tests = true; 504 immediate_close_for_tests = true;
502 } 505 }
503 506
504 } // namespace ash 507 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698