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

Side by Side Diff: chrome/browser/views/frame/browser_view_layout.cc

Issue 3056003: Attemp 2 at: (Closed)
Patch Set: Fix chromeos breakage Created 10 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 (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/views/frame/browser_view_layout.h" 5 #include "chrome/browser/views/frame/browser_view_layout.h"
6 6
7 #include "chrome/browser/find_bar.h" 7 #include "chrome/browser/find_bar.h"
8 #include "chrome/browser/find_bar_controller.h" 8 #include "chrome/browser/find_bar_controller.h"
9 #include "chrome/browser/view_ids.h" 9 #include "chrome/browser/view_ids.h"
10 #include "chrome/browser/views/bookmark_bar_view.h" 10 #include "chrome/browser/views/bookmark_bar_view.h"
(...skipping 14 matching lines...) Expand all
25 namespace { 25 namespace {
26 26
27 // The visible height of the shadow above the tabs. Clicks in this area are 27 // The visible height of the shadow above the tabs. Clicks in this area are
28 // treated as clicks to the frame, rather than clicks to the tab. 28 // treated as clicks to the frame, rather than clicks to the tab.
29 const int kTabShadowSize = 2; 29 const int kTabShadowSize = 2;
30 // The vertical overlap between the TabStrip and the Toolbar. 30 // The vertical overlap between the TabStrip and the Toolbar.
31 const int kToolbarTabStripVerticalOverlap = 3; 31 const int kToolbarTabStripVerticalOverlap = 3;
32 // An offset distance between certain toolbars and the toolbar that preceded 32 // An offset distance between certain toolbars and the toolbar that preceded
33 // them in layout. 33 // them in layout.
34 const int kSeparationLineHeight = 1; 34 const int kSeparationLineHeight = 1;
35 // Spacing between extension app icon and title.
36 const int kExtensionAppIconTitleSpacing = 4;
37 35
38 } // namespace 36 } // namespace
39 37
40 //////////////////////////////////////////////////////////////////////////////// 38 ////////////////////////////////////////////////////////////////////////////////
41 // BrowserViewLayout, public: 39 // BrowserViewLayout, public:
42 40
43 BrowserViewLayout::BrowserViewLayout() 41 BrowserViewLayout::BrowserViewLayout()
44 : extension_app_icon_(NULL), 42 : tabstrip_(NULL),
45 extension_app_title_(NULL),
46 tabstrip_(NULL),
47 toolbar_(NULL), 43 toolbar_(NULL),
48 contents_split_(NULL), 44 contents_split_(NULL),
49 contents_container_(NULL), 45 contents_container_(NULL),
50 infobar_container_(NULL), 46 infobar_container_(NULL),
51 download_shelf_(NULL), 47 download_shelf_(NULL),
52 extension_shelf_(NULL), 48 extension_shelf_(NULL),
53 active_bookmark_bar_(NULL), 49 active_bookmark_bar_(NULL),
54 browser_view_(NULL), 50 browser_view_(NULL),
55 find_bar_y_(0) { 51 find_bar_y_(0) {
56 } 52 }
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 195
200 void BrowserViewLayout::Installed(views::View* host) { 196 void BrowserViewLayout::Installed(views::View* host) {
201 toolbar_ = NULL; 197 toolbar_ = NULL;
202 contents_split_ = NULL; 198 contents_split_ = NULL;
203 contents_container_ = NULL; 199 contents_container_ = NULL;
204 infobar_container_ = NULL; 200 infobar_container_ = NULL;
205 download_shelf_ = NULL; 201 download_shelf_ = NULL;
206 extension_shelf_ = NULL; 202 extension_shelf_ = NULL;
207 active_bookmark_bar_ = NULL; 203 active_bookmark_bar_ = NULL;
208 tabstrip_ = NULL; 204 tabstrip_ = NULL;
209 extension_app_icon_ = NULL;
210 extension_app_title_ = NULL;
211 browser_view_ = static_cast<BrowserView*>(host); 205 browser_view_ = static_cast<BrowserView*>(host);
212 } 206 }
213 207
214 void BrowserViewLayout::Uninstalled(views::View* host) {} 208 void BrowserViewLayout::Uninstalled(views::View* host) {}
215 209
216 void BrowserViewLayout::ViewAdded(views::View* host, views::View* view) { 210 void BrowserViewLayout::ViewAdded(views::View* host, views::View* view) {
217 switch (view->GetID()) { 211 switch (view->GetID()) {
218 case VIEW_ID_CONTENTS_SPLIT: 212 case VIEW_ID_CONTENTS_SPLIT:
219 contents_split_ = view; 213 contents_split_ = view;
220 contents_container_ = contents_split_->GetChildViewAt(0); 214 contents_container_ = contents_split_->GetChildViewAt(0);
221 break; 215 break;
222 case VIEW_ID_INFO_BAR_CONTAINER: 216 case VIEW_ID_INFO_BAR_CONTAINER:
223 infobar_container_ = view; 217 infobar_container_ = view;
224 break; 218 break;
225 case VIEW_ID_DOWNLOAD_SHELF: 219 case VIEW_ID_DOWNLOAD_SHELF:
226 download_shelf_ = static_cast<DownloadShelfView*>(view); 220 download_shelf_ = static_cast<DownloadShelfView*>(view);
227 break; 221 break;
228 case VIEW_ID_DEV_EXTENSION_SHELF: 222 case VIEW_ID_DEV_EXTENSION_SHELF:
229 extension_shelf_ = static_cast<ExtensionShelf*>(view); 223 extension_shelf_ = static_cast<ExtensionShelf*>(view);
230 break; 224 break;
231 case VIEW_ID_BOOKMARK_BAR: 225 case VIEW_ID_BOOKMARK_BAR:
232 active_bookmark_bar_ = static_cast<BookmarkBarView*>(view); 226 active_bookmark_bar_ = static_cast<BookmarkBarView*>(view);
233 break; 227 break;
234 case VIEW_ID_TOOLBAR: 228 case VIEW_ID_TOOLBAR:
235 toolbar_ = static_cast<ToolbarView*>(view); 229 toolbar_ = static_cast<ToolbarView*>(view);
236 break; 230 break;
237 case VIEW_ID_TAB_STRIP: 231 case VIEW_ID_TAB_STRIP:
238 tabstrip_ = static_cast<BaseTabStrip*>(view); 232 tabstrip_ = static_cast<BaseTabStrip*>(view);
239 break; 233 break;
240 case VIEW_ID_EXTENSION_APP_ICON:
241 extension_app_icon_ = static_cast<views::ImageView*>(view);
242 break;
243 case VIEW_ID_EXTENSION_APP_TITLE:
244 extension_app_title_ = static_cast<views::Label*>(view);
245 break;
246 } 234 }
247 } 235 }
248 236
249 void BrowserViewLayout::ViewRemoved(views::View* host, views::View* view) { 237 void BrowserViewLayout::ViewRemoved(views::View* host, views::View* view) {
250 switch (view->GetID()) { 238 switch (view->GetID()) {
251 case VIEW_ID_BOOKMARK_BAR: 239 case VIEW_ID_BOOKMARK_BAR:
252 active_bookmark_bar_ = NULL; 240 active_bookmark_bar_ = NULL;
253 break; 241 break;
254 } 242 }
255 } 243 }
256 244
257 void BrowserViewLayout::Layout(views::View* host) { 245 void BrowserViewLayout::Layout(views::View* host) {
258 vertical_layout_rect_ = browser_view_->GetLocalBounds(true); 246 vertical_layout_rect_ = browser_view_->GetLocalBounds(true);
259 LayoutExtensionAppIconAndTitle();
260 int top = LayoutTabStrip(); 247 int top = LayoutTabStrip();
261 top = LayoutToolbar(top); 248 top = LayoutToolbar(top);
262 top = LayoutBookmarkAndInfoBars(top); 249 top = LayoutBookmarkAndInfoBars(top);
263 int bottom = LayoutExtensionAndDownloadShelves(); 250 int bottom = LayoutExtensionAndDownloadShelves();
264 LayoutTabContents(top, bottom); 251 LayoutTabContents(top, bottom);
265 // This must be done _after_ we lay out the TabContents since this 252 // This must be done _after_ we lay out the TabContents since this
266 // code calls back into us to find the bounding box the find bar 253 // code calls back into us to find the bounding box the find bar
267 // must be laid out within, and that code depends on the 254 // must be laid out within, and that code depends on the
268 // TabContentsContainer's bounds being up to date. 255 // TabContentsContainer's bounds being up to date.
269 if (browser()->HasFindBarController()) { 256 if (browser()->HasFindBarController()) {
270 browser()->GetFindBarController()->find_bar()->MoveWindowIfNecessary( 257 browser()->GetFindBarController()->find_bar()->MoveWindowIfNecessary(
271 gfx::Rect(), true); 258 gfx::Rect(), true);
272 } 259 }
273 // Align status bubble with the bottom of the contents_container. 260 // Align status bubble with the bottom of the contents_container.
274 browser_view_->LayoutStatusBubble( 261 browser_view_->LayoutStatusBubble(
275 top + contents_container_->bounds().height()); 262 top + contents_container_->bounds().height());
276 browser_view_->SchedulePaint(); 263 browser_view_->SchedulePaint();
277 } 264 }
278 265
279 // Return the preferred size which is the size required to give each 266 // Return the preferred size which is the size required to give each
280 // children their respective preferred size. 267 // children their respective preferred size.
281 gfx::Size BrowserViewLayout::GetPreferredSize(views::View* host) { 268 gfx::Size BrowserViewLayout::GetPreferredSize(views::View* host) {
282 return gfx::Size(); 269 return gfx::Size();
283 } 270 }
284 271
285 ////////////////////////////////////////////////////////////////////////////// 272 //////////////////////////////////////////////////////////////////////////////
286 // BrowserViewLayout, private: 273 // BrowserViewLayout, private:
287 274
288 void BrowserViewLayout::LayoutExtensionAppIconAndTitle() {
289 if (browser_view_->browser()->type() != Browser::TYPE_EXTENSION_APP)
290 return;
291
292 extension_app_icon_->SetVisible(true);
293 extension_app_icon_->SetBounds(0, 0, Extension::EXTENSION_ICON_SMALL,
294 Extension::EXTENSION_ICON_SMALL);
295
296 extension_app_title_->SetVisible(true);
297
298 // Position the title vertically centered with the icon and slightly to its
299 // right.
300 extension_app_title_->SetX(
301 extension_app_icon_->x() + extension_app_icon_->width() +
302 kExtensionAppIconTitleSpacing);
303 extension_app_title_->SetY(
304 extension_app_icon_->y() +
305 ((extension_app_icon_->height() - extension_app_title_->height()) / 2));
306 }
307
308 int BrowserViewLayout::LayoutTabStrip() { 275 int BrowserViewLayout::LayoutTabStrip() {
309 if (!browser_view_->IsTabStripVisible()) { 276 if (!browser_view_->IsTabStripVisible()) {
310 tabstrip_->SetVisible(false); 277 tabstrip_->SetVisible(false);
311 tabstrip_->SetBounds(0, 0, 0, 0); 278 tabstrip_->SetBounds(0, 0, 0, 0);
312 return 0; 279 return 0;
313 } 280 }
314 gfx::Rect layout_bounds = 281 gfx::Rect layout_bounds =
315 browser_view_->frame()->GetBoundsForTabStrip(tabstrip_); 282 browser_view_->frame()->GetBoundsForTabStrip(tabstrip_);
316 283
317 if (browser_view_->UseVerticalTabs()) { 284 if (browser_view_->UseVerticalTabs()) {
(...skipping 18 matching lines...) Expand all
336 303
337 int BrowserViewLayout::LayoutToolbar(int top) { 304 int BrowserViewLayout::LayoutToolbar(int top) {
338 int browser_view_width = vertical_layout_rect_.width(); 305 int browser_view_width = vertical_layout_rect_.width();
339 bool visible = browser_view_->IsToolbarVisible(); 306 bool visible = browser_view_->IsToolbarVisible();
340 toolbar_->location_bar()->SetFocusable(visible); 307 toolbar_->location_bar()->SetFocusable(visible);
341 int y = top; 308 int y = top;
342 if (!browser_view_->UseVerticalTabs()) { 309 if (!browser_view_->UseVerticalTabs()) {
343 y -= ((visible && browser_view_->IsTabStripVisible()) ? 310 y -= ((visible && browser_view_->IsTabStripVisible()) ?
344 kToolbarTabStripVerticalOverlap : 0); 311 kToolbarTabStripVerticalOverlap : 0);
345 } 312 }
346 313 int height = visible ? toolbar_->GetPreferredSize().height() : 0;
347 int height = 0; 314 toolbar_->SetVisible(visible);
348 if (visible) {
349 height = toolbar_->GetPreferredSize().height();
350 toolbar_->SetVisible(true);
351 } else {
352 toolbar_->SetVisible(false);
353 }
354
355 toolbar_->SetBounds(vertical_layout_rect_.x(), y, browser_view_width, height); 315 toolbar_->SetBounds(vertical_layout_rect_.x(), y, browser_view_width, height);
356 return y + height; 316 return y + height;
357 } 317 }
358 318
359 int BrowserViewLayout::LayoutBookmarkAndInfoBars(int top) { 319 int BrowserViewLayout::LayoutBookmarkAndInfoBars(int top) {
360 find_bar_y_ = top + browser_view_->y() - 1; 320 find_bar_y_ = top + browser_view_->y() - 1;
361 if (active_bookmark_bar_) { 321 if (active_bookmark_bar_) {
362 // If we're showing the Bookmark bar in detached style, then we 322 // If we're showing the Bookmark bar in detached style, then we
363 // need to show any Info bar _above_ the Bookmark bar, since the 323 // need to show any Info bar _above_ the Bookmark bar, since the
364 // Bookmark bar is styled to look like it's part of the page. 324 // Bookmark bar is styled to look like it's part of the page.
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 int height = 411 int height =
452 visible ? extension_shelf_->GetPreferredSize().height() : 0; 412 visible ? extension_shelf_->GetPreferredSize().height() : 0;
453 extension_shelf_->SetVisible(visible && height != 0); 413 extension_shelf_->SetVisible(visible && height != 0);
454 extension_shelf_->SetBounds(vertical_layout_rect_.x(), bottom - height, 414 extension_shelf_->SetBounds(vertical_layout_rect_.x(), bottom - height,
455 vertical_layout_rect_.width(), height); 415 vertical_layout_rect_.width(), height);
456 extension_shelf_->Layout(); 416 extension_shelf_->Layout();
457 bottom -= height; 417 bottom -= height;
458 } 418 }
459 return bottom; 419 return bottom;
460 } 420 }
OLDNEW
« no previous file with comments | « chrome/browser/views/frame/browser_view_layout.h ('k') | chrome/browser/views/frame/opaque_browser_frame_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698