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/toolbar_view.h" | 5 #include "chrome/browser/views/toolbar_view.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
9 #include "chrome/app/chrome_dll_resource.h" | 9 #include "chrome/app/chrome_dll_resource.h" |
10 #include "chrome/browser/browser.h" | 10 #include "chrome/browser/browser.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 // Separation between the location bar and the menus. | 51 // Separation between the location bar and the menus. |
52 static const int kMenuButtonOffset = 3; | 52 static const int kMenuButtonOffset = 3; |
53 | 53 |
54 // Padding to the right of the location bar | 54 // Padding to the right of the location bar |
55 static const int kPaddingRight = 2; | 55 static const int kPaddingRight = 2; |
56 | 56 |
57 static const int kPopupTopSpacingNonGlass = 3; | 57 static const int kPopupTopSpacingNonGlass = 3; |
58 static const int kPopupBottomSpacingNonGlass = 2; | 58 static const int kPopupBottomSpacingNonGlass = 2; |
59 static const int kPopupBottomSpacingGlass = 1; | 59 static const int kPopupBottomSpacingGlass = 1; |
60 | 60 |
61 // The height of the toolbar when it is in collapsed mode. | |
62 const int kCollapsedToolbarHeight = 7; | |
63 | |
64 static SkBitmap* kPopupBackgroundEdge = NULL; | 61 static SkBitmap* kPopupBackgroundEdge = NULL; |
65 | 62 |
66 //////////////////////////////////////////////////////////////////////////////// | 63 //////////////////////////////////////////////////////////////////////////////// |
67 // ToolbarView, public: | 64 // ToolbarView, public: |
68 | 65 |
69 ToolbarView::ToolbarView(Browser* browser) | 66 ToolbarView::ToolbarView(Browser* browser) |
70 : model_(browser->toolbar_model()), | 67 : model_(browser->toolbar_model()), |
71 back_(NULL), | 68 back_(NULL), |
72 forward_(NULL), | 69 forward_(NULL), |
73 home_(NULL), | 70 home_(NULL), |
74 reload_(NULL), | 71 reload_(NULL), |
75 location_bar_(NULL), | 72 location_bar_(NULL), |
76 browser_actions_(NULL), | 73 browser_actions_(NULL), |
77 app_menu_(NULL), | 74 app_menu_(NULL), |
78 profile_(NULL), | 75 profile_(NULL), |
79 browser_(browser), | 76 browser_(browser), |
80 profiles_menu_contents_(NULL), | 77 profiles_menu_contents_(NULL), |
81 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), | 78 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), |
82 destroyed_flag_(NULL), | 79 destroyed_flag_(NULL) { |
83 collapsed_(false) { | |
84 SetID(VIEW_ID_TOOLBAR); | 80 SetID(VIEW_ID_TOOLBAR); |
85 | 81 |
86 browser_->command_updater()->AddCommandObserver(IDC_BACK, this); | 82 browser_->command_updater()->AddCommandObserver(IDC_BACK, this); |
87 browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this); | 83 browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this); |
88 browser_->command_updater()->AddCommandObserver(IDC_HOME, this); | 84 browser_->command_updater()->AddCommandObserver(IDC_HOME, this); |
89 | 85 |
90 display_mode_ = browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP) ? | 86 display_mode_ = browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP) ? |
91 DISPLAYMODE_NORMAL : DISPLAYMODE_LOCATION; | 87 DISPLAYMODE_NORMAL : DISPLAYMODE_LOCATION; |
92 | 88 |
93 if (!kPopupBackgroundEdge) { | 89 if (!kPopupBackgroundEdge) { |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 void ToolbarView::RemoveMenuListener(views::MenuListener* listener) { | 212 void ToolbarView::RemoveMenuListener(views::MenuListener* listener) { |
217 for (std::vector<views::MenuListener*>::iterator i(menu_listeners_.begin()); | 213 for (std::vector<views::MenuListener*>::iterator i(menu_listeners_.begin()); |
218 i != menu_listeners_.end(); ++i) { | 214 i != menu_listeners_.end(); ++i) { |
219 if (*i == listener) { | 215 if (*i == listener) { |
220 menu_listeners_.erase(i); | 216 menu_listeners_.erase(i); |
221 return; | 217 return; |
222 } | 218 } |
223 } | 219 } |
224 } | 220 } |
225 | 221 |
226 void ToolbarView::SetCollapsed(bool val) { | |
227 if (collapsed_ == val) | |
228 return; | |
229 | |
230 collapsed_ = val; | |
231 | |
232 // When switching to and from collapsed view, we need to force hide/show the | |
233 // location bar entry view, like we do when we switch to full screen mode in | |
234 // BrowserView::ProcessFullscreen. Otherwise the text view can appear floating | |
235 // on top of web content. | |
236 if (collapsed_) | |
237 location_bar_->PushForceHidden(); | |
238 else | |
239 location_bar_->PopForceHidden(); | |
240 } | |
241 | |
242 //////////////////////////////////////////////////////////////////////////////// | 222 //////////////////////////////////////////////////////////////////////////////// |
243 // ToolbarView, AccessibleToolbarView overrides: | 223 // ToolbarView, AccessibleToolbarView overrides: |
244 | 224 |
245 bool ToolbarView::SetToolbarFocus( | 225 bool ToolbarView::SetToolbarFocus( |
246 int view_storage_id, views::View* initial_focus) { | 226 int view_storage_id, views::View* initial_focus) { |
247 if (!AccessibleToolbarView::SetToolbarFocus(view_storage_id, initial_focus)) | 227 if (!AccessibleToolbarView::SetToolbarFocus(view_storage_id, initial_focus)) |
248 return false; | 228 return false; |
249 | 229 |
250 location_bar_->SetShowFocusRect(true); | 230 location_bar_->SetShowFocusRect(true); |
251 return true; | 231 return true; |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 browser_actions_->GetPreferredSize().width() + | 389 browser_actions_->GetPreferredSize().width() + |
410 kMenuButtonOffset + | 390 kMenuButtonOffset + |
411 app_menu_->GetPreferredSize().width() + kPaddingRight; | 391 app_menu_->GetPreferredSize().width() + kPaddingRight; |
412 | 392 |
413 static SkBitmap normal_background; | 393 static SkBitmap normal_background; |
414 if (normal_background.isNull()) { | 394 if (normal_background.isNull()) { |
415 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 395 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
416 normal_background = *rb.GetBitmapNamed(IDR_CONTENT_TOP_CENTER); | 396 normal_background = *rb.GetBitmapNamed(IDR_CONTENT_TOP_CENTER); |
417 } | 397 } |
418 | 398 |
419 return gfx::Size(min_width, | 399 return gfx::Size(min_width, normal_background.height()); |
420 collapsed_ ? kCollapsedToolbarHeight : normal_background.height()); | |
421 } | 400 } |
422 | 401 |
423 int vertical_spacing = PopupTopSpacing() + | 402 int vertical_spacing = PopupTopSpacing() + |
424 (GetWindow()->GetNonClientView()->UseNativeFrame() ? | 403 (GetWindow()->GetNonClientView()->UseNativeFrame() ? |
425 kPopupBottomSpacingGlass : kPopupBottomSpacingNonGlass); | 404 kPopupBottomSpacingGlass : kPopupBottomSpacingNonGlass); |
426 return gfx::Size(0, location_bar_->GetPreferredSize().height() + | 405 return gfx::Size(0, location_bar_->GetPreferredSize().height() + |
427 vertical_spacing); | 406 vertical_spacing); |
428 } | 407 } |
429 | 408 |
430 void ToolbarView::Layout() { | 409 void ToolbarView::Layout() { |
431 // If we have not been initialized yet just do nothing. | 410 // If we have not been initialized yet just do nothing. |
432 if (back_ == NULL) | 411 if (back_ == NULL) |
433 return; | 412 return; |
434 | 413 |
435 if (!IsDisplayModeNormal()) { | 414 if (!IsDisplayModeNormal()) { |
436 int edge_width = (browser_->window() && browser_->window()->IsMaximized()) ? | 415 int edge_width = (browser_->window() && browser_->window()->IsMaximized()) ? |
437 0 : kPopupBackgroundEdge->width(); // See Paint(). | 416 0 : kPopupBackgroundEdge->width(); // See Paint(). |
438 location_bar_->SetBounds(edge_width, PopupTopSpacing(), | 417 location_bar_->SetBounds(edge_width, PopupTopSpacing(), |
439 width() - (edge_width * 2), location_bar_->GetPreferredSize().height()); | 418 width() - (edge_width * 2), location_bar_->GetPreferredSize().height()); |
440 return; | 419 return; |
441 } | 420 } |
442 | 421 |
443 // In collapsed mode, we don't show any of the child controls. | |
444 for (int i = 0; i < GetChildViewCount(); ++i) | |
445 GetChildViewAt(i)->SetVisible(!collapsed_); | |
446 | |
447 int child_y = std::min(kControlVertOffset, height()); | 422 int child_y = std::min(kControlVertOffset, height()); |
448 // We assume all child elements are the same height. | 423 // We assume all child elements are the same height. |
449 int child_height = | 424 int child_height = |
450 std::min(back_->GetPreferredSize().height(), height() - child_y); | 425 std::min(back_->GetPreferredSize().height(), height() - child_y); |
451 | 426 |
452 // If the window is maximized, we extend the back button to the left so that | 427 // If the window is maximized, we extend the back button to the left so that |
453 // clicking on the left-most pixel will activate the back button. | 428 // clicking on the left-most pixel will activate the back button. |
454 // TODO(abarth): If the window becomes maximized but is not resized, | 429 // TODO(abarth): If the window becomes maximized but is not resized, |
455 // then Layout() might not be called and the back button | 430 // then Layout() might not be called and the back button |
456 // will be slightly the wrong size. We should force a | 431 // will be slightly the wrong size. We should force a |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 } | 657 } |
683 #endif | 658 #endif |
684 | 659 |
685 // Tell the menu button to activate, opening its pop-up menu. | 660 // Tell the menu button to activate, opening its pop-up menu. |
686 menu_button->Activate(); | 661 menu_button->Activate(); |
687 | 662 |
688 #if defined(OS_WIN) | 663 #if defined(OS_WIN) |
689 SetToolbarFocus(NULL, menu_button); | 664 SetToolbarFocus(NULL, menu_button); |
690 #endif | 665 #endif |
691 } | 666 } |
OLD | NEW |