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/cocoa/bookmark_bar_folder_controller.mm

Issue 1709004: size --> cellSize adjustment (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years, 8 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 | Annotate | Revision Log
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 #import "chrome/browser/cocoa/bookmark_bar_folder_controller.h" 5 #import "chrome/browser/cocoa/bookmark_bar_folder_controller.h"
6 #include "base/mac_util.h" 6 #include "base/mac_util.h"
7 #include "base/sys_string_conversions.h" 7 #include "base/sys_string_conversions.h"
8 #include "chrome/browser/bookmarks/bookmark_model.h" 8 #include "chrome/browser/bookmarks/bookmark_model.h"
9 #include "chrome/browser/bookmarks/bookmark_utils.h" 9 #include "chrome/browser/bookmarks/bookmark_utils.h"
10 #import "chrome/browser/browser_theme_provider.h" 10 #import "chrome/browser/browser_theme_provider.h"
(...skipping 11 matching lines...) Expand all
22 22
23 // Frequency of the scrolling timer in seconds. 23 // Frequency of the scrolling timer in seconds.
24 const NSTimeInterval kBookmarkBarFolderScrollInterval = 0.2; 24 const NSTimeInterval kBookmarkBarFolderScrollInterval = 0.2;
25 25
26 // Amount to scroll by per timer fire. We scroll rather slowly; to 26 // Amount to scroll by per timer fire. We scroll rather slowly; to
27 // accomodate we do 2 at a time. 27 // accomodate we do 2 at a time.
28 const CGFloat kBookmarkBarFolderScrollAmount = 28 const CGFloat kBookmarkBarFolderScrollAmount =
29 2 * (bookmarks::kBookmarkButtonHeight + 29 2 * (bookmarks::kBookmarkButtonHeight +
30 bookmarks::kBookmarkVerticalPadding); 30 bookmarks::kBookmarkVerticalPadding);
31 31
32 // Amount to scroll for each scroll wheel delta.
33 const CGFloat kBookmarkBarFolderScrollWheelAmount =
34 1 * (bookmarks::kBookmarkButtonHeight +
35 bookmarks::kBookmarkVerticalPadding);
36
32 // When constraining a scrolling bookmark bar folder window to the 37 // When constraining a scrolling bookmark bar folder window to the
33 // screen, shrink the "constrain" by this much vertically. Currently 38 // screen, shrink the "constrain" by this much vertically. Currently
34 // this is 0.0 to avoid a problem with tracking areas leaving the 39 // this is 0.0 to avoid a problem with tracking areas leaving the
35 // window, but should probably be 8.0 or something. 40 // window, but should probably be 8.0 or something.
36 // TODO(jrg): http://crbug.com/36225 41 // TODO(jrg): http://crbug.com/36225
37 const CGFloat kScrollWindowVerticalMargin = 0.0; 42 const CGFloat kScrollWindowVerticalMargin = 0.0;
38 43
39 } // namespace 44 } // namespace
40 45
41 @interface BookmarkBarFolderController(Private) 46 @interface BookmarkBarFolderController(Private)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 [super dealloc]; 83 [super dealloc];
79 } 84 }
80 85
81 // Overriden from NSWindowController to call childFolderWillShow: before showing 86 // Overriden from NSWindowController to call childFolderWillShow: before showing
82 // the window. 87 // the window.
83 - (void)showWindow:(id)sender { 88 - (void)showWindow:(id)sender {
84 [parentController_ childFolderWillShow:self]; 89 [parentController_ childFolderWillShow:self];
85 [super showWindow:sender]; 90 [super showWindow:sender];
86 } 91 }
87 92
88 - (NSCell*)cellForBookmarkNode:(const BookmarkNode*)child { 93 - (BookmarkButtonCell*)cellForBookmarkNode:(const BookmarkNode*)child {
89 NSImage* image = child ? [barController_ favIconForNode:child] : nil; 94 NSImage* image = child ? [barController_ favIconForNode:child] : nil;
90 NSMenu* menu = child ? child->is_folder() ? folderMenu_ : buttonMenu_ : nil; 95 NSMenu* menu = child ? child->is_folder() ? folderMenu_ : buttonMenu_ : nil;
91 BookmarkBarFolderButtonCell* cell = 96 BookmarkBarFolderButtonCell* cell =
92 [BookmarkBarFolderButtonCell buttonCellForNode:child 97 [BookmarkBarFolderButtonCell buttonCellForNode:child
93 contextMenu:menu 98 contextMenu:menu
94 cellText:nil 99 cellText:nil
95 cellImage:image]; 100 cellImage:image];
96 return cell; 101 return cell;
97 } 102 }
98 103
99 // Redirect to our logic shared with BookmarkBarController. 104 // Redirect to our logic shared with BookmarkBarController.
100 - (IBAction)openBookmarkFolderFromButton:(id)sender { 105 - (IBAction)openBookmarkFolderFromButton:(id)sender {
101 [folderTarget_ openBookmarkFolderFromButton:sender]; 106 [folderTarget_ openBookmarkFolderFromButton:sender];
102 } 107 }
103 108
104 // Create a bookmark button for the given node using frame. 109 // Create a bookmark button for the given node using frame.
105 // 110 //
106 // If |node| is NULL this is an "(empty)" button. 111 // If |node| is NULL this is an "(empty)" button.
107 // Does NOT add this button to our button list. 112 // Does NOT add this button to our button list.
108 // Returns an autoreleased button. 113 // Returns an autoreleased button.
109 // Adjusts the input frame width as appropriate. 114 // Adjusts the input frame width as appropriate.
110 // 115 //
111 // TODO(jrg): combine with addNodesToButtonList: code from 116 // TODO(jrg): combine with addNodesToButtonList: code from
112 // bookmark_bar_controller.mm, and generalize that to use both x and y 117 // bookmark_bar_controller.mm, and generalize that to use both x and y
113 // offsets. 118 // offsets.
114 // http://crbug.com/35966 119 // http://crbug.com/35966
115 - (BookmarkButton*)makeButtonForNode:(const BookmarkNode*)node 120 - (BookmarkButton*)makeButtonForNode:(const BookmarkNode*)node
116 frame:(NSRect)frame { 121 frame:(NSRect)frame {
117 NSCell* cell = [self cellForBookmarkNode:node]; 122 BookmarkButtonCell* cell = [self cellForBookmarkNode:node];
118 DCHECK(cell); 123 DCHECK(cell);
119 124
125 // We must decide if we draw the folder arrow before we ask the cell
126 // how big it needs to be.
127 if (node && node->is_folder()) {
128 // Warning when combining code with bookmark_bar_controller.mm:
129 // this call should NOT be made for the bar buttons; only for the
130 // subfolder buttons.
131 [cell setDrawFolderArrow:YES];
132 }
133
120 // The "+2" is needed because, sometimes, Cocoa is off by a tad when 134 // The "+2" is needed because, sometimes, Cocoa is off by a tad when
121 // returning the value it thinks it needs. 135 // returning the value it thinks it needs.
122 CGFloat desired = [cell cellSize].width + 2; 136 CGFloat desired = [cell cellSize].width + 2;
123 frame.size.width = std::min( 137 frame.size.width = std::min(
124 std::max(bookmarks::kBookmarkMenuButtonMinimumWidth, desired), 138 std::max(bookmarks::kBookmarkMenuButtonMinimumWidth, desired),
125 bookmarks::kBookmarkMenuButtonMaximumWidth); 139 bookmarks::kBookmarkMenuButtonMaximumWidth);
126 140
127 BookmarkButton* button = [[[BookmarkButton alloc] initWithFrame:frame] 141 BookmarkButton* button = [[[BookmarkButton alloc] initWithFrame:frame]
128 autorelease]; 142 autorelease];
129 DCHECK(button); 143 DCHECK(button);
(...skipping 10 matching lines...) Expand all
140 [button setAction:@selector(openBookmark:)]; 154 [button setAction:@selector(openBookmark:)];
141 // Add a tooltip. 155 // Add a tooltip.
142 NSString* title = base::SysWideToNSString(node->GetTitle()); 156 NSString* title = base::SysWideToNSString(node->GetTitle());
143 std::string urlString = node->GetURL().possibly_invalid_spec(); 157 std::string urlString = node->GetURL().possibly_invalid_spec();
144 NSString* tooltip = [NSString stringWithFormat:@"%@\n%s", title, 158 NSString* tooltip = [NSString stringWithFormat:@"%@\n%s", title,
145 urlString.c_str()]; 159 urlString.c_str()];
146 [button setToolTip:tooltip]; 160 [button setToolTip:tooltip];
147 } 161 }
148 } else { 162 } else {
149 [button setEnabled:NO]; 163 [button setEnabled:NO];
164 [button setBordered:NO];
150 } 165 }
151 return button; 166 return button;
152 } 167 }
153 168
154 // Exposed for testing. 169 // Exposed for testing.
155 - (NSView*)mainView { 170 - (NSView*)mainView {
156 return mainView_; 171 return mainView_;
157 } 172 }
158 173
159 - (BookmarkBarFolderController*)folderController { 174 - (BookmarkBarFolderController*)folderController {
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 if (delta) { 382 if (delta) {
368 // If we can, grow the window (up). 383 // If we can, grow the window (up).
369 if (NSHeight(windowFrame) < screenHeightMinusMargin) { 384 if (NSHeight(windowFrame) < screenHeightMinusMargin) {
370 CGFloat growAmount = delta; 385 CGFloat growAmount = delta;
371 // Don't scroll more than enough to "finish". 386 // Don't scroll more than enough to "finish".
372 if (scrollPosition.y < 0) 387 if (scrollPosition.y < 0)
373 growAmount += scrollPosition.y; 388 growAmount += scrollPosition.y;
374 windowFrame.size.height += growAmount; 389 windowFrame.size.height += growAmount;
375 windowFrame.size.height = std::min(NSHeight(windowFrame), 390 windowFrame.size.height = std::min(NSHeight(windowFrame),
376 screenHeightMinusMargin); 391 screenHeightMinusMargin);
377 [[self window] setFrame:windowFrame display:YES]; 392 // Don't allow scrolling to make the window smaller, ever. This
378 [self addOrUpdateScrollTracking]; 393 // conditional is important when processing scrollWheel events.
394 if (windowFrame.size.height > [[self window] frame].size.height) {
395 [[self window] setFrame:windowFrame display:YES];
396 [self addOrUpdateScrollTracking];
397 }
379 } 398 }
380 } 399 }
381 400
382 // If we're at either end, happiness. 401 // If we're at either end, happiness.
383 if ((scrollPosition.y <= 0) || 402 if ((scrollPosition.y <= 0) ||
384 ((scrollPosition.y + NSHeight(windowFrame) >= 403 ((scrollPosition.y + NSHeight(windowFrame) >=
385 NSHeight([mainView_ frame])) && 404 NSHeight([mainView_ frame])) &&
386 (windowFrame.size.height == screenHeightMinusMargin))) { 405 (windowFrame.size.height == screenHeightMinusMargin))) {
387 [self endScroll]; 406 [self endScroll];
388 407
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 819
801 - (NSArray*)buttons { 820 - (NSArray*)buttons {
802 return buttons_.get(); 821 return buttons_.get();
803 } 822 }
804 823
805 - (void)close { 824 - (void)close {
806 [folderController_ close]; 825 [folderController_ close];
807 [super close]; 826 [super close];
808 } 827 }
809 828
829 - (void)scrollWheel:(NSEvent *)theEvent {
830 if (scrollable_) {
831 // We go negative since an NSScrollView has a flipped coordinate frame.
832 CGFloat amt = kBookmarkBarFolderScrollWheelAmount * -[theEvent deltaY];
833 [self performOneScroll:amt];
834 }
835 }
836
810 #pragma mark Methods Forwarded to BookmarkBarController 837 #pragma mark Methods Forwarded to BookmarkBarController
811 838
812 - (IBAction)cutBookmark:(id)sender { 839 - (IBAction)cutBookmark:(id)sender {
813 [barController_ cutBookmark:sender]; 840 [barController_ cutBookmark:sender];
814 } 841 }
815 842
816 - (IBAction)copyBookmark:(id)sender { 843 - (IBAction)copyBookmark:(id)sender {
817 [barController_ cutBookmark:sender]; 844 [barController_ cutBookmark:sender];
818 } 845 }
819 846
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 } 885 }
859 886
860 - (IBAction)openBookmarkInNewForegroundTab:(id)sender { 887 - (IBAction)openBookmarkInNewForegroundTab:(id)sender {
861 [barController_ openBookmarkInNewForegroundTab:sender]; 888 [barController_ openBookmarkInNewForegroundTab:sender];
862 } 889 }
863 890
864 - (IBAction)openBookmarkInNewWindow:(id)sender { 891 - (IBAction)openBookmarkInNewWindow:(id)sender {
865 [barController_ openBookmarkInNewWindow:sender]; 892 [barController_ openBookmarkInNewWindow:sender];
866 } 893 }
867 894
895
868 @end // BookmarkBarFolderController 896 @end // BookmarkBarFolderController
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/bookmark_bar_folder_controller.h ('k') | chrome/browser/cocoa/bookmark_bar_folder_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698