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

Side by Side Diff: chrome/browser/ui/panels/panel_manager.cc

Issue 8776035: Add PanelOverflowStrip to handle panel overflow. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Prepare for final landing Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/ui/panels/panel_manager.h" 5 #include "chrome/browser/ui/panels/panel_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/fullscreen.h" 9 #include "chrome/browser/fullscreen.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/browser_list.h" 11 #include "chrome/browser/ui/browser_list.h"
12 #include "chrome/browser/ui/panels/panel_mouse_watcher.h" 12 #include "chrome/browser/ui/panels/panel_mouse_watcher.h"
13 #include "chrome/browser/ui/panels/panel_overflow_strip.h"
13 #include "chrome/browser/ui/panels/panel_strip.h" 14 #include "chrome/browser/ui/panels/panel_strip.h"
14 #include "chrome/browser/ui/window_sizer.h" 15 #include "chrome/browser/ui/window_sizer.h"
15 #include "chrome/common/chrome_notification_types.h" 16 #include "chrome/common/chrome_notification_types.h"
16 #include "content/public/browser/notification_service.h" 17 #include "content/public/browser/notification_service.h"
17 #include "content/public/browser/notification_source.h" 18 #include "content/public/browser/notification_source.h"
18 19
19 namespace { 20 namespace {
20 const int kOverflowStripThickness = 24; 21 const int kOverflowStripThickness = 24;
21 22
22 // Width of spacing around panel strip and the left/right edges of the screen. 23 // Width of spacing around panel strip and the left/right edges of the screen.
(...skipping 11 matching lines...) Expand all
34 PanelManager* PanelManager::GetInstance() { 35 PanelManager* PanelManager::GetInstance() {
35 static base::LazyInstance<PanelManager> instance = LAZY_INSTANCE_INITIALIZER; 36 static base::LazyInstance<PanelManager> instance = LAZY_INSTANCE_INITIALIZER;
36 return instance.Pointer(); 37 return instance.Pointer();
37 } 38 }
38 39
39 PanelManager::PanelManager() 40 PanelManager::PanelManager()
40 : panel_mouse_watcher_(PanelMouseWatcher::Create()), 41 : panel_mouse_watcher_(PanelMouseWatcher::Create()),
41 auto_sizing_enabled_(true), 42 auto_sizing_enabled_(true),
42 is_full_screen_(false) { 43 is_full_screen_(false) {
43 panel_strip_.reset(new PanelStrip(this)); 44 panel_strip_.reset(new PanelStrip(this));
45 panel_overflow_strip_.reset(new PanelOverflowStrip(this));
44 auto_hiding_desktop_bar_ = AutoHidingDesktopBar::Create(this); 46 auto_hiding_desktop_bar_ = AutoHidingDesktopBar::Create(this);
45 OnDisplayChanged(); 47 OnDisplayChanged();
46 } 48 }
47 49
48 PanelManager::~PanelManager() { 50 PanelManager::~PanelManager() {
49 } 51 }
50 52
51 void PanelManager::OnDisplayChanged() { 53 void PanelManager::OnDisplayChanged() {
52 scoped_ptr<WindowSizer::MonitorInfoProvider> info_provider( 54 scoped_ptr<WindowSizer::MonitorInfoProvider> info_provider(
53 WindowSizer::CreateDefaultMonitorInfoProvider()); 55 WindowSizer::CreateDefaultMonitorInfoProvider());
(...skipping 20 matching lines...) Expand all
74 void PanelManager::Layout() { 76 void PanelManager::Layout() {
75 int height = 77 int height =
76 static_cast<int>(adjusted_work_area_.height() * kPanelStripHeightFactor); 78 static_cast<int>(adjusted_work_area_.height() * kPanelStripHeightFactor);
77 gfx::Rect panel_strip_bounds; 79 gfx::Rect panel_strip_bounds;
78 panel_strip_bounds.set_x(adjusted_work_area_.x() + kPanelStripLeftMargin); 80 panel_strip_bounds.set_x(adjusted_work_area_.x() + kPanelStripLeftMargin);
79 panel_strip_bounds.set_y(adjusted_work_area_.bottom() - height); 81 panel_strip_bounds.set_y(adjusted_work_area_.bottom() - height);
80 panel_strip_bounds.set_width(adjusted_work_area_.width() - 82 panel_strip_bounds.set_width(adjusted_work_area_.width() -
81 kPanelStripLeftMargin - kPanelStripRightMargin); 83 kPanelStripLeftMargin - kPanelStripRightMargin);
82 panel_strip_bounds.set_height(height); 84 panel_strip_bounds.set_height(height);
83 panel_strip_->SetDisplayArea(panel_strip_bounds); 85 panel_strip_->SetDisplayArea(panel_strip_bounds);
86
87 gfx::Rect overflow_area(adjusted_work_area_);
88 overflow_area.set_width(kOverflowStripThickness);
89 panel_overflow_strip_->SetDisplayArea(overflow_area);
84 } 90 }
85 91
86 Panel* PanelManager::CreatePanel(Browser* browser) { 92 Panel* PanelManager::CreatePanel(Browser* browser) {
87 int width = browser->override_bounds().width(); 93 int width = browser->override_bounds().width();
88 int height = browser->override_bounds().height(); 94 int height = browser->override_bounds().height();
89 Panel* panel = new Panel(browser, gfx::Size(width, height)); 95 Panel* panel = new Panel(browser, gfx::Size(width, height));
90 panel_strip_->AddPanel(panel); 96 panel_strip_->AddPanel(panel);
91 97
92 content::NotificationService::current()->Notify( 98 content::NotificationService::current()->Notify(
93 chrome::NOTIFICATION_PANEL_ADDED, 99 chrome::NOTIFICATION_PANEL_ADDED,
(...skipping 12 matching lines...) Expand all
106 int PanelManager::StartingRightPosition() const { 112 int PanelManager::StartingRightPosition() const {
107 return panel_strip_->StartingRightPosition(); 113 return panel_strip_->StartingRightPosition();
108 } 114 }
109 115
110 void PanelManager::CheckFullScreenMode() { 116 void PanelManager::CheckFullScreenMode() {
111 bool is_full_screen_new = IsFullScreenMode(); 117 bool is_full_screen_new = IsFullScreenMode();
112 if (is_full_screen_ == is_full_screen_new) 118 if (is_full_screen_ == is_full_screen_new)
113 return; 119 return;
114 is_full_screen_ = is_full_screen_new; 120 is_full_screen_ = is_full_screen_new;
115 panel_strip_->OnFullScreenModeChanged(is_full_screen_); 121 panel_strip_->OnFullScreenModeChanged(is_full_screen_);
122 panel_overflow_strip_->OnFullScreenModeChanged(is_full_screen_);
116 } 123 }
117 124
118 void PanelManager::Remove(Panel* panel) { 125 void PanelManager::Remove(Panel* panel) {
119 if (num_panels() == 1) 126 if (num_panels() == 1)
120 full_screen_mode_timer_.Stop(); 127 full_screen_mode_timer_.Stop();
121 128
122 if (panel_strip_->Remove(panel)) 129 if (panel_strip_->Remove(panel))
123 return; 130 return;
124 // TODO(jianli): else try removing from overflow strip 131 bool removed = panel_overflow_strip_->Remove(panel);
132 DCHECK(removed);
125 } 133 }
126 134
127 void PanelManager::OnPanelRemoved(Panel* panel) { 135 void PanelManager::OnPanelRemoved(Panel* panel) {
128 content::NotificationService::current()->Notify( 136 content::NotificationService::current()->Notify(
129 chrome::NOTIFICATION_PANEL_REMOVED, 137 chrome::NOTIFICATION_PANEL_REMOVED,
130 content::Source<Panel>(panel), 138 content::Source<Panel>(panel),
131 content::NotificationService::NoDetails()); 139 content::NotificationService::NoDetails());
132 } 140 }
133 141
134 void PanelManager::StartDragging(Panel* panel) { 142 void PanelManager::StartDragging(Panel* panel) {
135 panel_strip_->StartDragging(panel); 143 panel_strip_->StartDragging(panel);
136 } 144 }
137 145
138 void PanelManager::Drag(int delta_x) { 146 void PanelManager::Drag(int delta_x) {
139 panel_strip_->Drag(delta_x); 147 panel_strip_->Drag(delta_x);
140 } 148 }
141 149
142 void PanelManager::EndDragging(bool cancelled) { 150 void PanelManager::EndDragging(bool cancelled) {
143 panel_strip_->EndDragging(cancelled); 151 panel_strip_->EndDragging(cancelled);
144 } 152 }
145 153
146 void PanelManager::OnPanelExpansionStateChanged( 154 void PanelManager::OnPanelExpansionStateChanged(
147 Panel::ExpansionState old_state, Panel::ExpansionState new_state) { 155 Panel* panel, Panel::ExpansionState old_state) {
148 panel_strip_->OnPanelExpansionStateChanged(old_state, new_state); 156 if (panel->expansion_state() == Panel::IN_OVERFLOW)
157 panel_overflow_strip_->OnPanelExpansionStateChanged(panel, old_state);
158 else
159 panel_strip_->OnPanelExpansionStateChanged(panel, old_state);
149 } 160 }
150 161
151 void PanelManager::OnPreferredWindowSizeChanged( 162 void PanelManager::OnPreferredWindowSizeChanged(
152 Panel* panel, const gfx::Size& preferred_window_size) { 163 Panel* panel, const gfx::Size& preferred_window_size) {
153 if (!auto_sizing_enabled_) 164 if (!auto_sizing_enabled_)
154 return; 165 return;
155 panel_strip_->OnPreferredWindowSizeChanged(panel, preferred_window_size); 166 panel_strip_->OnPreferredWindowSizeChanged(panel, preferred_window_size);
156 } 167 }
157 168
158 bool PanelManager::ShouldBringUpTitlebars(int mouse_x, int mouse_y) const { 169 bool PanelManager::ShouldBringUpTitlebars(int mouse_x, int mouse_y) const {
(...skipping 14 matching lines...) Expand all
173 adjusted_work_area_.set_x(adjusted_work_area_.x() + space); 184 adjusted_work_area_.set_x(adjusted_work_area_.x() + space);
174 adjusted_work_area_.set_width(adjusted_work_area_.width() - space); 185 adjusted_work_area_.set_width(adjusted_work_area_.width() - space);
175 } 186 }
176 if (auto_hiding_desktop_bar_->IsEnabled(AutoHidingDesktopBar::ALIGN_RIGHT)) { 187 if (auto_hiding_desktop_bar_->IsEnabled(AutoHidingDesktopBar::ALIGN_RIGHT)) {
177 int space = auto_hiding_desktop_bar_->GetThickness( 188 int space = auto_hiding_desktop_bar_->GetThickness(
178 AutoHidingDesktopBar::ALIGN_RIGHT); 189 AutoHidingDesktopBar::ALIGN_RIGHT);
179 adjusted_work_area_.set_width(adjusted_work_area_.width() - space); 190 adjusted_work_area_.set_width(adjusted_work_area_.width() - space);
180 } 191 }
181 } 192 }
182 193
183 int PanelManager::GetBottomPositionForExpansionState(
184 Panel::ExpansionState expansion_state) const {
185 return panel_strip_->GetBottomPositionForExpansionState(expansion_state);
186 }
187
188 BrowserWindow* PanelManager::GetNextBrowserWindowToActivate( 194 BrowserWindow* PanelManager::GetNextBrowserWindowToActivate(
189 Panel* panel) const { 195 Panel* panel) const {
190 // Find the last active browser window that is not minimized. 196 // Find the last active browser window that is not minimized.
191 BrowserList::const_reverse_iterator iter = BrowserList::begin_last_active(); 197 BrowserList::const_reverse_iterator iter = BrowserList::begin_last_active();
192 BrowserList::const_reverse_iterator end = BrowserList::end_last_active(); 198 BrowserList::const_reverse_iterator end = BrowserList::end_last_active();
193 for (; (iter != end); ++iter) { 199 for (; (iter != end); ++iter) {
194 Browser* browser = *iter; 200 Browser* browser = *iter;
195 if (panel->browser() != browser && !browser->window()->IsMinimized()) 201 if (panel->browser() != browser && !browser->window()->IsMinimized())
196 return browser->window(); 202 return browser->window();
197 } 203 }
198 204
199 return NULL; 205 return NULL;
200 } 206 }
201 207
202 void PanelManager::MoveToOverflowStrip(Panel* panel, bool is_new) {
203 // TODO(jianli) - implement.
204 }
205
206 void PanelManager::OnAutoHidingDesktopBarThicknessChanged() { 208 void PanelManager::OnAutoHidingDesktopBarThicknessChanged() {
207 AdjustWorkAreaForAutoHidingDesktopBars(); 209 AdjustWorkAreaForAutoHidingDesktopBars();
208 Layout(); 210 Layout();
209 } 211 }
210 212
211 void PanelManager::OnAutoHidingDesktopBarVisibilityChanged( 213 void PanelManager::OnAutoHidingDesktopBarVisibilityChanged(
212 AutoHidingDesktopBar::Alignment alignment, 214 AutoHidingDesktopBar::Alignment alignment,
213 AutoHidingDesktopBar::Visibility visibility) { 215 AutoHidingDesktopBar::Visibility visibility) {
214 panel_strip_->OnAutoHidingDesktopBarVisibilityChanged(alignment, visibility); 216 panel_strip_->OnAutoHidingDesktopBarVisibilityChanged(alignment, visibility);
215 } 217 }
216 218
217 void PanelManager::RemoveAll() { 219 void PanelManager::RemoveAll() {
218 panel_strip_->RemoveAll(); 220 panel_strip_->RemoveAll();
219 // TODO(jianli): overflow_strip_->RemoveAll(); 221 panel_overflow_strip_->RemoveAll();
220 } 222 }
221 223
222 int PanelManager::num_panels() const { 224 int PanelManager::num_panels() const {
223 return panel_strip_->num_panels(); 225 return panel_strip_->num_panels() + panel_overflow_strip_->num_panels();
224 // TODO(jianli): + overflow_strip_->num_panels();
225 } 226 }
226 227
227 bool PanelManager::is_dragging_panel() const { 228 bool PanelManager::is_dragging_panel() const {
228 return panel_strip_->is_dragging_panel(); 229 return panel_strip_->is_dragging_panel();
229 } 230 }
230 231
231 const PanelManager::Panels& PanelManager::panels() const { 232 const PanelManager::Panels& PanelManager::panels() const {
232 return panel_strip_->panels(); 233 return panel_strip_->panels();
233 } 234 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/panels/panel_manager.h ('k') | chrome/browser/ui/panels/panel_overflow_strip.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698