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

Side by Side Diff: ash/shelf/shelf_widget.cc

Issue 1914093002: Refactors DockedWindowLayoutManager in terms of ash/wm/common (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nuke_aura_window
Patch Set: comment Created 4 years, 7 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
« no previous file with comments | « ash/shelf/shelf_widget.h ('k') | ash/shelf/shelf_widget_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/shelf/shelf_widget.h" 5 #include "ash/shelf/shelf_widget.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/focus_cycler.h" 8 #include "ash/focus_cycler.h"
9 #include "ash/root_window_controller.h" 9 #include "ash/root_window_controller.h"
10 #include "ash/session/session_state_delegate.h" 10 #include "ash/session/session_state_delegate.h"
11 #include "ash/shelf/shelf_constants.h" 11 #include "ash/shelf/shelf_constants.h"
12 #include "ash/shelf/shelf_delegate.h" 12 #include "ash/shelf/shelf_delegate.h"
13 #include "ash/shelf/shelf_layout_manager.h" 13 #include "ash/shelf/shelf_layout_manager.h"
14 #include "ash/shelf/shelf_model.h" 14 #include "ash/shelf/shelf_model.h"
15 #include "ash/shelf/shelf_navigator.h" 15 #include "ash/shelf/shelf_navigator.h"
16 #include "ash/shelf/shelf_util.h" 16 #include "ash/shelf/shelf_util.h"
17 #include "ash/shelf/shelf_view.h" 17 #include "ash/shelf/shelf_view.h"
18 #include "ash/shelf/shelf_widget.h" 18 #include "ash/shelf/shelf_widget.h"
19 #include "ash/shell.h" 19 #include "ash/shell.h"
20 #include "ash/shell_window_ids.h" 20 #include "ash/shell_window_ids.h"
21 #include "ash/system/tray/system_tray_delegate.h" 21 #include "ash/system/tray/system_tray_delegate.h"
22 #include "ash/wm/common/shelf/wm_shelf_constants.h"
22 #include "ash/wm/status_area_layout_manager.h" 23 #include "ash/wm/status_area_layout_manager.h"
23 #include "ash/wm/window_properties.h" 24 #include "ash/wm/window_properties.h"
24 #include "ash/wm/workspace_controller.h" 25 #include "ash/wm/workspace_controller.h"
25 #include "grit/ash_resources.h" 26 #include "grit/ash_resources.h"
26 #include "ui/aura/window.h" 27 #include "ui/aura/window.h"
27 #include "ui/aura/window_event_dispatcher.h" 28 #include "ui/aura/window_event_dispatcher.h"
28 #include "ui/aura/window_observer.h" 29 #include "ui/aura/window_observer.h"
29 #include "ui/base/resource/resource_bundle.h" 30 #include "ui/base/resource/resource_bundle.h"
30 #include "ui/compositor/layer.h" 31 #include "ui/compositor/layer.h"
31 #include "ui/compositor/scoped_layer_animation_settings.h" 32 #include "ui/compositor/scoped_layer_animation_settings.h"
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 } 176 }
176 177
177 void DimmerView::OnPaintBackground(gfx::Canvas* canvas) { 178 void DimmerView::OnPaintBackground(gfx::Canvas* canvas) {
178 SkPaint paint; 179 SkPaint paint;
179 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 180 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
180 gfx::ImageSkia shelf_background = 181 gfx::ImageSkia shelf_background =
181 *rb->GetImageNamed(IDR_ASH_SHELF_DIMMING).ToImageSkia(); 182 *rb->GetImageNamed(IDR_ASH_SHELF_DIMMING).ToImageSkia();
182 183
183 if (!IsHorizontalAlignment(shelf_->GetAlignment())) { 184 if (!IsHorizontalAlignment(shelf_->GetAlignment())) {
184 shelf_background = gfx::ImageSkiaOperations::CreateRotatedImage( 185 shelf_background = gfx::ImageSkiaOperations::CreateRotatedImage(
185 shelf_background, shelf_->GetAlignment() == SHELF_ALIGNMENT_LEFT 186 shelf_background, shelf_->GetAlignment() == wm::SHELF_ALIGNMENT_LEFT
186 ? SkBitmapOperations::ROTATION_90_CW 187 ? SkBitmapOperations::ROTATION_90_CW
187 : SkBitmapOperations::ROTATION_270_CW); 188 : SkBitmapOperations::ROTATION_270_CW);
188 } 189 }
189 paint.setAlpha(alpha_); 190 paint.setAlpha(alpha_);
190 canvas->DrawImageInt(shelf_background, 0, 0, shelf_background.width(), 191 canvas->DrawImageInt(shelf_background, 0, 0, shelf_background.width(),
191 shelf_background.height(), 0, 0, width(), height(), 192 shelf_background.height(), 0, 0, width(), height(),
192 false, paint); 193 false, paint);
193 } 194 }
194 195
195 DimmerView::DimmerEventFilter::DimmerEventFilter(DimmerView* owner) 196 DimmerView::DimmerEventFilter::DimmerEventFilter(DimmerView* owner)
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 shelf_->AddObserver(this); 246 shelf_->AddObserver(this);
246 } 247 }
247 248
248 ~ShelfWindowTargeter() override { 249 ~ShelfWindowTargeter() override {
249 // |shelf_| may have been destroyed by this time. 250 // |shelf_| may have been destroyed by this time.
250 if (shelf_) 251 if (shelf_)
251 shelf_->RemoveObserver(this); 252 shelf_->RemoveObserver(this);
252 } 253 }
253 254
254 private: 255 private:
255 gfx::Insets GetInsetsForAlignment(int distance, ShelfAlignment alignment) { 256 gfx::Insets GetInsetsForAlignment(int distance,
256 if (alignment == SHELF_ALIGNMENT_LEFT) 257 wm::ShelfAlignment alignment) {
258 if (alignment == wm::SHELF_ALIGNMENT_LEFT)
257 return gfx::Insets(0, 0, 0, distance); 259 return gfx::Insets(0, 0, 0, distance);
258 if (alignment == SHELF_ALIGNMENT_RIGHT) 260 if (alignment == wm::SHELF_ALIGNMENT_RIGHT)
259 return gfx::Insets(0, distance, 0, 0); 261 return gfx::Insets(0, distance, 0, 0);
260 return gfx::Insets(distance, 0, 0, 0); 262 return gfx::Insets(distance, 0, 0, 0);
261 } 263 }
262 264
263 // ShelfLayoutManagerObserver: 265 // ShelfLayoutManagerObserver:
264 void WillDeleteShelf() override { 266 void WillDeleteShelf() override {
265 shelf_->RemoveObserver(this); 267 shelf_->RemoveObserver(this);
266 shelf_ = NULL; 268 shelf_ = NULL;
267 } 269 }
268 270
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 ReorderLayers(); 447 ReorderLayers();
446 } 448 }
447 449
448 void ShelfWidget::DelegateView::OnPaintBackground(gfx::Canvas* canvas) { 450 void ShelfWidget::DelegateView::OnPaintBackground(gfx::Canvas* canvas) {
449 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 451 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
450 gfx::ImageSkia shelf_background = 452 gfx::ImageSkia shelf_background =
451 *rb->GetImageSkiaNamed(IDR_ASH_SHELF_BACKGROUND); 453 *rb->GetImageSkiaNamed(IDR_ASH_SHELF_BACKGROUND);
452 const bool horizontal = IsHorizontalAlignment(shelf_->GetAlignment()); 454 const bool horizontal = IsHorizontalAlignment(shelf_->GetAlignment());
453 if (!horizontal) { 455 if (!horizontal) {
454 shelf_background = gfx::ImageSkiaOperations::CreateRotatedImage( 456 shelf_background = gfx::ImageSkiaOperations::CreateRotatedImage(
455 shelf_background, shelf_->GetAlignment() == SHELF_ALIGNMENT_LEFT 457 shelf_background, shelf_->GetAlignment() == wm::SHELF_ALIGNMENT_LEFT
456 ? SkBitmapOperations::ROTATION_90_CW 458 ? SkBitmapOperations::ROTATION_90_CW
457 : SkBitmapOperations::ROTATION_270_CW); 459 : SkBitmapOperations::ROTATION_270_CW);
458 } 460 }
459 const gfx::Rect dock_bounds(shelf_->shelf_layout_manager()->dock_bounds()); 461 const gfx::Rect dock_bounds(shelf_->shelf_layout_manager()->dock_bounds());
460 SkPaint paint; 462 SkPaint paint;
461 paint.setAlpha(alpha_); 463 paint.setAlpha(alpha_);
462 canvas->DrawImageInt( 464 canvas->DrawImageInt(
463 shelf_background, 0, 0, shelf_background.width(), 465 shelf_background, 0, 0, shelf_background.width(),
464 shelf_background.height(), 466 shelf_background.height(),
465 (horizontal && dock_bounds.x() == 0 && dock_bounds.width() > 0) 467 (horizontal && dock_bounds.x() == 0 && dock_bounds.width() > 0)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 552
551 void ShelfWidget::DelegateView::UpdateBackground(int alpha) { 553 void ShelfWidget::DelegateView::UpdateBackground(int alpha) {
552 alpha_ = alpha; 554 alpha_ = alpha;
553 SchedulePaint(); 555 SchedulePaint();
554 } 556 }
555 557
556 ShelfWidget::ShelfWidget(aura::Window* shelf_container, 558 ShelfWidget::ShelfWidget(aura::Window* shelf_container,
557 aura::Window* status_container, 559 aura::Window* status_container,
558 WorkspaceController* workspace_controller) 560 WorkspaceController* workspace_controller)
559 : delegate_view_(new DelegateView(this)), 561 : delegate_view_(new DelegateView(this)),
560 background_animator_(delegate_view_, 0, kShelfBackgroundAlpha), 562 background_animator_(delegate_view_, 0, wm::kShelfBackgroundAlpha),
561 activating_as_fallback_(false), 563 activating_as_fallback_(false),
562 window_container_(shelf_container) { 564 window_container_(shelf_container) {
563 views::Widget::InitParams params( 565 views::Widget::InitParams params(
564 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); 566 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
565 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; 567 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
566 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 568 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
567 params.parent = shelf_container; 569 params.parent = shelf_container;
568 params.delegate = delegate_view_; 570 params.delegate = delegate_view_;
569 Init(params); 571 Init(params);
570 572
(...skipping 27 matching lines...) Expand all
598 views::Widget::AddObserver(this); 600 views::Widget::AddObserver(this);
599 } 601 }
600 602
601 ShelfWidget::~ShelfWidget() { 603 ShelfWidget::~ShelfWidget() {
602 Shell::GetInstance()->focus_cycler()->RemoveWidget(this); 604 Shell::GetInstance()->focus_cycler()->RemoveWidget(this);
603 SetFocusCycler(nullptr); 605 SetFocusCycler(nullptr);
604 RemoveObserver(this); 606 RemoveObserver(this);
605 } 607 }
606 608
607 void ShelfWidget::SetPaintsBackground( 609 void ShelfWidget::SetPaintsBackground(
608 ShelfBackgroundType background_type, 610 wm::ShelfBackgroundType background_type,
609 BackgroundAnimatorChangeType change_type) { 611 BackgroundAnimatorChangeType change_type) {
610 ui::Layer* opaque_background = delegate_view_->opaque_background(); 612 ui::Layer* opaque_background = delegate_view_->opaque_background();
611 float target_opacity = 613 float target_opacity =
612 (background_type == SHELF_BACKGROUND_MAXIMIZED) ? 1.0f : 0.0f; 614 (background_type == wm::SHELF_BACKGROUND_MAXIMIZED) ? 1.0f : 0.0f;
613 std::unique_ptr<ui::ScopedLayerAnimationSettings> opaque_background_animation; 615 std::unique_ptr<ui::ScopedLayerAnimationSettings> opaque_background_animation;
614 if (change_type != BACKGROUND_CHANGE_IMMEDIATE) { 616 if (change_type != BACKGROUND_CHANGE_IMMEDIATE) {
615 opaque_background_animation.reset(new ui::ScopedLayerAnimationSettings( 617 opaque_background_animation.reset(new ui::ScopedLayerAnimationSettings(
616 opaque_background->GetAnimator())); 618 opaque_background->GetAnimator()));
617 opaque_background_animation->SetTransitionDuration( 619 opaque_background_animation->SetTransitionDuration(
618 base::TimeDelta::FromMilliseconds(kTimeToSwitchBackgroundMs)); 620 base::TimeDelta::FromMilliseconds(wm::kTimeToSwitchBackgroundMs));
619 } 621 }
620 opaque_background->SetOpacity(target_opacity); 622 opaque_background->SetOpacity(target_opacity);
621 623
622 // TODO(mukai): use ui::Layer on both opaque_background and normal background 624 // TODO(mukai): use ui::Layer on both opaque_background and normal background
623 // retire background_animator_ at all. It would be simpler. 625 // retire background_animator_ at all. It would be simpler.
624 // See also DockedBackgroundWidget::SetPaintsBackground. 626 // See also DockedBackgroundWidget::SetPaintsBackground.
625 background_animator_.SetPaintsBackground( 627 background_animator_.SetPaintsBackground(
626 background_type != SHELF_BACKGROUND_DEFAULT, 628 background_type != wm::SHELF_BACKGROUND_DEFAULT, change_type);
627 change_type);
628 delegate_view_->SchedulePaint(); 629 delegate_view_->SchedulePaint();
629 } 630 }
630 631
631 ShelfBackgroundType ShelfWidget::GetBackgroundType() const { 632 wm::ShelfBackgroundType ShelfWidget::GetBackgroundType() const {
632 if (delegate_view_->opaque_background()->GetTargetOpacity() == 1.0f) 633 if (delegate_view_->opaque_background()->GetTargetOpacity() == 1.0f)
633 return SHELF_BACKGROUND_MAXIMIZED; 634 return wm::SHELF_BACKGROUND_MAXIMIZED;
634 if (background_animator_.paints_background()) 635 if (background_animator_.paints_background())
635 return SHELF_BACKGROUND_OVERLAP; 636 return wm::SHELF_BACKGROUND_OVERLAP;
636 637
637 return SHELF_BACKGROUND_DEFAULT; 638 return wm::SHELF_BACKGROUND_DEFAULT;
638 } 639 }
639 640
640 void ShelfWidget::HideShelfBehindBlackBar(bool hide, int animation_time_ms) { 641 void ShelfWidget::HideShelfBehindBlackBar(bool hide, int animation_time_ms) {
641 if (IsShelfHiddenBehindBlackBar() == hide) 642 if (IsShelfHiddenBehindBlackBar() == hide)
642 return; 643 return;
643 644
644 ui::Layer* opaque_foreground = delegate_view_->opaque_foreground(); 645 ui::Layer* opaque_foreground = delegate_view_->opaque_foreground();
645 float target_opacity = hide ? 1.0f : 0.0f; 646 float target_opacity = hide ? 1.0f : 0.0f;
646 std::unique_ptr<ui::ScopedLayerAnimationSettings> opaque_foreground_animation; 647 std::unique_ptr<ui::ScopedLayerAnimationSettings> opaque_foreground_animation;
647 opaque_foreground_animation.reset(new ui::ScopedLayerAnimationSettings( 648 opaque_foreground_animation.reset(new ui::ScopedLayerAnimationSettings(
(...skipping 30 matching lines...) Expand all
678 case user::LOGGED_IN_GUEST: 679 case user::LOGGED_IN_GUEST:
679 case user::LOGGED_IN_KIOSK_APP: 680 case user::LOGGED_IN_KIOSK_APP:
680 case user::LOGGED_IN_NONE: 681 case user::LOGGED_IN_NONE:
681 return false; 682 return false;
682 } 683 }
683 684
684 NOTREACHED(); 685 NOTREACHED();
685 return false; 686 return false;
686 } 687 }
687 688
688 ShelfAlignment ShelfWidget::GetAlignment() const { 689 wm::ShelfAlignment ShelfWidget::GetAlignment() const {
689 // TODO(msw): This should not be called before |shelf_| is created. 690 // TODO(msw): This should not be called before |shelf_| is created.
690 return shelf_ ? shelf_->alignment() : SHELF_ALIGNMENT_BOTTOM_LOCKED; 691 return shelf_ ? shelf_->alignment() : wm::SHELF_ALIGNMENT_BOTTOM_LOCKED;
691 } 692 }
692 693
693 void ShelfWidget::OnShelfAlignmentChanged() { 694 void ShelfWidget::OnShelfAlignmentChanged() {
694 status_area_widget_->SetShelfAlignment(GetAlignment()); 695 status_area_widget_->SetShelfAlignment(GetAlignment());
695 delegate_view_->SchedulePaint(); 696 delegate_view_->SchedulePaint();
696 } 697 }
697 698
698 void ShelfWidget::SetDimsShelf(bool dimming) { 699 void ShelfWidget::SetDimsShelf(bool dimming) {
699 delegate_view_->SetDimmed(dimming); 700 delegate_view_->SetDimmed(dimming);
700 // Repaint all children, allowing updates to reflect dimmed state eg: 701 // Repaint all children, allowing updates to reflect dimmed state eg:
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 DCHECK(delegate_view_); 786 DCHECK(delegate_view_);
786 return delegate_view_->disable_dimming_animations_for_test(); 787 return delegate_view_->disable_dimming_animations_for_test();
787 } 788 }
788 789
789 void ShelfWidget::WillDeleteShelf() { 790 void ShelfWidget::WillDeleteShelf() {
790 shelf_layout_manager_->RemoveObserver(this); 791 shelf_layout_manager_->RemoveObserver(this);
791 shelf_layout_manager_ = NULL; 792 shelf_layout_manager_ = NULL;
792 } 793 }
793 794
794 } // namespace ash 795 } // namespace ash
OLDNEW
« no previous file with comments | « ash/shelf/shelf_widget.h ('k') | ash/shelf/shelf_widget_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698