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

Unified Diff: chrome/browser/cocoa/hyperlink_button_cell.mm

Issue 248019: [Mac] Create HyperlinkButtonCell and make the "Get themes" button an instance (Closed)
Patch Set: Add unit test Created 11 years, 3 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/cocoa/hyperlink_button_cell.mm
diff --git a/chrome/browser/cocoa/hyperlink_button_cell.mm b/chrome/browser/cocoa/hyperlink_button_cell.mm
new file mode 100644
index 0000000000000000000000000000000000000000..8493a8cc634741a6d78addcab8486385369e248d
--- /dev/null
+++ b/chrome/browser/cocoa/hyperlink_button_cell.mm
@@ -0,0 +1,105 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/cocoa/hyperlink_button_cell.h"
+
+@interface HyperlinkButtonCell (Private)
+- (NSDictionary*)linkAttributres;
+- (void)customizeButtonCell;
+@end
+
+@implementation HyperlinkButtonCell
+@dynamic textColor;
+
+// Designated initializer.
+- (id)init {
+ if ((self = [super init])) {
+ [self customizeButtonCell];
+ }
+ return self;
+}
+
+// Initializer called when the cell is loaded from the NIB.
+- (id)initWithCoder:(NSCoder*)aDecoder {
+ if ((self = [super initWithCoder:aDecoder])) {
+ [self customizeButtonCell];
+ }
+ return self;
+}
+
+// Initializer for code-based creation.
+- (id)initTextCell:(NSString*)title {
+ if ((self = [super initTextCell:title])) {
+ [self customizeButtonCell];
+ }
+ return self;
+}
+
+// Because an NSButtonCell has multiple initializers, this method performs the
+// common cell customization code.
+- (void)customizeButtonCell {
+ [self setBordered:NO];
+ [self setTextColor:[NSColor blueColor]];
+
+ CGFloat fontSize = [NSFont systemFontSizeForControlSize:[self controlSize]];
+ NSFont* font = [NSFont controlContentFontOfSize:fontSize];
+ [self setFont:font];
+
+ // Do not change button appearance when we are pushed.
+ // TODO(rsesek): Change text color to red?
+ [self setHighlightsBy:NSNoCellMask];
+
+ // We need to set this so that we can override |-mouseEntered:| and
+ // |-mouseExited:| to change the cursor style on hover states.
+ [self setShowsBorderOnlyWhileMouseInside:YES];
+}
+
+// Creates the NSDictionary of attributes for the attributed string.
+- (NSDictionary*)linkAttributes {
+ NSUInteger underlineMask = NSUnderlinePatternSolid | NSUnderlineStyleSingle;
+ NSMutableParagraphStyle* paragraphStyle =
+ [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
+ [paragraphStyle setAlignment:[self alignment]];
+
+ return [NSDictionary dictionaryWithObjectsAndKeys:
+ [self textColor], NSForegroundColorAttributeName,
+ [NSNumber numberWithInt:underlineMask], NSUnderlineStyleAttributeName,
+ [self font], NSFontAttributeName,
+ [NSCursor pointingHandCursor], NSCursorAttributeName,
+ paragraphStyle, NSParagraphStyleAttributeName,
+ nil
+ ];
+}
+
+// Override the drawing point for the cell so that the custom style attributes
+// can always be applied.
+- (NSRect)drawTitle:(NSAttributedString*)title
+ withFrame:(NSRect)frame
+ inView:(NSView*)controlView {
+ NSAttributedString* attrString =
+ [[NSAttributedString alloc] initWithString:[title string]
+ attributes:[self linkAttributes]];
+ [attrString autorelease];
+ return [super drawTitle:attrString withFrame:frame inView:controlView];
+}
+
+// Override the default behavior to draw the border. Instead, change the cursor.
+- (void)mouseEntered:(NSEvent*)event {
+ [[NSCursor pointingHandCursor] push];
+}
+
+- (void)mouseExited:(NSEvent*)event {
+ [NSCursor pop];
+}
+
+// Setters and getters.
+- (NSColor*)textColor {
+ return textColor_.get();
+}
+
+- (void)setTextColor:(NSColor*)color {
+ textColor_.reset(color);
+}
+
+@end
« no previous file with comments | « chrome/browser/cocoa/hyperlink_button_cell.h ('k') | chrome/browser/cocoa/hyperlink_button_cell_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698