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

Side by Side Diff: ash/wm/panels/panel_layout_manager.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: merge 2 trunk Created 4 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/wm/panels/panel_layout_manager.h" 5 #include "ash/wm/panels/panel_layout_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 // Offset used when sliding panel in/out of the shelf. Used for minimizing, 52 // Offset used when sliding panel in/out of the shelf. Used for minimizing,
53 // restoring and the initial showing of a panel. 53 // restoring and the initial showing of a panel.
54 const int kPanelSlideInOffset = 20; 54 const int kPanelSlideInOffset = 20;
55 55
56 // Callout arrow dimensions. 56 // Callout arrow dimensions.
57 const int kArrowWidth = 18; 57 const int kArrowWidth = 18;
58 const int kArrowHeight = 9; 58 const int kArrowHeight = 9;
59 59
60 class CalloutWidgetBackground : public views::Background { 60 class CalloutWidgetBackground : public views::Background {
61 public: 61 public:
62 CalloutWidgetBackground() : alignment_(SHELF_ALIGNMENT_BOTTOM) { 62 CalloutWidgetBackground() : alignment_(wm::SHELF_ALIGNMENT_BOTTOM) {}
63 }
64 63
65 void Paint(gfx::Canvas* canvas, views::View* view) const override { 64 void Paint(gfx::Canvas* canvas, views::View* view) const override {
66 SkPath path; 65 SkPath path;
67 switch (alignment_) { 66 switch (alignment_) {
68 case SHELF_ALIGNMENT_BOTTOM: 67 case wm::SHELF_ALIGNMENT_BOTTOM:
69 case SHELF_ALIGNMENT_BOTTOM_LOCKED: 68 case wm::SHELF_ALIGNMENT_BOTTOM_LOCKED:
70 path.moveTo(SkIntToScalar(0), SkIntToScalar(0)); 69 path.moveTo(SkIntToScalar(0), SkIntToScalar(0));
71 path.lineTo(SkIntToScalar(kArrowWidth / 2), 70 path.lineTo(SkIntToScalar(kArrowWidth / 2),
72 SkIntToScalar(kArrowHeight)); 71 SkIntToScalar(kArrowHeight));
73 path.lineTo(SkIntToScalar(kArrowWidth), SkIntToScalar(0)); 72 path.lineTo(SkIntToScalar(kArrowWidth), SkIntToScalar(0));
74 break; 73 break;
75 case SHELF_ALIGNMENT_LEFT: 74 case wm::SHELF_ALIGNMENT_LEFT:
76 path.moveTo(SkIntToScalar(kArrowHeight), SkIntToScalar(kArrowWidth)); 75 path.moveTo(SkIntToScalar(kArrowHeight), SkIntToScalar(kArrowWidth));
77 path.lineTo(SkIntToScalar(0), SkIntToScalar(kArrowWidth / 2)); 76 path.lineTo(SkIntToScalar(0), SkIntToScalar(kArrowWidth / 2));
78 path.lineTo(SkIntToScalar(kArrowHeight), SkIntToScalar(0)); 77 path.lineTo(SkIntToScalar(kArrowHeight), SkIntToScalar(0));
79 break; 78 break;
80 case SHELF_ALIGNMENT_RIGHT: 79 case wm::SHELF_ALIGNMENT_RIGHT:
81 path.moveTo(SkIntToScalar(0), SkIntToScalar(0)); 80 path.moveTo(SkIntToScalar(0), SkIntToScalar(0));
82 path.lineTo(SkIntToScalar(kArrowHeight), 81 path.lineTo(SkIntToScalar(kArrowHeight),
83 SkIntToScalar(kArrowWidth / 2)); 82 SkIntToScalar(kArrowWidth / 2));
84 path.lineTo(SkIntToScalar(0), SkIntToScalar(kArrowWidth)); 83 path.lineTo(SkIntToScalar(0), SkIntToScalar(kArrowWidth));
85 break; 84 break;
86 } 85 }
87 // Hard code the arrow color for now. 86 // Hard code the arrow color for now.
88 SkPaint paint; 87 SkPaint paint;
89 paint.setStyle(SkPaint::kFill_Style); 88 paint.setStyle(SkPaint::kFill_Style);
90 paint.setColor(SkColorSetARGB(0xff, 0xe5, 0xe5, 0xe5)); 89 paint.setColor(SkColorSetARGB(0xff, 0xe5, 0xe5, 0xe5));
91 canvas->DrawPath(path, paint); 90 canvas->DrawPath(path, paint);
92 } 91 }
93 92
94 ShelfAlignment alignment() { return alignment_; } 93 wm::ShelfAlignment alignment() { return alignment_; }
95 94
96 void set_alignment(ShelfAlignment alignment) { alignment_ = alignment; } 95 void set_alignment(wm::ShelfAlignment alignment) { alignment_ = alignment; }
97 96
98 private: 97 private:
99 ShelfAlignment alignment_; 98 wm::ShelfAlignment alignment_;
100 99
101 DISALLOW_COPY_AND_ASSIGN(CalloutWidgetBackground); 100 DISALLOW_COPY_AND_ASSIGN(CalloutWidgetBackground);
102 }; 101 };
103 102
104 struct VisiblePanelPositionInfo { 103 struct VisiblePanelPositionInfo {
105 VisiblePanelPositionInfo() 104 VisiblePanelPositionInfo()
106 : min_major(0), 105 : min_major(0),
107 max_major(0), 106 max_major(0),
108 major_pos(0), 107 major_pos(0),
109 major_length(0), 108 major_length(0),
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 } 162 }
164 } 163 }
165 164
166 bool BoundsAdjacent(const gfx::Rect& bounds1, const gfx::Rect& bounds2) { 165 bool BoundsAdjacent(const gfx::Rect& bounds1, const gfx::Rect& bounds2) {
167 return bounds1.x() == bounds2.right() || 166 return bounds1.x() == bounds2.right() ||
168 bounds1.y() == bounds2.bottom() || 167 bounds1.y() == bounds2.bottom() ||
169 bounds1.right() == bounds2.x() || 168 bounds1.right() == bounds2.x() ||
170 bounds1.bottom() == bounds2.y(); 169 bounds1.bottom() == bounds2.y();
171 } 170 }
172 171
173 gfx::Vector2d GetSlideInAnimationOffset(ShelfAlignment alignment) { 172 gfx::Vector2d GetSlideInAnimationOffset(wm::ShelfAlignment alignment) {
174 gfx::Vector2d offset; 173 gfx::Vector2d offset;
175 if (alignment == SHELF_ALIGNMENT_LEFT) 174 if (alignment == wm::SHELF_ALIGNMENT_LEFT)
176 offset.set_x(-kPanelSlideInOffset); 175 offset.set_x(-kPanelSlideInOffset);
177 else if (alignment == SHELF_ALIGNMENT_RIGHT) 176 else if (alignment == wm::SHELF_ALIGNMENT_RIGHT)
178 offset.set_x(kPanelSlideInOffset); 177 offset.set_x(kPanelSlideInOffset);
179 else 178 else
180 offset.set_y(kPanelSlideInOffset); 179 offset.set_y(kPanelSlideInOffset);
181 return offset; 180 return offset;
182 } 181 }
183 182
184 } // namespace 183 } // namespace
185 184
186 class PanelCalloutWidget : public views::Widget { 185 class PanelCalloutWidget : public views::Widget {
187 public: 186 public:
188 explicit PanelCalloutWidget(wm::WmWindow* container) : background_(nullptr) { 187 explicit PanelCalloutWidget(wm::WmWindow* container) : background_(nullptr) {
189 InitWidget(container); 188 InitWidget(container);
190 } 189 }
191 190
192 void SetAlignment(ShelfAlignment alignment) { 191 void SetAlignment(wm::ShelfAlignment alignment) {
193 gfx::Rect callout_bounds = GetWindowBoundsInScreen(); 192 gfx::Rect callout_bounds = GetWindowBoundsInScreen();
194 if (IsHorizontalAlignment(alignment)) { 193 if (IsHorizontalAlignment(alignment)) {
195 callout_bounds.set_width(kArrowWidth); 194 callout_bounds.set_width(kArrowWidth);
196 callout_bounds.set_height(kArrowHeight); 195 callout_bounds.set_height(kArrowHeight);
197 } else { 196 } else {
198 callout_bounds.set_width(kArrowHeight); 197 callout_bounds.set_width(kArrowHeight);
199 callout_bounds.set_height(kArrowWidth); 198 callout_bounds.set_height(kArrowWidth);
200 } 199 }
201 SetBounds(callout_bounds); 200 SetBounds(callout_bounds);
202 if (background_->alignment() != alignment) { 201 if (background_->alignment() != alignment) {
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 // they actually become visible. 605 // they actually become visible.
607 WindowSelectorController* window_selector_controller = 606 WindowSelectorController* window_selector_controller =
608 Shell::GetInstance()->window_selector_controller(); 607 Shell::GetInstance()->window_selector_controller();
609 if (in_layout_ || !window_selector_controller || 608 if (in_layout_ || !window_selector_controller ||
610 (window_selector_controller->IsSelecting() && 609 (window_selector_controller->IsSelecting() &&
611 !window_selector_controller->IsRestoringMinimizedWindows())) 610 !window_selector_controller->IsRestoringMinimizedWindows()))
612 return; 611 return;
613 612
614 base::AutoReset<bool> auto_reset_in_layout(&in_layout_, true); 613 base::AutoReset<bool> auto_reset_in_layout(&in_layout_, true);
615 614
616 const ShelfAlignment alignment = shelf_->alignment(); 615 const wm::ShelfAlignment alignment = shelf_->alignment();
617 const bool horizontal = shelf_->IsHorizontalAlignment(); 616 const bool horizontal = shelf_->IsHorizontalAlignment();
618 gfx::Rect shelf_bounds = panel_container_->ConvertRectFromScreen( 617 gfx::Rect shelf_bounds = panel_container_->ConvertRectFromScreen(
619 shelf_->shelf_widget()->GetWindowBoundsInScreen()); 618 shelf_->shelf_widget()->GetWindowBoundsInScreen());
620 int panel_start_bounds = kPanelIdealSpacing; 619 int panel_start_bounds = kPanelIdealSpacing;
621 int panel_end_bounds = 620 int panel_end_bounds =
622 horizontal ? panel_container_->GetBounds().width() - kPanelIdealSpacing 621 horizontal ? panel_container_->GetBounds().width() - kPanelIdealSpacing
623 : panel_container_->GetBounds().height() - kPanelIdealSpacing; 622 : panel_container_->GetBounds().height() - kPanelIdealSpacing;
624 wm::WmWindow* active_panel = nullptr; 623 wm::WmWindow* active_panel = nullptr;
625 std::vector<VisiblePanelPositionInfo> visible_panels; 624 std::vector<VisiblePanelPositionInfo> visible_panels;
626 for (PanelList::iterator iter = panel_windows_.begin(); 625 for (PanelList::iterator iter = panel_windows_.begin();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 } 698 }
700 } 699 }
701 FanOutPanels(visible_panels.begin() + first_overlapping_panel, 700 FanOutPanels(visible_panels.begin() + first_overlapping_panel,
702 visible_panels.end()); 701 visible_panels.end());
703 702
704 for (size_t i = 0; i < visible_panels.size(); ++i) { 703 for (size_t i = 0; i < visible_panels.size(); ++i) {
705 if (visible_panels[i].window == dragged_panel_) 704 if (visible_panels[i].window == dragged_panel_)
706 continue; 705 continue;
707 bool slide_in = visible_panels[i].slide_in; 706 bool slide_in = visible_panels[i].slide_in;
708 gfx::Rect bounds = visible_panels[i].window->GetTargetBounds(); 707 gfx::Rect bounds = visible_panels[i].window->GetTargetBounds();
709 if (alignment == SHELF_ALIGNMENT_LEFT) 708 if (alignment == wm::SHELF_ALIGNMENT_LEFT)
710 bounds.set_x(shelf_bounds.right()); 709 bounds.set_x(shelf_bounds.right());
711 else if (alignment == SHELF_ALIGNMENT_RIGHT) 710 else if (alignment == wm::SHELF_ALIGNMENT_RIGHT)
712 bounds.set_x(shelf_bounds.x() - bounds.width()); 711 bounds.set_x(shelf_bounds.x() - bounds.width());
713 else 712 else
714 bounds.set_y(shelf_bounds.y() - bounds.height()); 713 bounds.set_y(shelf_bounds.y() - bounds.height());
715 bool on_shelf = visible_panels[i].window->GetTargetBounds() == bounds; 714 bool on_shelf = visible_panels[i].window->GetTargetBounds() == bounds;
716 715
717 if (horizontal) { 716 if (horizontal) {
718 bounds.set_x(visible_panels[i].major_pos - 717 bounds.set_x(visible_panels[i].major_pos -
719 visible_panels[i].major_length / 2); 718 visible_panels[i].major_length / 2);
720 } else { 719 } else {
721 bounds.set_y(visible_panels[i].major_pos - 720 bounds.set_y(visible_panels[i].major_pos -
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 current_bounds.x() - callout_bounds.x(), 837 current_bounds.x() - callout_bounds.x(),
839 callout_bounds.right() - current_bounds.right()); 838 callout_bounds.right() - current_bounds.right());
840 } else { 839 } else {
841 callout_bounds.set_y( 840 callout_bounds.set_y(
842 icon_bounds.y() + (icon_bounds.height() - 841 icon_bounds.y() + (icon_bounds.height() -
843 callout_bounds.height()) / 2); 842 callout_bounds.height()) / 2);
844 distance_until_over_panel = std::max( 843 distance_until_over_panel = std::max(
845 current_bounds.y() - callout_bounds.y(), 844 current_bounds.y() - callout_bounds.y(),
846 callout_bounds.bottom() - current_bounds.bottom()); 845 callout_bounds.bottom() - current_bounds.bottom());
847 } 846 }
848 if (shelf_->alignment() == SHELF_ALIGNMENT_LEFT) 847 if (shelf_->alignment() == wm::SHELF_ALIGNMENT_LEFT)
849 callout_bounds.set_x(bounds.x() - callout_bounds.width()); 848 callout_bounds.set_x(bounds.x() - callout_bounds.width());
850 else if (shelf_->alignment() == SHELF_ALIGNMENT_RIGHT) 849 else if (shelf_->alignment() == wm::SHELF_ALIGNMENT_RIGHT)
851 callout_bounds.set_x(bounds.right()); 850 callout_bounds.set_x(bounds.right());
852 else 851 else
853 callout_bounds.set_y(bounds.bottom()); 852 callout_bounds.set_y(bounds.bottom());
854 callout_bounds = callout_widget_window->GetParent()->ConvertRectFromScreen( 853 callout_bounds = callout_widget_window->GetParent()->ConvertRectFromScreen(
855 callout_bounds); 854 callout_bounds);
856 855
857 callout_widget_window->SetBoundsDirect(callout_bounds); 856 callout_widget_window->SetBoundsDirect(callout_bounds);
858 panel_container_->StackChildAbove(callout_widget_window, panel); 857 panel_container_->StackChildAbove(callout_widget_window, panel);
859 858
860 ui::Layer* layer = callout_widget_window->GetLayer(); 859 ui::Layer* layer = callout_widget_window->GetLayer();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 // Keyboard hidden, restore original bounds if they exist. 918 // Keyboard hidden, restore original bounds if they exist.
920 panel->SetBoundsDirect(panel_state->GetRestoreBoundsInScreen()); 919 panel->SetBoundsDirect(panel_state->GetRestoreBoundsInScreen());
921 } 920 }
922 } 921 }
923 // This bounds change will have caused a change to the Shelf which does not 922 // This bounds change will have caused a change to the Shelf which does not
924 // propogate automatically to this class, so manually recalculate bounds. 923 // propogate automatically to this class, so manually recalculate bounds.
925 OnWindowResized(); 924 OnWindowResized();
926 } 925 }
927 926
928 } // namespace ash 927 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698