| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 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 "ui/app_list/cocoa/signin_view_controller.h" | |
| 6 | |
| 7 #include "base/mac/foundation_util.h" | |
| 8 #include "base/mac/scoped_nsobject.h" | |
| 9 #include "base/strings/sys_string_conversions.h" | |
| 10 #include "skia/ext/skia_utils_mac.h" | |
| 11 #include "third_party/skia/include/core/SkColor.h" | |
| 12 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTw
eaker.h" | |
| 13 #include "ui/app_list/app_list_constants.h" | |
| 14 #include "ui/app_list/signin_delegate.h" | |
| 15 #import "ui/base/cocoa/controls/blue_label_button.h" | |
| 16 #import "ui/base/cocoa/controls/hyperlink_button_cell.h" | |
| 17 #include "ui/base/resource/resource_bundle.h" | |
| 18 | |
| 19 namespace { | |
| 20 | |
| 21 const CGFloat kTopPadding = 40; | |
| 22 const CGFloat kBottomPadding = 40; | |
| 23 const CGFloat kLeftPadding = 40; | |
| 24 const CGFloat kRightPadding = 40; | |
| 25 const CGFloat kHeadingPadding = 30; | |
| 26 const CGFloat kButtonPadding = 40; | |
| 27 | |
| 28 const CGFloat kTitleFontSizeDelta = 5; | |
| 29 const SkColor kLinkColor = SkColorSetRGB(0x11, 0x55, 0xcc); | |
| 30 const SkColor kTextColor = SkColorSetRGB(0x33, 0x33, 0x33); | |
| 31 | |
| 32 // Padding on the left of the text in the NSTextField and HyperlinkButtonCell. | |
| 33 const CGFloat kTextFieldPadding = 2; | |
| 34 | |
| 35 } // namespace | |
| 36 | |
| 37 @interface SigninViewController () | |
| 38 | |
| 39 - (void)onLearnMoreButtonClick:(id)sender; | |
| 40 - (void)onSettingsButtonClick:(id)sender; | |
| 41 - (void)onSigninButtonClick:(id)sender; | |
| 42 - (NSButton*)makeLinkButtonWithTitle:(NSString*)title | |
| 43 origin:(NSPoint)origin | |
| 44 action:(SEL)action; | |
| 45 - (NSTextField*)makeTextFieldWithText:(NSString*)text | |
| 46 font:(NSFont*)font | |
| 47 frame:(NSRect)frame; | |
| 48 - (void)populateAndLayoutView; | |
| 49 | |
| 50 @end | |
| 51 | |
| 52 @interface AppsSigninView : NSView { | |
| 53 @private | |
| 54 CGFloat cornerRadius_; | |
| 55 } | |
| 56 | |
| 57 @property(assign, nonatomic) CGFloat cornerRadius; | |
| 58 | |
| 59 @end | |
| 60 | |
| 61 @implementation SigninViewController; | |
| 62 | |
| 63 - (id)initWithFrame:(NSRect)frame | |
| 64 cornerRadius:(CGFloat)cornerRadius | |
| 65 delegate:(app_list::SigninDelegate*)delegate { | |
| 66 if ((self = [super init])) { | |
| 67 base::scoped_nsobject<AppsSigninView> appsSigninView( | |
| 68 [[AppsSigninView alloc] initWithFrame:frame]); | |
| 69 [appsSigninView setCornerRadius:cornerRadius]; | |
| 70 delegate_ = delegate; | |
| 71 [self setView:appsSigninView]; | |
| 72 [self populateAndLayoutView]; | |
| 73 } | |
| 74 return self; | |
| 75 } | |
| 76 | |
| 77 - (void)onLearnMoreButtonClick:(id)sender { | |
| 78 delegate_->OpenLearnMore(); | |
| 79 } | |
| 80 | |
| 81 - (void)onSettingsButtonClick:(id)sender { | |
| 82 delegate_->OpenSettings(); | |
| 83 } | |
| 84 | |
| 85 - (void)onSigninButtonClick:(id)sender { | |
| 86 delegate_->ShowSignin(); | |
| 87 } | |
| 88 | |
| 89 - (NSButton*)makeLinkButtonWithTitle:(NSString*)title | |
| 90 origin:(NSPoint)origin | |
| 91 action:(SEL)action { | |
| 92 base::scoped_nsobject<NSButton> button( | |
| 93 [[HyperlinkButtonCell buttonWithString:title] retain]); | |
| 94 [[button cell] setShouldUnderline:NO]; | |
| 95 [[button cell] setTextColor:gfx::SkColorToSRGBNSColor(kLinkColor)]; | |
| 96 [button sizeToFit]; | |
| 97 origin.x -= kTextFieldPadding; | |
| 98 [button setFrameOrigin:origin]; | |
| 99 [button setTarget:self]; | |
| 100 [button setAction:action]; | |
| 101 return button.autorelease(); | |
| 102 } | |
| 103 | |
| 104 - (NSTextField*)makeTextFieldWithText:(NSString*)text | |
| 105 font:(NSFont*)font | |
| 106 frame:(NSRect)frame { | |
| 107 base::scoped_nsobject<NSTextField> textField( | |
| 108 [[NSTextField alloc] initWithFrame:frame]); | |
| 109 [textField setEditable:NO]; | |
| 110 [textField setSelectable:NO]; | |
| 111 [textField setDrawsBackground:NO]; | |
| 112 [textField setBezeled:NO]; | |
| 113 | |
| 114 NSDictionary* textAttributes = @{ | |
| 115 NSFontAttributeName : font, | |
| 116 NSForegroundColorAttributeName : gfx::SkColorToSRGBNSColor(kTextColor) | |
| 117 }; | |
| 118 base::scoped_nsobject<NSAttributedString> attributedText( | |
| 119 [[NSAttributedString alloc] initWithString:text | |
| 120 attributes:textAttributes]); | |
| 121 [textField setAttributedStringValue:attributedText]; | |
| 122 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:textField]; | |
| 123 NSPoint origin = [textField frame].origin; | |
| 124 origin.x -= kTextFieldPadding; | |
| 125 origin.y -= NSHeight([textField bounds]); | |
| 126 [textField setFrameOrigin:origin]; | |
| 127 return textField.autorelease(); | |
| 128 } | |
| 129 | |
| 130 - (void)populateAndLayoutView { | |
| 131 NSView* signinView = [self view]; | |
| 132 NSRect frame = [signinView frame]; | |
| 133 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
| 134 const gfx::FontList& baseFontList = | |
| 135 rb.GetFontList(ui::ResourceBundle::BaseFont); | |
| 136 | |
| 137 NSString* titleText = base::SysUTF16ToNSString(delegate_->GetSigninHeading()); | |
| 138 NSFont* titleFont = baseFontList.DeriveWithSizeDelta(kTitleFontSizeDelta) | |
| 139 .GetPrimaryFont().GetNativeFont(); | |
| 140 NSRect rect = NSMakeRect(kLeftPadding, NSHeight(frame) - kTopPadding, | |
| 141 NSWidth(frame) - kLeftPadding - kRightPadding, 0); | |
| 142 NSTextField* titleTextView = [self makeTextFieldWithText:titleText | |
| 143 font:titleFont | |
| 144 frame:rect]; | |
| 145 [signinView addSubview:titleTextView]; | |
| 146 | |
| 147 NSString* signinText = base::SysUTF16ToNSString(delegate_->GetSigninText()); | |
| 148 rect.origin.y = floor( | |
| 149 NSMinY([titleTextView frame]) + [titleFont descender] - kHeadingPadding); | |
| 150 NSFont* signinTextFont = baseFontList.GetPrimaryFont().GetNativeFont(); | |
| 151 NSTextField* signinTextView = [self makeTextFieldWithText:signinText | |
| 152 font:signinTextFont | |
| 153 frame:rect]; | |
| 154 [signinView addSubview:signinTextView]; | |
| 155 | |
| 156 base::scoped_nsobject<BlueLabelButton> button( | |
| 157 [[BlueLabelButton alloc] initWithFrame:NSZeroRect]); | |
| 158 [button setTitle:base::SysUTF16ToNSString(delegate_->GetSigninButtonText())]; | |
| 159 [button setKeyEquivalent:@"\r"]; | |
| 160 [button setTarget:self]; | |
| 161 [button setAction:@selector(onSigninButtonClick:)]; | |
| 162 [button sizeToFit]; | |
| 163 NSPoint buttonOrigin = NSMakePoint(kLeftPadding, floor( | |
| 164 NSMinY([signinTextView frame]) - [signinTextFont descender] - | |
| 165 NSHeight([button frame]) - kButtonPadding)); | |
| 166 [button setFrameOrigin:buttonOrigin]; | |
| 167 [signinView addSubview:button]; | |
| 168 | |
| 169 NSString* settingsLinkText = | |
| 170 base::SysUTF16ToNSString(delegate_->GetSettingsLinkText()); | |
| 171 NSButton* settingsLink = | |
| 172 [self makeLinkButtonWithTitle:settingsLinkText | |
| 173 origin:NSMakePoint(kLeftPadding, kBottomPadding) | |
| 174 action:@selector(onSettingsButtonClick:)]; | |
| 175 NSPoint origin = NSMakePoint(kLeftPadding, | |
| 176 NSMaxY([settingsLink frame])); | |
| 177 NSString* learnMoreLinkText = | |
| 178 base::SysUTF16ToNSString(delegate_->GetLearnMoreLinkText()); | |
| 179 NSButton* learnMoreLink = | |
| 180 [self makeLinkButtonWithTitle:learnMoreLinkText | |
| 181 origin:origin | |
| 182 action:@selector(onLearnMoreButtonClick:)]; | |
| 183 [signinView addSubview:learnMoreLink]; | |
| 184 [signinView addSubview:settingsLink]; | |
| 185 } | |
| 186 | |
| 187 @end | |
| 188 | |
| 189 @implementation AppsSigninView | |
| 190 | |
| 191 @synthesize cornerRadius = cornerRadius_; | |
| 192 | |
| 193 - (void)drawRect:(NSRect)dirtyRect { | |
| 194 [gfx::SkColorToSRGBNSColor(app_list::kContentsBackgroundColor) set]; | |
| 195 [[NSBezierPath bezierPathWithRoundedRect:[self bounds] | |
| 196 xRadius:cornerRadius_ | |
| 197 yRadius:cornerRadius_] fill]; | |
| 198 } | |
| 199 | |
| 200 @end | |
| OLD | NEW |