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

Unified Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm

Issue 2751573002: [Mac] Refactor bookmark bar controller (Closed)
Patch Set: Restore unused button pool Created 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
index 4a0ef76af8fd63a1c480b931aae42591b363dd4b..bd82f03ffcdf6430c706f6654cb5246b46ea11db 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
@@ -37,6 +37,19 @@ const int kDefaultFontSize = 12;
}; // namespace
+@interface BookmarkButtonCell (Private)
+// Returns YES if the cell is the offTheSide button cell.
+- (BOOL)isOffTheSideButtonCell;
+- (void)configureBookmarkButtonCell;
+- (void)applyTextColor;
+// Returns the title the button cell displays. Note that a button cell can
+// have a title string assigned but it won't be visible if its image position
+// is NSImageOnly.
+- (NSString*)visibleTitle;
+// Returns the dictionary of attributes to associate with the button title.
+- (NSDictionary*)titleTextAttributes;
+@end
+
// TODO(lgrey): Bake setting the chevron image into this
// class instead of setting it externally.
@interface OffTheSideButtonCell : BookmarkButtonCell
@@ -65,19 +78,6 @@ const int kDefaultFontSize = 12;
@end
-@interface BookmarkButtonCell(Private)
-// Returns YES if the cell is the offTheSide button cell.
-- (BOOL)isOffTheSideButtonCell;
-- (void)configureBookmarkButtonCell;
-- (void)applyTextColor;
-// Returns the title the button cell displays. Note that a button cell can
-// have a title string assigned but it won't be visible if its image position
-// is NSImageOnly.
-- (NSString*)visibleTitle;
-// Returns the dictionary of attributes to associate with the button title.
-- (NSDictionary*)titleTextAttributes;
-@end
-
@implementation BookmarkButtonCell
@@ -112,6 +112,22 @@ const int kDefaultFontSize = 12;
return [[[OffTheSideButtonCell alloc] init] autorelease];
}
++ (CGFloat)cellWidthForNode:(const bookmarks::BookmarkNode*)node
+ image:(NSImage*)image {
+ NSString* title =
+ [self cleanTitle:base::SysUTF16ToNSString(node->GetTitle())];
+ CGFloat width = kIconLeftPadding + [image size].width;
+ if ([title length] > 0) {
+ CGSize titleSize = [title sizeWithAttributes:@{
+ NSParagraphStyleAttributeName : [self paragraphStyleForBookmarkBarCell]
+ }];
+ width += kIconTextSpacer + std::ceil(titleSize.width) + kTextRightPadding;
+ } else {
+ width += kIconLeftPadding;
+ }
+ return width;
+}
+
- (id)initForNode:(const BookmarkNode*)node
text:(NSString*)text
image:(NSImage*)image
@@ -120,7 +136,7 @@ const int kDefaultFontSize = 12;
menuController_ = menuController;
[self configureBookmarkButtonCell];
[self setTextColor:[NSColor blackColor]];
- [self setBookmarkNode:node];
+ [self setBookmarkNode:node image:image];
// When opening a bookmark folder, the default behavior is that the
// favicon is greyed when menu item is hovered with the mouse cursor.
// When using NSNoCellMask, the favicon won't be greyed when menu item
@@ -130,15 +146,6 @@ const int kDefaultFontSize = 12;
// It makes the behavior of the bookmark folder consistent with hovering
// on the bookmark bar.
[self setHighlightsBy:NSNoCellMask];
-
- if (node) {
- NSString* title = base::SysUTF16ToNSString(node->GetTitle());
- [self setBookmarkCellText:title image:image];
- } else {
- [self setEmpty:YES];
- [self setBookmarkCellText:l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU)
- image:nil];
- }
}
return self;
@@ -185,7 +192,7 @@ const int kDefaultFontSize = 12;
[self setShowsBorderOnlyWhileMouseInside:YES];
[self setControlSize:NSSmallControlSize];
[self setAlignment:NSLeftTextAlignment];
- [self setFont:[NSFont systemFontOfSize:kDefaultFontSize]];
+ [self setFont:[[self class] fontForBookmarkBarCell]];
[self setBordered:NO];
[self setBezeled:NO];
[self setWraps:NO];
@@ -220,12 +227,8 @@ const int kDefaultFontSize = 12;
- (void)setBookmarkCellText:(NSString*)title
image:(NSImage*)image {
- title = [title stringByReplacingOccurrencesOfString:@"\n"
- withString:@" "];
- title = [title stringByReplacingOccurrencesOfString:@"\r"
- withString:@" "];
-
- if ([title length]) {
+ title = [[self class] cleanTitle:title];
+ if ([title length] && ![self isOffTheSideButtonCell]) {
[self setImagePosition:NSImageLeft];
[self setTitle:title];
} else if ([self isFolderButtonCell]) {
@@ -245,7 +248,19 @@ const int kDefaultFontSize = 12;
}
- (void)setBookmarkNode:(const BookmarkNode*)node {
+ [self setBookmarkNode:node image:nil];
+}
+
+- (void)setBookmarkNode:(const BookmarkNode*)node image:(NSImage*)image {
[self setRepresentedObject:[NSValue valueWithPointer:node]];
+ if (node) {
+ NSString* title = base::SysUTF16ToNSString(node->GetTitle());
+ [self setBookmarkCellText:title image:image];
+ } else {
+ [self setEmpty:YES];
+ [self setBookmarkCellText:l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU)
+ image:nil];
+ }
}
- (const BookmarkNode*)bookmarkNode {
@@ -315,10 +330,7 @@ const int kDefaultFontSize = 12;
}
- (NSDictionary*)titleTextAttributes {
- base::scoped_nsobject<NSMutableParagraphStyle> style(
- [NSMutableParagraphStyle new]);
- [style setAlignment:NSNaturalTextAlignment];
- [style setLineBreakMode:NSLineBreakByTruncatingTail];
+ NSParagraphStyle* style = [[self class] paragraphStyleForBookmarkBarCell];
NSColor* textColor = textColor_.get();
if (!textColor) {
textColor = [NSColor blackColor];
@@ -332,10 +344,10 @@ const int kDefaultFontSize = 12;
}
return @{
- NSFontAttributeName : theFont,
- NSForegroundColorAttributeName : textColor,
- NSParagraphStyleAttributeName : style.get(),
- NSKernAttributeName : [NSNumber numberWithFloat:0.2]
+ NSFontAttributeName : theFont,
+ NSForegroundColorAttributeName : textColor,
+ NSParagraphStyleAttributeName : style,
+ NSKernAttributeName : [NSNumber numberWithFloat:0.2]
};
}
@@ -441,5 +453,23 @@ const int kDefaultFontSize = 12;
return 0.0;
}
++ (NSFont*)fontForBookmarkBarCell {
Elly Fong-Jones 2017/03/23 15:40:22 I like this pattern of breaking sorta-constants ou
+ return [NSFont systemFontOfSize:kDefaultFontSize];
+}
+
++ (NSParagraphStyle*)paragraphStyleForBookmarkBarCell {
+ NSMutableParagraphStyle* style = [[NSMutableParagraphStyle alloc] init];
+ [style setAlignment:NSNaturalTextAlignment];
+ [style setLineBreakMode:NSLineBreakByTruncatingTail];
+ return [style autorelease];
+}
+
+// Returns |title| with newlines and line feeds replaced with
+// spaces.
++ (NSString*)cleanTitle:(NSString*)title {
+ title = [title stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
+ title = [title stringByReplacingOccurrencesOfString:@"\r" withString:@" "];
+ return title;
+}
@end

Powered by Google App Engine
This is Rietveld 408576698