OLD | NEW |
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 "ui/base/cocoa/controls/hyperlink_text_view.h" | 5 #import "ui/base/cocoa/controls/hyperlink_text_view.h" |
6 | 6 |
| 7 #include "base/logging.h" |
7 #include "base/mac/scoped_nsobject.h" | 8 #include "base/mac/scoped_nsobject.h" |
8 #include "ui/base/cocoa/nsview_additions.h" | 9 #include "ui/base/cocoa/nsview_additions.h" |
9 | 10 |
10 // The baseline shift for text in the NSTextView. | 11 // The baseline shift for text in the NSTextView. |
11 const float kTextBaselineShift = -1.0; | 12 const float kTextBaselineShift = -1.0; |
12 | 13 |
13 @interface HyperlinkTextView(Private) | 14 @interface HyperlinkTextView(Private) |
14 // Initialize the NSTextView properties for this subclass. | 15 // Initialize the NSTextView properties for this subclass. |
15 - (void)configureTextView; | 16 - (void)configureTextView; |
16 | 17 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 // Create the attributed string for the message. | 116 // Create the attributed string for the message. |
116 base::scoped_nsobject<NSAttributedString> attributedMessage( | 117 base::scoped_nsobject<NSAttributedString> attributedMessage( |
117 [[NSMutableAttributedString alloc] initWithString:message | 118 [[NSMutableAttributedString alloc] initWithString:message |
118 attributes:attributes]); | 119 attributes:attributes]); |
119 | 120 |
120 // Update the text view with the new text. | 121 // Update the text view with the new text. |
121 [[self textStorage] setAttributedString:attributedMessage]; | 122 [[self textStorage] setAttributedString:attributedMessage]; |
122 } | 123 } |
123 | 124 |
124 - (void)addLinkRange:(NSRange)range | 125 - (void)addLinkRange:(NSRange)range |
125 withName:(id)name | 126 withURL:(NSString*)url |
126 linkColor:(NSColor*)linkColor { | 127 linkColor:(NSColor*)linkColor { |
| 128 // When the NSLinkAttributeName attribute is used, AppKit makes the link |
| 129 // draggable. If no URL is provided, dropping it on the tab strip will crash |
| 130 // <http://crbug.com/528228>. Require that a URL is used, and that only a URL |
| 131 // is used. |
| 132 DCHECK_GT([url length], 0u); |
| 133 DCHECK([NSURL URLWithString:url]); |
127 NSDictionary* attributes = @{ | 134 NSDictionary* attributes = @{ |
128 NSForegroundColorAttributeName : linkColor, | 135 NSForegroundColorAttributeName : linkColor, |
129 NSUnderlineStyleAttributeName : @(YES), | 136 NSUnderlineStyleAttributeName : @(YES), |
130 NSCursorAttributeName : [NSCursor pointingHandCursor], | 137 NSCursorAttributeName : [NSCursor pointingHandCursor], |
131 NSLinkAttributeName : name, | 138 NSLinkAttributeName : url, |
132 NSUnderlineStyleAttributeName : @(NSSingleUnderlineStyle) | 139 NSUnderlineStyleAttributeName : @(NSSingleUnderlineStyle) |
133 }; | 140 }; |
134 | 141 |
135 [[self textStorage] addAttributes:attributes range:range]; | 142 [[self textStorage] addAttributes:attributes range:range]; |
136 } | 143 } |
137 | 144 |
138 - (void)setRefusesFirstResponder:(BOOL)refusesFirstResponder { | 145 - (void)setRefusesFirstResponder:(BOOL)refusesFirstResponder { |
139 refusesFirstResponder_ = refusesFirstResponder; | 146 refusesFirstResponder_ = refusesFirstResponder; |
140 } | 147 } |
141 | 148 |
142 @end | 149 @end |
OLD | NEW |