OLD | NEW |
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 #include <cmath> | 5 #include <cmath> |
6 | 6 |
7 #include "chrome/browser/autocomplete/autocomplete_popup_view_mac.h" | 7 #include "chrome/browser/autocomplete/autocomplete_popup_view_mac.h" |
8 | 8 |
9 #include "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
10 #include "app/text_elider.h" | 10 #include "app/text_elider.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 NSMutableAttributedString* AutocompletePopupViewMac::DecorateMatchedString( | 96 NSMutableAttributedString* AutocompletePopupViewMac::DecorateMatchedString( |
97 const std::wstring &matchString, | 97 const std::wstring &matchString, |
98 const AutocompleteMatch::ACMatchClassifications &classifications, | 98 const AutocompleteMatch::ACMatchClassifications &classifications, |
99 NSColor* textColor, gfx::Font& font) { | 99 NSColor* textColor, gfx::Font& font) { |
100 // Cache for on-demand computation of the bold version of |font|. | 100 // Cache for on-demand computation of the bold version of |font|. |
101 NSFont* boldFont = nil; | 101 NSFont* boldFont = nil; |
102 | 102 |
103 // Start out with a string using the default style info. | 103 // Start out with a string using the default style info. |
104 NSString* s = base::SysWideToNSString(matchString); | 104 NSString* s = base::SysWideToNSString(matchString); |
105 NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys: | 105 NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys: |
106 font.nativeFont(), NSFontAttributeName, | 106 font.GetNativeFont(), NSFontAttributeName, |
107 textColor, NSForegroundColorAttributeName, | 107 textColor, NSForegroundColorAttributeName, |
108 nil]; | 108 nil]; |
109 NSMutableAttributedString* as = | 109 NSMutableAttributedString* as = |
110 [[[NSMutableAttributedString alloc] initWithString:s | 110 [[[NSMutableAttributedString alloc] initWithString:s |
111 attributes:attributes] | 111 attributes:attributes] |
112 autorelease]; | 112 autorelease]; |
113 | 113 |
114 // Mark up the runs which differ from the default. | 114 // Mark up the runs which differ from the default. |
115 for (ACMatchClassifications::const_iterator i = classifications.begin(); | 115 for (ACMatchClassifications::const_iterator i = classifications.begin(); |
116 i != classifications.end(); ++i) { | 116 i != classifications.end(); ++i) { |
117 const BOOL isLast = (i+1) == classifications.end(); | 117 const BOOL isLast = (i+1) == classifications.end(); |
118 const size_t nextOffset = (isLast ? matchString.length() : (i+1)->offset); | 118 const size_t nextOffset = (isLast ? matchString.length() : (i+1)->offset); |
119 const NSInteger location = static_cast<NSInteger>(i->offset); | 119 const NSInteger location = static_cast<NSInteger>(i->offset); |
120 const NSInteger length = static_cast<NSInteger>(nextOffset - i->offset); | 120 const NSInteger length = static_cast<NSInteger>(nextOffset - i->offset); |
121 const NSRange range = NSMakeRange(location, length); | 121 const NSRange range = NSMakeRange(location, length); |
122 | 122 |
123 if (0 != (i->style & ACMatchClassification::URL)) { | 123 if (0 != (i->style & ACMatchClassification::URL)) { |
124 [as addAttribute:NSForegroundColorAttributeName | 124 [as addAttribute:NSForegroundColorAttributeName |
125 value:URLTextColor() range:range]; | 125 value:URLTextColor() range:range]; |
126 } | 126 } |
127 | 127 |
128 if (0 != (i->style & ACMatchClassification::MATCH)) { | 128 if (0 != (i->style & ACMatchClassification::MATCH)) { |
129 if (!boldFont) { | 129 if (!boldFont) { |
130 NSFontManager* fontManager = [NSFontManager sharedFontManager]; | 130 NSFontManager* fontManager = [NSFontManager sharedFontManager]; |
131 boldFont = [fontManager convertFont:font.nativeFont() | 131 boldFont = [fontManager convertFont:font.GetNativeFont() |
132 toHaveTrait:NSBoldFontMask]; | 132 toHaveTrait:NSBoldFontMask]; |
133 } | 133 } |
134 [as addAttribute:NSFontAttributeName value:boldFont range:range]; | 134 [as addAttribute:NSFontAttributeName value:boldFont range:range]; |
135 } | 135 } |
136 } | 136 } |
137 | 137 |
138 return as; | 138 return as; |
139 } | 139 } |
140 | 140 |
141 NSMutableAttributedString* AutocompletePopupViewMac::ElideString( | 141 NSMutableAttributedString* AutocompletePopupViewMac::ElideString( |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 // the cell to make sure the description will be at least | 190 // the cell to make sure the description will be at least |
191 // partially visible. | 191 // partially visible. |
192 // TODO(shess): Consider revising our NSCell subclass to have two | 192 // TODO(shess): Consider revising our NSCell subclass to have two |
193 // bits and just draw them right, rather than truncating here. | 193 // bits and just draw them right, rather than truncating here. |
194 const float textWidth = cellWidth - kTextXOffset; | 194 const float textWidth = cellWidth - kTextXOffset; |
195 as = ElideString(as, match.contents, font, | 195 as = ElideString(as, match.contents, font, |
196 textWidth * kMaxContentsFraction); | 196 textWidth * kMaxContentsFraction); |
197 | 197 |
198 NSDictionary* attributes = | 198 NSDictionary* attributes = |
199 [NSDictionary dictionaryWithObjectsAndKeys: | 199 [NSDictionary dictionaryWithObjectsAndKeys: |
200 font.nativeFont(), NSFontAttributeName, | 200 font.GetNativeFont(), NSFontAttributeName, |
201 ContentTextColor(), NSForegroundColorAttributeName, | 201 ContentTextColor(), NSForegroundColorAttributeName, |
202 nil]; | 202 nil]; |
203 NSString* rawEnDash = [NSString stringWithFormat:@" %C ", 0x2013]; | 203 NSString* rawEnDash = [NSString stringWithFormat:@" %C ", 0x2013]; |
204 NSAttributedString* enDash = | 204 NSAttributedString* enDash = |
205 [[[NSAttributedString alloc] initWithString:rawEnDash | 205 [[[NSAttributedString alloc] initWithString:rawEnDash |
206 attributes:attributes] autorelease]; | 206 attributes:attributes] autorelease]; |
207 | 207 |
208 NSAttributedString* description = | 208 NSAttributedString* description = |
209 DecorateMatchedString(match.description, match.description_class, | 209 DecorateMatchedString(match.description, match.description_class, |
210 DescriptionTextColor(), font); | 210 DescriptionTextColor(), font); |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 popup_.reset(nil); | 398 popup_.reset(nil); |
399 | 399 |
400 return; | 400 return; |
401 } | 401 } |
402 | 402 |
403 CreatePopupIfNeeded(); | 403 CreatePopupIfNeeded(); |
404 | 404 |
405 // The popup's font is a slightly smaller version of the field's. | 405 // The popup's font is a slightly smaller version of the field's. |
406 NSFont* fieldFont = AutocompleteEditViewMac::GetFieldFont(); | 406 NSFont* fieldFont = AutocompleteEditViewMac::GetFieldFont(); |
407 const CGFloat resultFontSize = [fieldFont pointSize] + kEditFontAdjust; | 407 const CGFloat resultFontSize = [fieldFont pointSize] + kEditFontAdjust; |
408 gfx::Font resultFont = gfx::Font::CreateFont( | 408 gfx::Font resultFont(base::SysNSStringToWide([fieldFont fontName]), |
409 base::SysNSStringToWide([fieldFont fontName]), (int)resultFontSize); | 409 static_cast<int>(resultFontSize)); |
410 | 410 |
411 AutocompleteMatrix* matrix = [popup_ contentView]; | 411 AutocompleteMatrix* matrix = [popup_ contentView]; |
412 | 412 |
413 // Calculate the width of the matrix based on backing out the | 413 // Calculate the width of the matrix based on backing out the |
414 // popup's border from the width of the field. Would prefer to use | 414 // popup's border from the width of the field. Would prefer to use |
415 // [matrix convertSize:fromView:] for converting from screen size, | 415 // [matrix convertSize:fromView:] for converting from screen size, |
416 // but that doesn't work until the popup is on-screen (bug?). | 416 // but that doesn't work until the popup is on-screen (bug?). |
417 const NSRect fieldRectBase = [field_ convertRect:[field_ bounds] toView:nil]; | 417 const NSRect fieldRectBase = [field_ convertRect:[field_ bounds] toView:nil]; |
418 const CGFloat popupWidth = NSWidth(fieldRectBase) - 2 * kWindowBorderWidth; | 418 const CGFloat popupWidth = NSWidth(fieldRectBase) - 2 * kWindowBorderWidth; |
419 DCHECK_GT(popupWidth, 0.0); | 419 DCHECK_GT(popupWidth, 0.0); |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 yRadius:kPopupRoundingRadius]; | 734 yRadius:kPopupRoundingRadius]; |
735 | 735 |
736 // Draw the matrix clipped to our border. | 736 // Draw the matrix clipped to our border. |
737 [NSGraphicsContext saveGraphicsState]; | 737 [NSGraphicsContext saveGraphicsState]; |
738 [path addClip]; | 738 [path addClip]; |
739 [super drawRect:rect]; | 739 [super drawRect:rect]; |
740 [NSGraphicsContext restoreGraphicsState]; | 740 [NSGraphicsContext restoreGraphicsState]; |
741 } | 741 } |
742 | 742 |
743 @end | 743 @end |
OLD | NEW |