OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/autofill/autofill_popup_view_cocoa.h" | 5 #import "chrome/browser/ui/cocoa/autofill/autofill_popup_view_cocoa.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
9 #include "chrome/browser/ui/autofill/autofill_popup_controller.h" | 9 #include "chrome/browser/ui/autofill/autofill_popup_controller.h" |
10 #include "chrome/browser/ui/autofill/popup_constants.h" | 10 #include "chrome/browser/ui/autofill/popup_constants.h" |
11 #include "chrome/browser/ui/cocoa/autofill/autofill_popup_view_bridge.h" | 11 #include "chrome/browser/ui/cocoa/autofill/autofill_popup_view_bridge.h" |
12 #include "components/autofill/core/browser/popup_item_ids.h" | 12 #include "components/autofill/core/browser/popup_item_ids.h" |
| 13 #include "components/autofill/core/browser/suggestion.h" |
13 #include "ui/base/cocoa/window_size_constants.h" | 14 #include "ui/base/cocoa/window_size_constants.h" |
14 #include "ui/base/resource/resource_bundle.h" | 15 #include "ui/base/resource/resource_bundle.h" |
15 #include "ui/gfx/font_list.h" | 16 #include "ui/gfx/font_list.h" |
16 #include "ui/gfx/image/image.h" | 17 #include "ui/gfx/image/image.h" |
17 #include "ui/gfx/point.h" | 18 #include "ui/gfx/point.h" |
18 #include "ui/gfx/rect.h" | 19 #include "ui/gfx/rect.h" |
19 | 20 |
20 using autofill::AutofillPopupView; | 21 using autofill::AutofillPopupView; |
21 | 22 |
22 @interface AutofillPopupViewCocoa () | 23 @interface AutofillPopupViewCocoa () |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 #pragma mark - | 91 #pragma mark - |
91 #pragma mark NSView implementation: | 92 #pragma mark NSView implementation: |
92 | 93 |
93 - (void)drawRect:(NSRect)dirtyRect { | 94 - (void)drawRect:(NSRect)dirtyRect { |
94 // If the view is in the process of being destroyed, don't bother drawing. | 95 // If the view is in the process of being destroyed, don't bother drawing. |
95 if (!controller_) | 96 if (!controller_) |
96 return; | 97 return; |
97 | 98 |
98 [self drawBackgroundAndBorder]; | 99 [self drawBackgroundAndBorder]; |
99 | 100 |
100 for (size_t i = 0; i < controller_->names().size(); ++i) { | 101 for (size_t i = 0; i < controller_->GetLineCount(); ++i) { |
101 // Skip rows outside of the dirty rect. | 102 // Skip rows outside of the dirty rect. |
102 NSRect rowBounds = | 103 NSRect rowBounds = |
103 NSRectFromCGRect(controller_->GetRowBounds(i).ToCGRect()); | 104 NSRectFromCGRect(controller_->GetRowBounds(i).ToCGRect()); |
104 if (!NSIntersectsRect(rowBounds, dirtyRect)) | 105 if (!NSIntersectsRect(rowBounds, dirtyRect)) |
105 continue; | 106 continue; |
| 107 const autofill::Suggestion& suggestion = controller_->GetSuggestionAt(i); |
106 | 108 |
107 if (controller_->identifiers()[i] == autofill::POPUP_ITEM_ID_SEPARATOR) { | 109 if (suggestion.frontend_id == autofill::POPUP_ITEM_ID_SEPARATOR) { |
108 [self drawSeparatorWithBounds:rowBounds]; | 110 [self drawSeparatorWithBounds:rowBounds]; |
109 continue; | 111 continue; |
110 } | 112 } |
111 | 113 |
112 // Additional offset applied to the text in the vertical direction. | 114 // Additional offset applied to the text in the vertical direction. |
113 CGFloat textYOffset = 0; | 115 CGFloat textYOffset = 0; |
114 BOOL imageFirst = NO; | 116 BOOL imageFirst = NO; |
115 if (controller_->identifiers()[i] == | 117 if (suggestion.frontend_id == autofill::POPUP_ITEM_ID_MAC_ACCESS_CONTACTS) { |
116 autofill::POPUP_ITEM_ID_MAC_ACCESS_CONTACTS) { | |
117 // Due to the weighting of the asset used for this autofill entry, the | 118 // Due to the weighting of the asset used for this autofill entry, the |
118 // text needs to be bumped up by 1 pt to make it look vertically aligned. | 119 // text needs to be bumped up by 1 pt to make it look vertically aligned. |
119 textYOffset = -1; | 120 textYOffset = -1; |
120 imageFirst = YES; | 121 imageFirst = YES; |
121 } | 122 } |
122 | 123 |
123 NSString* name = SysUTF16ToNSString(controller_->names()[i]); | 124 NSString* value = SysUTF16ToNSString(controller_->GetElidedValueAt(i)); |
124 NSString* subtext = SysUTF16ToNSString(controller_->subtexts()[i]); | 125 NSString* label = SysUTF16ToNSString(controller_->GetElidedLabelAt(i)); |
125 BOOL isSelected = static_cast<int>(i) == controller_->selected_line(); | 126 BOOL isSelected = static_cast<int>(i) == controller_->selected_line(); |
126 [self drawSuggestionWithName:name | 127 [self drawSuggestionWithName:value |
127 subtext:subtext | 128 subtext:label |
128 index:i | 129 index:i |
129 bounds:rowBounds | 130 bounds:rowBounds |
130 selected:isSelected | 131 selected:isSelected |
131 imageFirst:imageFirst | 132 imageFirst:imageFirst |
132 textYOffset:textYOffset]; | 133 textYOffset:textYOffset]; |
133 } | 134 } |
134 } | 135 } |
135 | 136 |
136 #pragma mark - | 137 #pragma mark - |
137 #pragma mark Public API: | 138 #pragma mark Public API: |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 - (CGFloat)drawName:(NSString*)name | 197 - (CGFloat)drawName:(NSString*)name |
197 atX:(CGFloat)x | 198 atX:(CGFloat)x |
198 index:(size_t)index | 199 index:(size_t)index |
199 rightAlign:(BOOL)rightAlign | 200 rightAlign:(BOOL)rightAlign |
200 bounds:(NSRect)bounds | 201 bounds:(NSRect)bounds |
201 textYOffset:(CGFloat)textYOffset { | 202 textYOffset:(CGFloat)textYOffset { |
202 NSColor* nameColor = | 203 NSColor* nameColor = |
203 controller_->IsWarning(index) ? [self warningColor] : [self nameColor]; | 204 controller_->IsWarning(index) ? [self warningColor] : [self nameColor]; |
204 NSDictionary* nameAttributes = | 205 NSDictionary* nameAttributes = |
205 [NSDictionary dictionaryWithObjectsAndKeys: | 206 [NSDictionary dictionaryWithObjectsAndKeys: |
206 controller_->GetNameFontListForRow(index).GetPrimaryFont(). | 207 controller_->GetValueFontListForRow(index).GetPrimaryFont(). |
207 GetNativeFont(), | 208 GetNativeFont(), |
208 NSFontAttributeName, nameColor, NSForegroundColorAttributeName, | 209 NSFontAttributeName, nameColor, NSForegroundColorAttributeName, |
209 nil]; | 210 nil]; |
210 NSSize nameSize = [name sizeWithAttributes:nameAttributes]; | 211 NSSize nameSize = [name sizeWithAttributes:nameAttributes]; |
211 x -= rightAlign ? nameSize.width : 0; | 212 x -= rightAlign ? nameSize.width : 0; |
212 CGFloat y = bounds.origin.y + (bounds.size.height - nameSize.height) / 2; | 213 CGFloat y = bounds.origin.y + (bounds.size.height - nameSize.height) / 2; |
213 y += textYOffset; | 214 y += textYOffset; |
214 | 215 |
215 [name drawAtPoint:NSMakePoint(x, y) withAttributes:nameAttributes]; | 216 [name drawAtPoint:NSMakePoint(x, y) withAttributes:nameAttributes]; |
216 | 217 |
(...skipping 23 matching lines...) Expand all Loading... |
240 return x; | 241 return x; |
241 } | 242 } |
242 | 243 |
243 - (CGFloat)drawSubtext:(NSString*)subtext | 244 - (CGFloat)drawSubtext:(NSString*)subtext |
244 atX:(CGFloat)x | 245 atX:(CGFloat)x |
245 rightAlign:(BOOL)rightAlign | 246 rightAlign:(BOOL)rightAlign |
246 bounds:(NSRect)bounds | 247 bounds:(NSRect)bounds |
247 textYOffset:(CGFloat)textYOffset { | 248 textYOffset:(CGFloat)textYOffset { |
248 NSDictionary* subtextAttributes = | 249 NSDictionary* subtextAttributes = |
249 [NSDictionary dictionaryWithObjectsAndKeys: | 250 [NSDictionary dictionaryWithObjectsAndKeys: |
250 controller_->subtext_font_list().GetPrimaryFont().GetNativeFont(), | 251 controller_->GetLabelFontList().GetPrimaryFont().GetNativeFont(), |
251 NSFontAttributeName, | 252 NSFontAttributeName, |
252 [self subtextColor], | 253 [self subtextColor], |
253 NSForegroundColorAttributeName, | 254 NSForegroundColorAttributeName, |
254 nil]; | 255 nil]; |
255 NSSize subtextSize = [subtext sizeWithAttributes:subtextAttributes]; | 256 NSSize subtextSize = [subtext sizeWithAttributes:subtextAttributes]; |
256 x -= rightAlign ? subtextSize.width : 0; | 257 x -= rightAlign ? subtextSize.width : 0; |
257 CGFloat y = bounds.origin.y + (bounds.size.height - subtextSize.height) / 2; | 258 CGFloat y = bounds.origin.y + (bounds.size.height - subtextSize.height) / 2; |
258 y += textYOffset; | 259 y += textYOffset; |
259 | 260 |
260 [subtext drawAtPoint:NSMakePoint(x, y) withAttributes:subtextAttributes]; | 261 [subtext drawAtPoint:NSMakePoint(x, y) withAttributes:subtextAttributes]; |
261 x += rightAlign ? 0 : subtextSize.width; | 262 x += rightAlign ? 0 : subtextSize.width; |
262 return x; | 263 return x; |
263 } | 264 } |
264 | 265 |
265 - (NSImage*)iconAtIndex:(size_t)index { | 266 - (NSImage*)iconAtIndex:(size_t)index { |
266 if (controller_->icons()[index].empty()) | 267 const base::string16& icon = controller_->GetSuggestionAt(index).icon; |
| 268 if (icon.empty()) |
267 return nil; | 269 return nil; |
268 | 270 |
269 int iconId = controller_->GetIconResourceID(controller_->icons()[index]); | 271 int iconId = controller_->GetIconResourceID(icon); |
270 DCHECK_NE(-1, iconId); | 272 DCHECK_NE(-1, iconId); |
271 | 273 |
272 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 274 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
273 return rb.GetNativeImageNamed(iconId).ToNSImage(); | 275 return rb.GetNativeImageNamed(iconId).ToNSImage(); |
274 } | 276 } |
275 | 277 |
276 @end | 278 @end |
OLD | NEW |