OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
Ilya Sherman
2014/05/09 21:51:28
nit: 2014
Patrick Dubroy
2014/05/12 14:13:39
Done.
| |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #import "chrome/browser/ui/cocoa/autofill/password_generation_popup_view_cocoa.h " | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/strings/sys_string_conversions.h" | |
9 #include "chrome/browser/ui/autofill/autofill_popup_controller.h" | |
10 #include "chrome/browser/ui/autofill/autofill_popup_view.h" | |
11 #include "chrome/browser/ui/autofill/popup_constants.h" | |
12 #include "chrome/browser/ui/cocoa/autofill/password_generation_popup_view_bridge .h" | |
13 #include "components/autofill/core/browser/popup_item_ids.h" | |
14 #include "grit/ui_resources.h" | |
15 #include "skia/ext/skia_utils_mac.h" | |
16 #include "ui/base/resource/resource_bundle.h" | |
17 #include "ui/gfx/font_list.h" | |
18 #include "ui/gfx/image/image.h" | |
19 #include "ui/gfx/point.h" | |
20 #include "ui/gfx/rect.h" | |
21 #include "ui/gfx/text_constants.h" | |
22 | |
23 using autofill::AutofillPopupView; | |
24 using autofill::PasswordGenerationPopupView; | |
25 | |
26 @interface PasswordGenerationPopupViewCocoa () | |
27 @end | |
Ilya Sherman
2014/05/09 21:51:28
What's this for?
Patrick Dubroy
2014/05/12 14:13:39
Not sure. Removed.
| |
28 | |
29 @implementation PasswordGenerationPopupViewCocoa | |
30 | |
31 #pragma mark - | |
32 #pragma mark Initialisers | |
33 | |
34 - (id)initWithFrame:(NSRect)frame { | |
35 NOTREACHED(); | |
36 return [self initWithController:NULL frame:frame]; | |
Ilya Sherman
2014/05/09 21:51:28
nit: If the method should not be reachable, just r
Patrick Dubroy
2014/05/12 14:13:39
Done.
| |
37 } | |
38 | |
39 - (id)initWithController: | |
40 (autofill::PasswordGenerationPopupController*)controller | |
41 frame:(NSRect)frame { | |
42 self = [super initWithAutofillPopupViewDelegate:controller frame:frame]; | |
43 if (self) | |
44 controller_ = controller; | |
45 | |
46 return self; | |
47 } | |
48 | |
49 - (void)controllerDestroyed { | |
50 // Since the |controller_| either already has been destroyed or is about to | |
51 // be, about the only thing we can safely do with it is to null it out. | |
52 controller_ = NULL; | |
Ilya Sherman
2014/05/09 21:51:28
Should this call [super controllerDestroyed] as we
Patrick Dubroy
2014/05/12 14:13:39
Actually, I don't think we need this at all. It's
Ilya Sherman
2014/05/12 21:46:10
The view is destroyed asynchronously, though -- th
| |
53 } | |
54 | |
55 #pragma mark - | |
56 #pragma mark NSView implementation: | |
57 | |
58 - (void)drawRect:(NSRect)dirtyRect { | |
59 // If the view is in the process of being destroyed, don't bother drawing. | |
60 if (!controller_) | |
61 return; | |
62 | |
63 [self drawBackgroundAndBorderInRect:dirtyRect]; | |
64 | |
65 NSRect bounds = [self bounds]; | |
66 bounds.origin.y += autofill::kPopupBorderThickness; | |
67 | |
68 if (controller_->password_selected()) { | |
69 // Draw a highlight under the suggested password. | |
70 NSRect highlightBounds = | |
71 NSRectFromCGRect(controller_->password_bounds().ToCGRect()); | |
72 highlightBounds.origin.y += | |
73 PasswordGenerationPopupView::kPasswordVerticalInset; | |
74 highlightBounds.size.height -= | |
75 2 * PasswordGenerationPopupView::kPasswordVerticalInset; | |
76 [[self highlightColor] set]; | |
77 [NSBezierPath fillRect:highlightBounds]; | |
78 } | |
79 | |
80 NSFont* font = controller_->font_list().GetPrimaryFont().GetNativeFont(); | |
81 NSRect passwordBounds = | |
82 NSRectFromCGRect(controller_->password_bounds().ToCGRect()); | |
83 | |
84 BOOL isRTL = NO; // TODO(dubroy): Implement RTL support. | |
85 [self drawText:base::SysUTF16ToNSString(controller_->password()) | |
86 withFont:font | |
87 color:[self nameColor] | |
88 bounds:passwordBounds | |
89 alignment:isRTL ? gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT]; | |
90 | |
91 [self drawText:base::SysUTF16ToNSString(controller_->SuggestedText()) | |
92 withFont:font | |
93 color:[self subtextColor] | |
94 bounds:passwordBounds | |
95 alignment:isRTL ? gfx::ALIGN_LEFT : gfx::ALIGN_RIGHT]; | |
96 | |
97 // Render the background of the help text. | |
98 NSRect helpBounds = | |
99 NSRectFromCGRect(controller_->help_bounds().ToCGRect()); | |
100 [[self helpTextBackgroundColor] set]; | |
101 [NSBezierPath fillRect:helpBounds]; | |
102 | |
103 // Render the divider. | |
104 NSRect helpBorder = helpBounds; | |
105 helpBorder.size.height = 1; | |
106 [[self dividerColor] set]; | |
107 [NSBezierPath fillRect:helpBorder]; | |
108 | |
109 // Render the help text. | |
110 [self drawText:base::SysUTF16ToNSString(controller_->HelpText()) | |
111 withFont:font | |
112 color:[self helpTextColor] | |
113 bounds:helpBounds | |
Ilya Sherman
2014/05/09 21:51:28
Hmm, shouldn't this not include the pixel used for
Patrick Dubroy
2014/05/12 14:13:39
Done.
| |
114 alignment:isRTL ? gfx::ALIGN_RIGHT : gfx::ALIGN_LEFT]; | |
115 } | |
116 | |
117 - (void)drawText:(NSString*)text | |
118 withFont:(NSFont*)font | |
119 color:(id)color | |
120 bounds:(NSRect)bounds | |
121 alignment:(gfx::HorizontalAlignment)alignment { | |
122 NSDictionary* textAttributes = | |
123 [NSDictionary dictionaryWithObjectsAndKeys: | |
124 font, NSFontAttributeName, | |
125 color, NSForegroundColorAttributeName, | |
126 nil]; | |
127 // Adjust horizontal padding before measuring. | |
128 bounds.size.width -= 2 * controller_->kHorizontalPadding; | |
129 bounds.origin.x += controller_->kHorizontalPadding; | |
130 | |
131 NSSize textSize = | |
132 [text boundingRectWithSize:bounds.size | |
133 options:NSStringDrawingUsesLineFragmentOrigin | |
134 attributes:textAttributes].size; | |
135 | |
136 // Center the text vertically within the bounds. | |
137 bounds.origin.y = NSMinY(bounds) + (NSHeight(bounds) - textSize.height) / 2; | |
138 | |
139 if (alignment == gfx::ALIGN_RIGHT) | |
140 bounds.origin.x += NSWidth(bounds) - textSize.width; | |
141 | |
142 [text drawInRect:bounds withAttributes:textAttributes]; | |
143 } | |
144 | |
145 - (NSColor*)dividerColor { | |
146 return gfx::SkColorToCalibratedNSColor( | |
147 PasswordGenerationPopupView::kDividerColor); | |
148 } | |
149 | |
150 - (NSColor*)helpTextBackgroundColor { | |
151 return gfx::SkColorToCalibratedNSColor( | |
152 PasswordGenerationPopupView::kExplanatoryTextBackgroundColor); | |
153 } | |
154 | |
155 - (NSColor*)helpTextColor { | |
156 return gfx::SkColorToCalibratedNSColor( | |
157 PasswordGenerationPopupView::kExplanatoryTextColor); | |
158 } | |
Ilya Sherman
2014/05/09 21:51:28
These methods don't seem to be declared anywhere.
Patrick Dubroy
2014/05/12 14:13:39
Done.
| |
159 | |
160 @end | |
OLD | NEW |