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

Side by Side Diff: chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm

Issue 1009613002: [Toolbar UI Mac] Fix omnibox minimum width (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Avi's Created 5 years, 9 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/cocoa/toolbar/toolbar_controller.h" 5 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/mac/bundle_locations.h" 9 #include "base/mac/bundle_locations.h"
10 #include "base/mac/foundation_util.h" 10 #include "base/mac/foundation_util.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 // in Toolbar.xib: the height of the toolbar (35) minus the height of the child 74 // in Toolbar.xib: the height of the toolbar (35) minus the height of the child
75 // elements (29) minus the y-origin of the elements (4). 75 // elements (29) minus the y-origin of the elements (4).
76 const CGFloat kToolbarElementTopPadding = 2.0; 76 const CGFloat kToolbarElementTopPadding = 2.0;
77 77
78 // The minimum width of the location bar in pixels. 78 // The minimum width of the location bar in pixels.
79 const CGFloat kMinimumLocationBarWidth = 100.0; 79 const CGFloat kMinimumLocationBarWidth = 100.0;
80 80
81 // The amount of left padding that the wrench menu should have. 81 // The amount of left padding that the wrench menu should have.
82 const CGFloat kWrenchMenuLeftPadding = 3.0; 82 const CGFloat kWrenchMenuLeftPadding = 3.0;
83 83
84 class BrowserActionsContainerDelegate :
85 public BrowserActionsContainerViewSizeDelegate {
86 public:
87 BrowserActionsContainerDelegate(
88 AutocompleteTextField* location_bar,
89 BrowserActionsContainerView* browser_actions_container_view);
90 ~BrowserActionsContainerDelegate() override;
91
92 private:
93 // BrowserActionsContainerSizeDelegate:
94 CGFloat GetMaxAllowedWidth() override;
95
96 AutocompleteTextField* location_bar_;
97 BrowserActionsContainerView* browser_actions_container_;
98
99 DISALLOW_COPY_AND_ASSIGN(BrowserActionsContainerDelegate);
100 };
101
102 BrowserActionsContainerDelegate::BrowserActionsContainerDelegate(
103 AutocompleteTextField* location_bar,
104 BrowserActionsContainerView* browser_actions_container_view)
105 : location_bar_(location_bar),
106 browser_actions_container_(browser_actions_container_view) {
107 [browser_actions_container_ setDelegate:this];
108 }
109
110 BrowserActionsContainerDelegate::~BrowserActionsContainerDelegate() {
111 [browser_actions_container_ setDelegate:nil];
112 }
113
114 CGFloat BrowserActionsContainerDelegate::GetMaxAllowedWidth() {
115 CGFloat location_bar_flex =
116 NSWidth([location_bar_ frame]) - kMinimumLocationBarWidth;
117 return NSWidth([browser_actions_container_ frame]) + location_bar_flex;
118 }
119
84 } // namespace 120 } // namespace
85 121
86 @interface ToolbarController() 122 @interface ToolbarController()
87 @property(assign, nonatomic) Browser* browser; 123 @property(assign, nonatomic) Browser* browser;
88 - (void)addAccessibilityDescriptions; 124 - (void)addAccessibilityDescriptions;
89 - (void)initCommandStatus:(CommandUpdater*)commands; 125 - (void)initCommandStatus:(CommandUpdater*)commands;
90 - (void)prefChanged:(const std::string&)prefName; 126 - (void)prefChanged:(const std::string&)prefName;
91 - (BackgroundGradientView*)backgroundGradientView; 127 - (BackgroundGradientView*)backgroundGradientView;
92 - (void)toolbarFrameChanged; 128 - (void)toolbarFrameChanged;
93 - (void)pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:(BOOL)animate; 129 - (void)pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:(BOOL)animate;
94 - (void)maintainMinimumLocationBarWidth; 130 - (void)maintainMinimumLocationBarWidth;
95 - (void)adjustBrowserActionsContainerForNewWindow:(NSNotification*)notification; 131 - (void)adjustBrowserActionsContainerForNewWindow:(NSNotification*)notification;
96 - (void)browserActionsContainerWillDrag:(NSNotification*)notification;
97 - (void)browserActionsContainerDragged:(NSNotification*)notification; 132 - (void)browserActionsContainerDragged:(NSNotification*)notification;
98 - (void)browserActionsVisibilityChanged:(NSNotification*)notification; 133 - (void)browserActionsVisibilityChanged:(NSNotification*)notification;
99 - (void)browserActionsContainerWillAnimate:(NSNotification*)notification; 134 - (void)browserActionsContainerWillAnimate:(NSNotification*)notification;
100 - (void)adjustLocationSizeBy:(CGFloat)dX animate:(BOOL)animate; 135 - (void)adjustLocationSizeBy:(CGFloat)dX animate:(BOOL)animate;
101 - (void)updateWrenchButtonSeverity:(WrenchIconPainter::Severity)severity 136 - (void)updateWrenchButtonSeverity:(WrenchIconPainter::Severity)severity
102 animate:(BOOL)animate; 137 animate:(BOOL)animate;
103 @end 138 @end
104 139
105 namespace ToolbarControllerInternal { 140 namespace ToolbarControllerInternal {
106 141
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 profile:profile 212 profile:profile
178 browser:browser 213 browser:browser
179 resizeDelegate:resizeDelegate 214 resizeDelegate:resizeDelegate
180 nibFileNamed:@"Toolbar"])) { 215 nibFileNamed:@"Toolbar"])) {
181 } 216 }
182 return self; 217 return self;
183 } 218 }
184 219
185 220
186 - (void)dealloc { 221 - (void)dealloc {
222 browserActionsContainerDelegate_.reset();
223
187 // Unset ViewIDs of toolbar elements. 224 // Unset ViewIDs of toolbar elements.
188 // ViewIDs of |toolbarView|, |reloadButton_|, |locationBar_| and 225 // ViewIDs of |toolbarView|, |reloadButton_|, |locationBar_| and
189 // |browserActionsContainerView_| are handled by themselves. 226 // |browserActionsContainerView_| are handled by themselves.
190 view_id_util::UnsetID(backButton_); 227 view_id_util::UnsetID(backButton_);
191 view_id_util::UnsetID(forwardButton_); 228 view_id_util::UnsetID(forwardButton_);
192 view_id_util::UnsetID(homeButton_); 229 view_id_util::UnsetID(homeButton_);
193 view_id_util::UnsetID(wrenchButton_); 230 view_id_util::UnsetID(wrenchButton_);
194 231
195 // Make sure any code in the base class which assumes [self view] is 232 // Make sure any code in the base class which assumes [self view] is
196 // the "parent" view continues to work. 233 // the "parent" view continues to work.
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 } 619 }
583 620
584 - (void)prefChanged:(const std::string&)prefName { 621 - (void)prefChanged:(const std::string&)prefName {
585 if (prefName == prefs::kShowHomeButton) { 622 if (prefName == prefs::kShowHomeButton) {
586 [self showOptionalHomeButton]; 623 [self showOptionalHomeButton];
587 } 624 }
588 } 625 }
589 626
590 - (void)createBrowserActionButtons { 627 - (void)createBrowserActionButtons {
591 if (!browserActionsController_.get()) { 628 if (!browserActionsController_.get()) {
629 browserActionsContainerDelegate_.reset(
630 new BrowserActionsContainerDelegate(locationBar_,
631 browserActionsContainerView_));
592 browserActionsController_.reset([[BrowserActionsController alloc] 632 browserActionsController_.reset([[BrowserActionsController alloc]
593 initWithBrowser:browser_ 633 initWithBrowser:browser_
594 containerView:browserActionsContainerView_ 634 containerView:browserActionsContainerView_
595 mainController:nil]); 635 mainController:nil]);
596 [[NSNotificationCenter defaultCenter] 636 [[NSNotificationCenter defaultCenter]
597 addObserver:self 637 addObserver:self
598 selector:@selector(browserActionsContainerWillDrag:)
599 name:kBrowserActionGrippyWillDragNotification
600 object:browserActionsContainerView_];
601 [[NSNotificationCenter defaultCenter]
602 addObserver:self
603 selector:@selector(browserActionsContainerDragged:) 638 selector:@selector(browserActionsContainerDragged:)
604 name:kBrowserActionGrippyDraggingNotification 639 name:kBrowserActionGrippyDraggingNotification
605 object:browserActionsContainerView_]; 640 object:browserActionsContainerView_];
606 [[NSNotificationCenter defaultCenter] 641 [[NSNotificationCenter defaultCenter]
607 addObserver:self 642 addObserver:self
608 selector:@selector(browserActionsVisibilityChanged:) 643 selector:@selector(browserActionsVisibilityChanged:)
609 name:kBrowserActionVisibilityChangedNotification 644 name:kBrowserActionVisibilityChangedNotification
610 object:browserActionsController_]; 645 object:browserActionsController_];
611 [[NSNotificationCenter defaultCenter] 646 [[NSNotificationCenter defaultCenter]
612 addObserver:self 647 addObserver:self
(...skipping 17 matching lines...) Expand all
630 [self toolbarFrameChanged]; 665 [self toolbarFrameChanged];
631 [[NSNotificationCenter defaultCenter] 666 [[NSNotificationCenter defaultCenter]
632 removeObserver:self 667 removeObserver:self
633 name:NSWindowDidBecomeKeyNotification 668 name:NSWindowDidBecomeKeyNotification
634 object:[[self view] window]]; 669 object:[[self view] window]];
635 } 670 }
636 671
637 - (void)browserActionsContainerDragged:(NSNotification*)notification { 672 - (void)browserActionsContainerDragged:(NSNotification*)notification {
638 CGFloat locationBarWidth = NSWidth([locationBar_ frame]); 673 CGFloat locationBarWidth = NSWidth([locationBar_ frame]);
639 locationBarAtMinSize_ = locationBarWidth <= kMinimumLocationBarWidth; 674 locationBarAtMinSize_ = locationBarWidth <= kMinimumLocationBarWidth;
640 [browserActionsContainerView_ setCanDragLeft:!locationBarAtMinSize_];
641 [browserActionsContainerView_ setGrippyPinned:locationBarAtMinSize_];
642 [self adjustLocationSizeBy: 675 [self adjustLocationSizeBy:
643 [browserActionsContainerView_ resizeDeltaX] animate:NO]; 676 [browserActionsContainerView_ resizeDeltaX] animate:NO];
644 } 677 }
645 678
646 - (void)browserActionsContainerWillDrag:(NSNotification*)notification {
647 CGFloat deltaX = [[notification.userInfo objectForKey:kTranslationWithDelta]
648 floatValue];
649 CGFloat locationBarWidth = NSWidth([locationBar_ frame]);
650 BOOL locationBarWillBeAtMinSize =
651 (locationBarWidth + deltaX) <= kMinimumLocationBarWidth;
652
653 // Prevent the |browserActionsContainerView_| from dragging if the width of
654 // location bar will reach the minimum.
655 [browserActionsContainerView_ setCanDragLeft:!locationBarWillBeAtMinSize];
656 }
657
658 - (void)browserActionsVisibilityChanged:(NSNotification*)notification { 679 - (void)browserActionsVisibilityChanged:(NSNotification*)notification {
659 [self pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:NO]; 680 [self pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:NO];
660 } 681 }
661 682
662 - (void)browserActionsContainerWillAnimate:(NSNotification*)notification { 683 - (void)browserActionsContainerWillAnimate:(NSNotification*)notification {
663 [self pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:YES]; 684 [self pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:YES];
664 } 685 }
665 686
666 - (void)pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:(BOOL)animate { 687 - (void)pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:(BOOL)animate {
667 CGFloat locationBarXPos = NSMaxX([locationBar_ frame]); 688 CGFloat locationBarXPos = NSMaxX([locationBar_ frame]);
668 CGFloat leftDistance; 689 CGFloat leftDistance = 0.0;
669 690
670 if ([browserActionsContainerView_ isHidden]) { 691 if ([browserActionsContainerView_ isHidden]) {
671 CGFloat edgeXPos = [wrenchButton_ frame].origin.x; 692 CGFloat edgeXPos = [wrenchButton_ frame].origin.x;
672 leftDistance = edgeXPos - locationBarXPos - kWrenchMenuLeftPadding; 693 leftDistance = edgeXPos - locationBarXPos - kWrenchMenuLeftPadding;
673 } else { 694 } else {
674 leftDistance = NSMinX([browserActionsContainerView_ animationEndFrame]) - 695 leftDistance = NSMinX([browserActionsContainerView_ animationEndFrame]) -
675 locationBarXPos; 696 locationBarXPos;
676 } 697 }
677 if (leftDistance != 0.0) 698 if (leftDistance != 0.0)
678 [self adjustLocationSizeBy:leftDistance animate:animate]; 699 [self adjustLocationSizeBy:leftDistance animate:animate];
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
866 - (void)hideDropURLsIndicatorInView:(NSView*)view { 887 - (void)hideDropURLsIndicatorInView:(NSView*)view {
867 // Do nothing. 888 // Do nothing.
868 } 889 }
869 890
870 // (URLDropTargetController protocol) 891 // (URLDropTargetController protocol)
871 - (BOOL)isUnsupportedDropData:(id<NSDraggingInfo>)info { 892 - (BOOL)isUnsupportedDropData:(id<NSDraggingInfo>)info {
872 return drag_util::IsUnsupportedDropData(profile_, info); 893 return drag_util::IsUnsupportedDropData(profile_, info);
873 } 894 }
874 895
875 @end 896 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698