OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/password_generation_popup_view_cocoa.h " | 5 #import "chrome/browser/ui/cocoa/autofill/password_generation_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/autofill_popup_view.h" | 10 #include "chrome/browser/ui/autofill/autofill_popup_view.h" |
11 #include "chrome/browser/ui/autofill/popup_constants.h" | 11 #include "chrome/browser/ui/autofill/popup_constants.h" |
12 #include "chrome/browser/ui/cocoa/autofill/password_generation_popup_view_bridge .h" | 12 #include "chrome/browser/ui/cocoa/autofill/password_generation_popup_view_bridge .h" |
13 #import "chrome/browser/ui/cocoa/hyperlink_text_view.h" | |
13 #import "chrome/browser/ui/cocoa/l10n_util.h" | 14 #import "chrome/browser/ui/cocoa/l10n_util.h" |
14 #include "components/autofill/core/browser/popup_item_ids.h" | 15 #include "components/autofill/core/browser/popup_item_ids.h" |
15 #include "grit/ui_resources.h" | 16 #include "grit/ui_resources.h" |
16 #include "skia/ext/skia_utils_mac.h" | 17 #include "skia/ext/skia_utils_mac.h" |
17 #include "ui/base/resource/resource_bundle.h" | 18 #include "ui/base/resource/resource_bundle.h" |
18 #include "ui/gfx/font_list.h" | 19 #include "ui/gfx/font_list.h" |
19 #include "ui/gfx/image/image.h" | 20 #include "ui/gfx/image/image.h" |
20 #include "ui/gfx/point.h" | 21 #include "ui/gfx/point.h" |
22 #include "ui/gfx/range/range.h" | |
21 #include "ui/gfx/rect.h" | 23 #include "ui/gfx/rect.h" |
22 #include "ui/gfx/text_constants.h" | 24 #include "ui/gfx/text_constants.h" |
23 | 25 |
24 using autofill::AutofillPopupView; | 26 using autofill::AutofillPopupView; |
25 using autofill::PasswordGenerationPopupView; | 27 using autofill::PasswordGenerationPopupView; |
26 using base::scoped_nsobject; | 28 using base::scoped_nsobject; |
27 | 29 |
28 namespace { | 30 namespace { |
29 | 31 |
30 NSColor* DividerColor() { | 32 NSColor* DividerColor() { |
(...skipping 20 matching lines...) Expand all Loading... | |
51 - (id)initWithFrame:(NSRect)frame { | 53 - (id)initWithFrame:(NSRect)frame { |
52 NOTREACHED(); | 54 NOTREACHED(); |
53 return nil; | 55 return nil; |
54 } | 56 } |
55 | 57 |
56 - (id)initWithController: | 58 - (id)initWithController: |
57 (autofill::PasswordGenerationPopupController*)controller | 59 (autofill::PasswordGenerationPopupController*)controller |
58 frame:(NSRect)frame { | 60 frame:(NSRect)frame { |
59 if (self = [super initWithDelegate:controller frame:frame]) { | 61 if (self = [super initWithDelegate:controller frame:frame]) { |
60 controller_ = controller; | 62 controller_ = controller; |
61 NSFont* font = controller_->font_list().GetPrimaryFont().GetNativeFont(); | |
62 | 63 |
63 passwordField_ = [self textFieldWithText:controller_->password() | 64 passwordField_ = [self textFieldWithText:controller_->password() |
64 withFont:font | |
65 color:[self nameColor] | 65 color:[self nameColor] |
66 alignment:NSLeftTextAlignment]; | 66 alignment:NSLeftTextAlignment]; |
67 [self addSubview:passwordField_]; | 67 [self addSubview:passwordField_]; |
68 | 68 |
69 passwordSubtextField_ = | 69 passwordSubtextField_ = [self textFieldWithText:controller_->SuggestedText() |
70 [self textFieldWithText:controller_->SuggestedText() | 70 color:[self subtextColor] |
71 withFont:font | 71 alignment:NSRightTextAlignment]; |
72 color:[self subtextColor] | |
73 alignment:NSRightTextAlignment]; | |
74 [self addSubview:passwordSubtextField_]; | 72 [self addSubview:passwordSubtextField_]; |
75 | 73 |
76 helpTextField_ = [self textFieldWithText:controller_->HelpText() | 74 scoped_nsobject<HyperlinkTextView> helpTextView( |
77 withFont:font | 75 [[HyperlinkTextView alloc] initWithFrame:NSZeroRect]); |
78 color:HelpTextColor() | 76 [helpTextView setMessage:base::SysUTF16ToNSString(controller_->HelpText()) |
79 alignment:NSLeftTextAlignment]; | 77 withFont:[self textFont] |
80 [self addSubview:helpTextField_]; | 78 messageColor:HelpTextColor()]; |
79 [helpTextView addLinkRange:controller_->HelpTextLinkRange().ToNSRange() | |
80 withName:@"" | |
81 linkColor:[NSColor blueColor]]; | |
groby-ooo-7-16
2014/06/04 18:39:56
nit: You might want to get link color via gfx::SkC
Patrick Dubroy
2014/06/17 13:47:21
Done.
| |
82 [helpTextView setDelegate:self]; | |
83 [[helpTextView textContainer] setLineFragmentPadding:0.0f]; | |
84 [helpTextView setVerticallyResizable:YES]; | |
85 [self addSubview:helpTextView]; | |
86 helpTextView_ = helpTextView.get(); | |
81 } | 87 } |
82 | 88 |
83 return self; | 89 return self; |
84 } | 90 } |
85 | 91 |
86 #pragma mark NSView implementation: | 92 #pragma mark NSView implementation: |
87 | 93 |
88 - (void)drawRect:(NSRect)dirtyRect { | 94 - (void)drawRect:(NSRect)dirtyRect { |
89 // 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. |
90 if (!controller_) | 96 if (!controller_) |
(...skipping 17 matching lines...) Expand all Loading... | |
108 [NSBezierPath fillRect:[self helpBounds]]; | 114 [NSBezierPath fillRect:[self helpBounds]]; |
109 | 115 |
110 // Render the divider. | 116 // Render the divider. |
111 [DividerColor() set]; | 117 [DividerColor() set]; |
112 [NSBezierPath fillRect:[self dividerBounds]]; | 118 [NSBezierPath fillRect:[self dividerBounds]]; |
113 } | 119 } |
114 | 120 |
115 #pragma mark Public API: | 121 #pragma mark Public API: |
116 | 122 |
117 - (void)updateBoundsAndRedrawPopup { | 123 - (void)updateBoundsAndRedrawPopup { |
118 [self positionTextField:passwordField_ inRect:[self passwordBounds]]; | 124 [self positionView:passwordField_ inRect:[self passwordBounds]]; |
119 [self positionTextField:passwordSubtextField_ inRect:[self passwordBounds]]; | 125 [self positionView:passwordSubtextField_ inRect:[self passwordBounds]]; |
120 [self positionTextField:helpTextField_ inRect:[self helpBounds]]; | 126 [self positionView:helpTextView_ inRect:[self helpBounds]]; |
121 | 127 |
122 [super updateBoundsAndRedrawPopup]; | 128 [super updateBoundsAndRedrawPopup]; |
123 } | 129 } |
124 | 130 |
125 - (void)controllerDestroyed { | 131 - (void)controllerDestroyed { |
126 controller_ = NULL; | 132 controller_ = NULL; |
127 [super delegateDestroyed]; | 133 [super delegateDestroyed]; |
128 } | 134 } |
129 | 135 |
136 #pragma mark NSTextViewDelegate implementation: | |
137 | |
138 - (BOOL)textView:(NSTextView *)textView | |
groby-ooo-7-16
2014/06/04 18:39:56
NSTextView* - remove space
Patrick Dubroy
2014/06/17 13:47:20
Done.
| |
139 clickedOnLink:(id)link | |
140 atIndex:(NSUInteger)charIndex { | |
groby-ooo-7-16
2014/06/04 18:39:56
if (controller_)?
I don't _think_ this case can h
Patrick Dubroy
2014/06/17 13:47:21
If it's ok with you, I'd rather not put the check
| |
141 controller_->OnSavedPasswordsLinkClicked(); | |
142 return YES; | |
143 } | |
144 | |
130 #pragma mark Private helpers: | 145 #pragma mark Private helpers: |
131 | 146 |
132 - (NSTextField*)textFieldWithText:(const base::string16&)text | 147 - (NSTextField*)textFieldWithText:(const base::string16&)text |
133 withFont:(NSFont*)font | |
134 color:(NSColor*)color | 148 color:(NSColor*)color |
135 alignment:(NSTextAlignment)alignment { | 149 alignment:(NSTextAlignment)alignment { |
136 scoped_nsobject<NSMutableParagraphStyle> paragraphStyle( | 150 scoped_nsobject<NSMutableParagraphStyle> paragraphStyle( |
137 [[NSMutableParagraphStyle alloc] init]); | 151 [[NSMutableParagraphStyle alloc] init]); |
138 [paragraphStyle setAlignment:alignment]; | 152 [paragraphStyle setAlignment:alignment]; |
139 | 153 |
140 NSDictionary* textAttributes = @{ | 154 NSDictionary* textAttributes = @{ |
141 NSFontAttributeName : font, | 155 NSFontAttributeName : [self textFont], |
142 NSForegroundColorAttributeName : color, | 156 NSForegroundColorAttributeName : color, |
143 NSParagraphStyleAttributeName : paragraphStyle | 157 NSParagraphStyleAttributeName : paragraphStyle |
144 }; | 158 }; |
145 | 159 |
146 scoped_nsobject<NSAttributedString> attributedString( | 160 scoped_nsobject<NSAttributedString> attributedString( |
147 [[NSAttributedString alloc] | 161 [[NSAttributedString alloc] |
148 initWithString:base::SysUTF16ToNSString(text) | 162 initWithString:base::SysUTF16ToNSString(text) |
149 attributes:textAttributes]); | 163 attributes:textAttributes]); |
150 | 164 |
151 NSTextField* textField = | 165 NSTextField* textField = |
152 [[[NSTextField alloc] initWithFrame:NSZeroRect] autorelease]; | 166 [[[NSTextField alloc] initWithFrame:NSZeroRect] autorelease]; |
153 [textField setAttributedStringValue:attributedString]; | 167 [textField setAttributedStringValue:attributedString]; |
154 [textField setEditable:NO]; | 168 [textField setEditable:NO]; |
155 [textField setSelectable:NO]; | 169 [textField setSelectable:NO]; |
156 [textField setDrawsBackground:NO]; | 170 [textField setDrawsBackground:NO]; |
157 [textField setBezeled:NO]; | 171 [textField setBezeled:NO]; |
158 | |
159 return textField; | 172 return textField; |
160 } | 173 } |
161 | 174 |
162 - (void)positionTextField:(NSTextField*)textField inRect:(NSRect)bounds { | 175 - (void)positionView:(NSView*)view inRect:(NSRect)bounds { |
163 NSRect frame = NSInsetRect(bounds, controller_->kHorizontalPadding, 0); | 176 NSRect frame = NSInsetRect(bounds, controller_->kHorizontalPadding, 0); |
164 [textField setFrame:frame]; | 177 [view setFrame:frame]; |
165 | 178 |
166 // Center the text vertically within the bounds. | 179 // Center the text vertically within the bounds. |
167 NSSize delta = cocoa_l10n_util::WrapOrSizeToFit(textField); | 180 NSSize delta = cocoa_l10n_util::WrapOrSizeToFit(view); |
168 [textField setFrameOrigin: | 181 [view setFrameOrigin: |
169 NSInsetRect(frame, 0, floor(-delta.height/2)).origin]; | 182 NSInsetRect(frame, 0, floor(-delta.height/2)).origin]; |
170 } | 183 } |
171 | 184 |
172 - (NSRect)passwordBounds { | 185 - (NSRect)passwordBounds { |
173 return NSRectFromCGRect(controller_->password_bounds().ToCGRect()); | 186 return NSRectFromCGRect(controller_->password_bounds().ToCGRect()); |
174 } | 187 } |
175 | 188 |
176 - (NSRect)helpBounds { | 189 - (NSRect)helpBounds { |
177 return NSRectFromCGRect(controller_->help_bounds().ToCGRect()); | 190 return NSRectFromCGRect(controller_->help_bounds().ToCGRect()); |
178 } | 191 } |
179 | 192 |
180 - (NSRect)dividerBounds { | 193 - (NSRect)dividerBounds { |
181 return NSRectFromCGRect(controller_->divider_bounds().ToCGRect()); | 194 return NSRectFromCGRect(controller_->divider_bounds().ToCGRect()); |
182 } | 195 } |
183 | 196 |
197 - (NSFont*)textFont { | |
198 return controller_->font_list().GetPrimaryFont().GetNativeFont(); | |
199 } | |
200 | |
184 @end | 201 @end |
OLD | NEW |