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

Side by Side Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm

Issue 7326043: The text color for BookmarkButton sometimes doesn't get updated. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Added comment. Moved applyTextColor to Private protocol. Created 9 years, 5 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
« no previous file with comments | « chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/bookmarks/bookmark_button_cell.h" 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/sys_string_conversions.h" 8 #include "base/sys_string_conversions.h"
9 #import "chrome/browser/bookmarks/bookmark_model.h" 9 #import "chrome/browser/bookmarks/bookmark_model.h"
10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" 10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h"
11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu.h" 11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu.h"
12 #import "chrome/browser/ui/cocoa/image_utils.h" 12 #import "chrome/browser/ui/cocoa/image_utils.h"
13 #include "content/browser/user_metrics.h" 13 #include "content/browser/user_metrics.h"
14 #include "grit/generated_resources.h" 14 #include "grit/generated_resources.h"
15 #include "ui/base/l10n/l10n_util_mac.h" 15 #include "ui/base/l10n/l10n_util_mac.h"
16 #include "ui/gfx/mac/nsimage_cache.h" 16 #include "ui/gfx/mac/nsimage_cache.h"
17 17
18 18
19 @interface BookmarkButtonCell(Private) 19 @interface BookmarkButtonCell(Private)
20 - (void)configureBookmarkButtonCell; 20 - (void)configureBookmarkButtonCell;
21 - (void)applyTextColor;
21 @end 22 @end
22 23
23 24
24 @implementation BookmarkButtonCell 25 @implementation BookmarkButtonCell
25 26
26 @synthesize startingChildIndex = startingChildIndex_; 27 @synthesize startingChildIndex = startingChildIndex_;
27 @synthesize drawFolderArrow = drawFolderArrow_; 28 @synthesize drawFolderArrow = drawFolderArrow_;
28 29
29 + (id)buttonCellForNode:(const BookmarkNode*)node 30 + (id)buttonCellForNode:(const BookmarkNode*)node
30 contextMenu:(NSMenu*)contextMenu 31 contextMenu:(NSMenu*)contextMenu
31 cellText:(NSString*)cellText 32 cellText:(NSString*)cellText
32 cellImage:(NSImage*)cellImage { 33 cellImage:(NSImage*)cellImage {
33 id buttonCell = 34 id buttonCell =
34 [[[BookmarkButtonCell alloc] initForNode:node 35 [[[BookmarkButtonCell alloc] initForNode:node
35 contextMenu:contextMenu 36 contextMenu:contextMenu
36 cellText:cellText 37 cellText:cellText
37 cellImage:cellImage] 38 cellImage:cellImage]
38 autorelease]; 39 autorelease];
39 return buttonCell; 40 return buttonCell;
40 } 41 }
41 42
42 - (id)initForNode:(const BookmarkNode*)node 43 - (id)initForNode:(const BookmarkNode*)node
43 contextMenu:(NSMenu*)contextMenu 44 contextMenu:(NSMenu*)contextMenu
44 cellText:(NSString*)cellText 45 cellText:(NSString*)cellText
45 cellImage:(NSImage*)cellImage { 46 cellImage:(NSImage*)cellImage {
46 if ((self = [super initTextCell:cellText])) { 47 if ((self = [super initTextCell:cellText])) {
47 [self configureBookmarkButtonCell]; 48 [self configureBookmarkButtonCell];
John Grabowski 2011/07/12 02:15:38 Minor nit: we now have 3 method calls with blank l
48 49
50 [self setTextColor:[NSColor redColor]];
51
49 [self setBookmarkNode:node]; 52 [self setBookmarkNode:node];
50 53
51 if (node) { 54 if (node) {
52 NSString* title = base::SysUTF16ToNSString(node->GetTitle()); 55 NSString* title = base::SysUTF16ToNSString(node->GetTitle());
53 [self setBookmarkCellText:title image:cellImage]; 56 [self setBookmarkCellText:title image:cellImage];
54 [self setMenu:contextMenu]; 57 [self setMenu:contextMenu];
55 } else { 58 } else {
56 [self setEmpty:YES]; 59 [self setEmpty:YES];
57 [self setBookmarkCellText:l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU) 60 [self setBookmarkCellText:l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU)
58 image:nil]; 61 image:nil];
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 UserMetrics::RecordAction(UserMetricsAction("BookmarkBarFolder_CtxMenu")); 156 UserMetrics::RecordAction(UserMetricsAction("BookmarkBarFolder_CtxMenu"));
154 } else { 157 } else {
155 UserMetrics::RecordAction(UserMetricsAction("BookmarkBar_CtxMenu")); 158 UserMetrics::RecordAction(UserMetricsAction("BookmarkBar_CtxMenu"));
156 } 159 }
157 160
158 [menu setRepresentedObject:[NSNumber numberWithLongLong:node->id()]]; 161 [menu setRepresentedObject:[NSNumber numberWithLongLong:node->id()]];
159 162
160 return menu; 163 return menu;
161 } 164 }
162 165
163 // Unfortunately, NSCell doesn't already have something like this. 166 - (void)setTitle:(NSString*)title {
164 // TODO(jrg): consider placing in GTM. 167 if ([[self title] isEqualTo:title])
168 return;
169 [super setTitle:title];
170 [self applyTextColor];
171 }
172
165 - (void)setTextColor:(NSColor*)color { 173 - (void)setTextColor:(NSColor*)color {
174 if ([textColor_ isEqualTo:color])
175 return;
176 textColor_.reset([color copy]);
177 [self applyTextColor];
178 }
166 179
167 // We can't properly set the cell's text color without a control. 180 - (void)applyTextColor {
John Grabowski 2011/07/12 02:15:38 Add comment in code explaining why this is here.
168 // In theory we could just save the next for later and wait until
169 // the cell is moved to a control, but there is no obvious way to
170 // accomplish that (e.g. no "cellDidMoveToControl" notification.)
171 DCHECK([self controlView]);
172
173 scoped_nsobject<NSMutableParagraphStyle> style([NSMutableParagraphStyle new]); 181 scoped_nsobject<NSMutableParagraphStyle> style([NSMutableParagraphStyle new]);
174 [style setAlignment:NSLeftTextAlignment]; 182 [style setAlignment:NSLeftTextAlignment];
175 NSDictionary* dict = [NSDictionary 183 NSDictionary* dict = [NSDictionary
176 dictionaryWithObjectsAndKeys:color, 184 dictionaryWithObjectsAndKeys:textColor_,
177 NSForegroundColorAttributeName, 185 NSForegroundColorAttributeName,
178 [self font], NSFontAttributeName, 186 [self font], NSFontAttributeName,
179 style.get(), NSParagraphStyleAttributeName, 187 style.get(), NSParagraphStyleAttributeName,
180 nil]; 188 nil];
181 scoped_nsobject<NSAttributedString> ats([[NSAttributedString alloc] 189 scoped_nsobject<NSAttributedString> ats([[NSAttributedString alloc]
182 initWithString:[self title] 190 initWithString:[self title]
183 attributes:dict]); 191 attributes:dict]);
184 NSButton* button = static_cast<NSButton*>([self controlView]); 192 [self setAttributedTitle:ats.get()];
185 if (button) {
186 DCHECK([button isKindOfClass:[NSButton class]]);
187 [button setAttributedTitle:ats.get()];
188 }
189 } 193 }
190 194
191 // To implement "hover open a bookmark button to open the folder" 195 // To implement "hover open a bookmark button to open the folder"
192 // which feels like menus, we override NSButtonCell's mouseEntered: 196 // which feels like menus, we override NSButtonCell's mouseEntered:
193 // and mouseExited:, then and pass them along to our owning control. 197 // and mouseExited:, then and pass them along to our owning control.
194 // Note: as verified in a debugger, mouseEntered: does NOT increase 198 // Note: as verified in a debugger, mouseEntered: does NOT increase
195 // the retainCount of the cell or its owning control. 199 // the retainCount of the cell or its owning control.
196 - (void)mouseEntered:(NSEvent*)event { 200 - (void)mouseEntered:(NSEvent*)event {
197 [super mouseEntered:event]; 201 [super mouseEntered:event];
198 [[self controlView] mouseEntered:event]; 202 [[self controlView] mouseEntered:event];
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 NSRect drawRect = NSOffsetRect(imageRect, dX, dY); 246 NSRect drawRect = NSOffsetRect(imageRect, dX, dY);
243 [arrowImage_ drawInRect:drawRect 247 [arrowImage_ drawInRect:drawRect
244 fromRect:imageRect 248 fromRect:imageRect
245 operation:NSCompositeSourceOver 249 operation:NSCompositeSourceOver
246 fraction:[self isEnabled] ? 1.0 : 0.5 250 fraction:[self isEnabled] ? 1.0 : 0.5
247 neverFlipped:YES]; 251 neverFlipped:YES];
248 } 252 }
249 } 253 }
250 254
251 @end 255 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698