| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #import "chrome/browser/cocoa/toolbar_controller.h" | 5 #import "chrome/browser/cocoa/toolbar_controller.h" |
| 6 | 6 |
| 7 #include "app/l10n_util_mac.h" | 7 #include "app/l10n_util_mac.h" |
| 8 #include "base/mac_util.h" | 8 #include "base/mac_util.h" |
| 9 #include "base/sys_string_conversions.h" | 9 #include "base/sys_string_conversions.h" |
| 10 #include "base/gfx/rect.h" | 10 #include "base/gfx/rect.h" |
| 11 #include "chrome/app/chrome_dll_resource.h" | 11 #include "chrome/app/chrome_dll_resource.h" |
| 12 #include "chrome/browser/autocomplete/autocomplete_edit_view.h" | 12 #include "chrome/browser/autocomplete/autocomplete_edit_view.h" |
| 13 #include "chrome/browser/autocomplete/autocomplete_popup_view.h" | 13 #include "chrome/browser/bubble_positioner.h" |
| 14 #import "chrome/browser/cocoa/autocomplete_text_field.h" | 14 #import "chrome/browser/cocoa/autocomplete_text_field.h" |
| 15 #import "chrome/browser/cocoa/autocomplete_text_field_editor.h" | 15 #import "chrome/browser/cocoa/autocomplete_text_field_editor.h" |
| 16 #import "chrome/browser/cocoa/back_forward_menu_controller.h" | 16 #import "chrome/browser/cocoa/back_forward_menu_controller.h" |
| 17 #import "chrome/browser/cocoa/gradient_button_cell.h" | 17 #import "chrome/browser/cocoa/gradient_button_cell.h" |
| 18 #import "chrome/browser/cocoa/location_bar_view_mac.h" | 18 #import "chrome/browser/cocoa/location_bar_view_mac.h" |
| 19 #import "chrome/browser/cocoa/menu_button.h" | 19 #import "chrome/browser/cocoa/menu_button.h" |
| 20 #include "chrome/browser/cocoa/nsimage_cache.h" | 20 #include "chrome/browser/cocoa/nsimage_cache.h" |
| 21 #include "chrome/browser/profile.h" | 21 #include "chrome/browser/profile.h" |
| 22 #include "chrome/browser/search_engines/template_url_model.h" | 22 #include "chrome/browser/search_engines/template_url_model.h" |
| 23 #include "chrome/browser/toolbar_model.h" | 23 #include "chrome/browser/toolbar_model.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 37 // Overlap (in pixels) between the toolbar and the bookmark bar. | 37 // Overlap (in pixels) between the toolbar and the bookmark bar. |
| 38 static const float kBookmarkBarOverlap = 7.0; | 38 static const float kBookmarkBarOverlap = 7.0; |
| 39 | 39 |
| 40 @interface ToolbarController(Private) | 40 @interface ToolbarController(Private) |
| 41 - (void)initCommandStatus:(CommandUpdater*)commands; | 41 - (void)initCommandStatus:(CommandUpdater*)commands; |
| 42 - (void)prefChanged:(std::wstring*)prefName; | 42 - (void)prefChanged:(std::wstring*)prefName; |
| 43 @end | 43 @end |
| 44 | 44 |
| 45 namespace { | 45 namespace { |
| 46 | 46 |
| 47 // A C++ class used to correctly position the autocomplete popup. | 47 // A C++ class used to correctly position the omnibox. |
| 48 class AutocompletePopupPositionerMac : public AutocompletePopupPositioner { | 48 class BubblePositionerMac : public BubblePositioner { |
| 49 public: | 49 public: |
| 50 AutocompletePopupPositionerMac(ToolbarController* controller) | 50 BubblePositionerMac(ToolbarController* controller) |
| 51 : controller_(controller) { } | 51 : controller_(controller) { } |
| 52 virtual ~AutocompletePopupPositionerMac() { } | 52 virtual ~BubblePositionerMac() { } |
| 53 | 53 |
| 54 // Overridden from AutocompletePopupPositioner. | 54 // BubblePositioner: |
| 55 virtual gfx::Rect GetPopupBounds() const { | 55 virtual gfx::Rect GetLocationStackBounds() const { |
| 56 return [controller_ autocompletePopupPosition]; | 56 return [controller_ locationStackBounds]; |
| 57 } | 57 } |
| 58 | 58 |
| 59 private: | 59 private: |
| 60 ToolbarController* controller_; // weak, owns us | 60 ToolbarController* controller_; // weak, owns us |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 } // namespace | 63 } // namespace |
| 64 | 64 |
| 65 namespace ToolbarControllerInternal { | 65 namespace ToolbarControllerInternal { |
| 66 | 66 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 if (trackingArea_.get()) | 121 if (trackingArea_.get()) |
| 122 [[self view] removeTrackingArea:trackingArea_.get()]; | 122 [[self view] removeTrackingArea:trackingArea_.get()]; |
| 123 [super dealloc]; | 123 [super dealloc]; |
| 124 } | 124 } |
| 125 | 125 |
| 126 // Called after the view is done loading and the outlets have been hooked up. | 126 // Called after the view is done loading and the outlets have been hooked up. |
| 127 // Now we can hook up bridges that rely on UI objects such as the location | 127 // Now we can hook up bridges that rely on UI objects such as the location |
| 128 // bar and button state. | 128 // bar and button state. |
| 129 - (void)awakeFromNib { | 129 - (void)awakeFromNib { |
| 130 [self initCommandStatus:commands_]; | 130 [self initCommandStatus:commands_]; |
| 131 popupPositioner_.reset(new AutocompletePopupPositionerMac(self)); | 131 bubblePositioner_.reset(new BubblePositionerMac(self)); |
| 132 locationBarView_.reset(new LocationBarViewMac(locationBar_, | 132 locationBarView_.reset(new LocationBarViewMac(locationBar_, |
| 133 popupPositioner_.get(), | 133 bubblePositioner_.get(), |
| 134 commands_, toolbarModel_, | 134 commands_, toolbarModel_, |
| 135 profile_)); | 135 profile_)); |
| 136 [locationBar_ setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]]; | 136 [locationBar_ setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]]; |
| 137 | 137 |
| 138 // Register pref observers for the optional home and page/options buttons | 138 // Register pref observers for the optional home and page/options buttons |
| 139 // and then add them to the toolbar them based on those prefs. | 139 // and then add them to the toolbar them based on those prefs. |
| 140 prefObserver_.reset(new ToolbarControllerInternal::PrefObserverBridge(self)); | 140 prefObserver_.reset(new ToolbarControllerInternal::PrefObserverBridge(self)); |
| 141 PrefService* prefs = profile_->GetPrefs(); | 141 PrefService* prefs = profile_->GetPrefs(); |
| 142 showHomeButton_.Init(prefs::kShowHomeButton, prefs, prefObserver_.get()); | 142 showHomeButton_.Init(prefs::kShowHomeButton, prefs, prefObserver_.get()); |
| 143 showPageOptionButtons_.Init(prefs::kShowPageOptionsButtons, prefs, | 143 showPageOptionButtons_.Init(prefs::kShowPageOptionsButtons, prefs, |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 template_url_model->GetDefaultSearchProvider() : | 507 template_url_model->GetDefaultSearchProvider() : |
| 508 template_url_model->GetTemplateURLForKeyword(keyword); | 508 template_url_model->GetTemplateURLForKeyword(keyword); |
| 509 if (!provider) | 509 if (!provider) |
| 510 return nil; | 510 return nil; |
| 511 std::wstring shortName(provider->AdjustedShortNameForLocaleDirection()); | 511 std::wstring shortName(provider->AdjustedShortNameForLocaleDirection()); |
| 512 return l10n_util::GetNSStringF(IDS_TOOLTIP_GO_SEARCH, | 512 return l10n_util::GetNSStringF(IDS_TOOLTIP_GO_SEARCH, |
| 513 WideToUTF16(shortName), currentText16); | 513 WideToUTF16(shortName), currentText16); |
| 514 | 514 |
| 515 } | 515 } |
| 516 | 516 |
| 517 - (gfx::Rect)autocompletePopupPosition { | 517 - (gfx::Rect)locationStackBounds { |
| 518 // The popup should span from the left edge of the star button to the right | 518 // The number of pixels from the left or right edges of the location stack to |
| 519 // edge of the go button. The returned height is ignored. | 519 // "just inside the visible borders". When the omnibox bubble contents are |
| 520 // aligned with this, the visible borders tacked on to the outsides will line |
| 521 // up with the visible borders on the location stack. |
| 522 const int kLocationStackEdgeWidth = 2; |
| 523 |
| 520 NSRect locationFrame = [locationBar_ frame]; | 524 NSRect locationFrame = [locationBar_ frame]; |
| 521 // TODO(shess): The buttons have an extra 2 pixels between the edge | 525 int minX = NSMinX([starButton_ frame]); |
| 522 // of the visual button and the edge of the logical button. This | 526 int maxX = NSMaxX([goButton_ frame]); |
| 523 // seems wrong. | |
| 524 int minX = NSMinX([starButton_ frame]) + 2.0; | |
| 525 int maxX = NSMaxX([goButton_ frame]) - 2.0; | |
| 526 DCHECK(minX < NSMinX(locationFrame)); | 527 DCHECK(minX < NSMinX(locationFrame)); |
| 527 DCHECK(maxX > NSMaxX(locationFrame)); | 528 DCHECK(maxX > NSMaxX(locationFrame)); |
| 528 | 529 |
| 529 NSRect r = NSMakeRect(minX, NSMinY(locationFrame), maxX - minX, 0); | 530 NSRect r = NSMakeRect(minX, NSMinY(locationFrame), maxX - minX, |
| 530 return gfx::Rect(NSRectToCGRect([[self view] convertRect:r toView:nil])); | 531 NSHeight(locationFrame)); |
| 532 gfx::Rect stack_bounds( |
| 533 NSRectToCGRect([[self view] convertRect:r toView:nil])); |
| 534 // Inset the bounds to just inside the visible edges (see comment above). |
| 535 stack_bounds.Inset(kLocationStackEdgeWidth, 0); |
| 536 return stack_bounds; |
| 531 } | 537 } |
| 532 @end | 538 @end |
| OLD | NEW |