OLD | NEW |
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" |
11 #include "chrome/browser/views/download_shelf_view.h" | 11 #include "chrome/browser/views/download_shelf_view.h" |
12 #include "chrome/browser/views/extensions/extension_shelf.h" | |
13 #include "chrome/browser/views/frame/browser_frame.h" | 12 #include "chrome/browser/views/frame/browser_frame.h" |
14 #include "chrome/browser/views/frame/browser_view.h" | 13 #include "chrome/browser/views/frame/browser_view.h" |
15 #include "chrome/browser/views/tabs/side_tab_strip.h" | 14 #include "chrome/browser/views/tabs/side_tab_strip.h" |
16 #include "chrome/browser/views/tabs/tab_strip.h" | 15 #include "chrome/browser/views/tabs/tab_strip.h" |
17 #include "chrome/browser/views/toolbar_view.h" | 16 #include "chrome/browser/views/toolbar_view.h" |
18 #include "gfx/scrollbar_size.h" | 17 #include "gfx/scrollbar_size.h" |
19 #include "views/window/window.h" | 18 #include "views/window/window.h" |
20 | 19 |
21 #if defined(OS_LINUX) | 20 #if defined(OS_LINUX) |
22 #include "views/window/hit_test.h" | 21 #include "views/window/hit_test.h" |
(...skipping 15 matching lines...) Expand all Loading... |
38 //////////////////////////////////////////////////////////////////////////////// | 37 //////////////////////////////////////////////////////////////////////////////// |
39 // BrowserViewLayout, public: | 38 // BrowserViewLayout, public: |
40 | 39 |
41 BrowserViewLayout::BrowserViewLayout() | 40 BrowserViewLayout::BrowserViewLayout() |
42 : tabstrip_(NULL), | 41 : tabstrip_(NULL), |
43 toolbar_(NULL), | 42 toolbar_(NULL), |
44 contents_split_(NULL), | 43 contents_split_(NULL), |
45 contents_container_(NULL), | 44 contents_container_(NULL), |
46 infobar_container_(NULL), | 45 infobar_container_(NULL), |
47 download_shelf_(NULL), | 46 download_shelf_(NULL), |
48 extension_shelf_(NULL), | |
49 active_bookmark_bar_(NULL), | 47 active_bookmark_bar_(NULL), |
50 browser_view_(NULL), | 48 browser_view_(NULL), |
51 find_bar_y_(0) { | 49 find_bar_y_(0) { |
52 } | 50 } |
53 | 51 |
54 gfx::Size BrowserViewLayout::GetMinimumSize() { | 52 gfx::Size BrowserViewLayout::GetMinimumSize() { |
55 // TODO(noname): In theory the tabstrip width should probably be | 53 // TODO(noname): In theory the tabstrip width should probably be |
56 // (OTR + tabstrip + caption buttons) width. | 54 // (OTR + tabstrip + caption buttons) width. |
57 gfx::Size tabstrip_size( | 55 gfx::Size tabstrip_size( |
58 browser()->SupportsWindowFeature(Browser::FEATURE_TABSTRIP) ? | 56 browser()->SupportsWindowFeature(Browser::FEATURE_TABSTRIP) ? |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 | 190 |
193 ////////////////////////////////////////////////////////////////////////////// | 191 ////////////////////////////////////////////////////////////////////////////// |
194 // BrowserViewLayout, views::LayoutManager implementation: | 192 // BrowserViewLayout, views::LayoutManager implementation: |
195 | 193 |
196 void BrowserViewLayout::Installed(views::View* host) { | 194 void BrowserViewLayout::Installed(views::View* host) { |
197 toolbar_ = NULL; | 195 toolbar_ = NULL; |
198 contents_split_ = NULL; | 196 contents_split_ = NULL; |
199 contents_container_ = NULL; | 197 contents_container_ = NULL; |
200 infobar_container_ = NULL; | 198 infobar_container_ = NULL; |
201 download_shelf_ = NULL; | 199 download_shelf_ = NULL; |
202 extension_shelf_ = NULL; | |
203 active_bookmark_bar_ = NULL; | 200 active_bookmark_bar_ = NULL; |
204 tabstrip_ = NULL; | 201 tabstrip_ = NULL; |
205 browser_view_ = static_cast<BrowserView*>(host); | 202 browser_view_ = static_cast<BrowserView*>(host); |
206 } | 203 } |
207 | 204 |
208 void BrowserViewLayout::Uninstalled(views::View* host) {} | 205 void BrowserViewLayout::Uninstalled(views::View* host) {} |
209 | 206 |
210 void BrowserViewLayout::ViewAdded(views::View* host, views::View* view) { | 207 void BrowserViewLayout::ViewAdded(views::View* host, views::View* view) { |
211 switch (view->GetID()) { | 208 switch (view->GetID()) { |
212 case VIEW_ID_CONTENTS_SPLIT: | 209 case VIEW_ID_CONTENTS_SPLIT: |
213 contents_split_ = view; | 210 contents_split_ = view; |
214 contents_container_ = contents_split_->GetChildViewAt(0); | 211 contents_container_ = contents_split_->GetChildViewAt(0); |
215 break; | 212 break; |
216 case VIEW_ID_INFO_BAR_CONTAINER: | 213 case VIEW_ID_INFO_BAR_CONTAINER: |
217 infobar_container_ = view; | 214 infobar_container_ = view; |
218 break; | 215 break; |
219 case VIEW_ID_DOWNLOAD_SHELF: | 216 case VIEW_ID_DOWNLOAD_SHELF: |
220 download_shelf_ = static_cast<DownloadShelfView*>(view); | 217 download_shelf_ = static_cast<DownloadShelfView*>(view); |
221 break; | 218 break; |
222 case VIEW_ID_DEV_EXTENSION_SHELF: | |
223 extension_shelf_ = static_cast<ExtensionShelf*>(view); | |
224 break; | |
225 case VIEW_ID_BOOKMARK_BAR: | 219 case VIEW_ID_BOOKMARK_BAR: |
226 active_bookmark_bar_ = static_cast<BookmarkBarView*>(view); | 220 active_bookmark_bar_ = static_cast<BookmarkBarView*>(view); |
227 break; | 221 break; |
228 case VIEW_ID_TOOLBAR: | 222 case VIEW_ID_TOOLBAR: |
229 toolbar_ = static_cast<ToolbarView*>(view); | 223 toolbar_ = static_cast<ToolbarView*>(view); |
230 break; | 224 break; |
231 case VIEW_ID_TAB_STRIP: | 225 case VIEW_ID_TAB_STRIP: |
232 tabstrip_ = static_cast<BaseTabStrip*>(view); | 226 tabstrip_ = static_cast<BaseTabStrip*>(view); |
233 break; | 227 break; |
234 } | 228 } |
235 } | 229 } |
236 | 230 |
237 void BrowserViewLayout::ViewRemoved(views::View* host, views::View* view) { | 231 void BrowserViewLayout::ViewRemoved(views::View* host, views::View* view) { |
238 switch (view->GetID()) { | 232 switch (view->GetID()) { |
239 case VIEW_ID_BOOKMARK_BAR: | 233 case VIEW_ID_BOOKMARK_BAR: |
240 active_bookmark_bar_ = NULL; | 234 active_bookmark_bar_ = NULL; |
241 break; | 235 break; |
242 } | 236 } |
243 } | 237 } |
244 | 238 |
245 void BrowserViewLayout::Layout(views::View* host) { | 239 void BrowserViewLayout::Layout(views::View* host) { |
246 vertical_layout_rect_ = browser_view_->GetLocalBounds(true); | 240 vertical_layout_rect_ = browser_view_->GetLocalBounds(true); |
247 int top = LayoutTabStrip(); | 241 int top = LayoutTabStrip(); |
248 top = LayoutToolbar(top); | 242 top = LayoutToolbar(top); |
249 top = LayoutBookmarkAndInfoBars(top); | 243 top = LayoutBookmarkAndInfoBars(top); |
250 int bottom = LayoutExtensionAndDownloadShelves(); | 244 int bottom = LayoutDownloadShelf(browser_view_->height()); |
251 LayoutTabContents(top, bottom); | 245 LayoutTabContents(top, bottom); |
252 // This must be done _after_ we lay out the TabContents since this | 246 // This must be done _after_ we lay out the TabContents since this |
253 // code calls back into us to find the bounding box the find bar | 247 // code calls back into us to find the bounding box the find bar |
254 // must be laid out within, and that code depends on the | 248 // must be laid out within, and that code depends on the |
255 // TabContentsContainer's bounds being up to date. | 249 // TabContentsContainer's bounds being up to date. |
256 if (browser()->HasFindBarController()) { | 250 if (browser()->HasFindBarController()) { |
257 browser()->GetFindBarController()->find_bar()->MoveWindowIfNecessary( | 251 browser()->GetFindBarController()->find_bar()->MoveWindowIfNecessary( |
258 gfx::Rect(), true); | 252 gfx::Rect(), true); |
259 } | 253 } |
260 // Align status bubble with the bottom of the contents_container. | 254 // Align status bubble with the bottom of the contents_container. |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 return top + height; | 355 return top + height; |
362 } | 356 } |
363 | 357 |
364 // Layout the TabContents container, between the coordinates |top| and | 358 // Layout the TabContents container, between the coordinates |top| and |
365 // |bottom|. | 359 // |bottom|. |
366 void BrowserViewLayout::LayoutTabContents(int top, int bottom) { | 360 void BrowserViewLayout::LayoutTabContents(int top, int bottom) { |
367 contents_split_->SetBounds(vertical_layout_rect_.x(), top, | 361 contents_split_->SetBounds(vertical_layout_rect_.x(), top, |
368 vertical_layout_rect_.width(), bottom - top); | 362 vertical_layout_rect_.width(), bottom - top); |
369 } | 363 } |
370 | 364 |
371 int BrowserViewLayout::LayoutExtensionAndDownloadShelves() { | |
372 // If we're showing the Extension bar in detached style, then we | |
373 // need to show Download shelf _above_ the Extension bar, since | |
374 // the Extension bar is styled to look like it's part of the page. | |
375 // | |
376 // TODO(Oshima): confirm this comment. | |
377 int bottom = browser_view_->height(); | |
378 if (extension_shelf_) { | |
379 if (extension_shelf_->IsDetached()) { | |
380 bottom = LayoutDownloadShelf(bottom); | |
381 return LayoutExtensionShelf(bottom); | |
382 } | |
383 // Otherwise, Extension shelf first, Download shelf second. | |
384 bottom = LayoutExtensionShelf(bottom); | |
385 } | |
386 return LayoutDownloadShelf(bottom); | |
387 } | |
388 | |
389 int BrowserViewLayout::LayoutDownloadShelf(int bottom) { | 365 int BrowserViewLayout::LayoutDownloadShelf(int bottom) { |
390 // Re-layout the shelf either if it is visible or if it's close animation | 366 // Re-layout the shelf either if it is visible or if it's close animation |
391 // is currently running. | 367 // is currently running. |
392 if (browser_view_->IsDownloadShelfVisible() || | 368 if (browser_view_->IsDownloadShelfVisible() || |
393 (download_shelf_ && download_shelf_->IsClosing())) { | 369 (download_shelf_ && download_shelf_->IsClosing())) { |
394 bool visible = browser()->SupportsWindowFeature( | 370 bool visible = browser()->SupportsWindowFeature( |
395 Browser::FEATURE_DOWNLOADSHELF); | 371 Browser::FEATURE_DOWNLOADSHELF); |
396 DCHECK(download_shelf_); | 372 DCHECK(download_shelf_); |
397 int height = visible ? download_shelf_->GetPreferredSize().height() : 0; | 373 int height = visible ? download_shelf_->GetPreferredSize().height() : 0; |
398 download_shelf_->SetVisible(visible); | 374 download_shelf_->SetVisible(visible); |
399 download_shelf_->SetBounds(vertical_layout_rect_.x(), bottom - height, | 375 download_shelf_->SetBounds(vertical_layout_rect_.x(), bottom - height, |
400 vertical_layout_rect_.width(), height); | 376 vertical_layout_rect_.width(), height); |
401 download_shelf_->Layout(); | 377 download_shelf_->Layout(); |
402 bottom -= height; | 378 bottom -= height; |
403 } | 379 } |
404 return bottom; | 380 return bottom; |
405 } | 381 } |
406 | 382 |
407 int BrowserViewLayout::LayoutExtensionShelf(int bottom) { | |
408 if (extension_shelf_) { | |
409 bool visible = browser()->SupportsWindowFeature( | |
410 Browser::FEATURE_EXTENSIONSHELF); | |
411 int height = | |
412 visible ? extension_shelf_->GetPreferredSize().height() : 0; | |
413 extension_shelf_->SetVisible(visible && height != 0); | |
414 extension_shelf_->SetBounds(vertical_layout_rect_.x(), bottom - height, | |
415 vertical_layout_rect_.width(), height); | |
416 extension_shelf_->Layout(); | |
417 bottom -= height; | |
418 } | |
419 return bottom; | |
420 } | |
OLD | NEW |