Chromium Code Reviews| Index: chrome/browser/ui/cocoa/tab_contents/sad_tab_view_cocoa.mm |
| diff --git a/chrome/browser/ui/cocoa/tab_contents/sad_tab_view_cocoa.mm b/chrome/browser/ui/cocoa/tab_contents/sad_tab_view_cocoa.mm |
| index f52babb2477f06a1b88c5054da4b2bc7490b35f7..ba3997c5f07d6cf718a203512781ccc08d408e8b 100644 |
| --- a/chrome/browser/ui/cocoa/tab_contents/sad_tab_view_cocoa.mm |
| +++ b/chrome/browser/ui/cocoa/tab_contents/sad_tab_view_cocoa.mm |
| @@ -8,6 +8,7 @@ |
| #include "components/grit/components_scaled_resources.h" |
| #import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
| #import "ui/base/cocoa/controls/blue_label_button.h" |
| +#import "ui/base/cocoa/controls/hyperlink_text_view.h" |
| #import "ui/base/cocoa/nscolor_additions.h" |
| #include "ui/base/l10n/l10n_util_mac.h" |
| #include "ui/base/resource/resource_bundle.h" |
| @@ -31,7 +32,7 @@ const CGFloat kMaxTopMargin = 130; |
| NSTextField* MakeLabelTextField(NSRect frame) { |
| NSTextField* ret = [[[NSTextField alloc] initWithFrame:frame] autorelease]; |
| - ret.autoresizingMask = NSViewWidthSizable | NSViewMaxYMargin; |
| + ret.autoresizingMask = NSViewWidthSizable; |
| ret.editable = NO; |
| ret.drawsBackground = NO; |
| ret.bezeled = NO; |
| @@ -54,17 +55,16 @@ NSTextField* MakeLabelTextField(NSRect frame) { |
| @implementation SadTabView { |
| NSView* container_; |
| - NSImageView* icon_; |
| - NSTextField* title_; |
| NSTextField* message_; |
| HyperlinkTextView* help_; |
| NSButton* button_; |
| + chrome::SadTab* sadTab_; |
| } |
| -@synthesize delegate = delegate_; |
| - |
| -- (instancetype)initWithFrame:(NSRect)frame { |
| +- (instancetype)initWithFrame:(NSRect)frame sadTab:(chrome::SadTab*)sadTab { |
| if ((self = [super initWithFrame:frame])) { |
| + sadTab_ = sadTab; |
| + |
| self.wantsLayer = YES; |
| self.layer.backgroundColor = |
| [NSColor colorWithCalibratedWhite:245.0f / 255.0f alpha:1.0].cr_CGColor; |
| @@ -73,51 +73,85 @@ NSTextField* MakeLabelTextField(NSRect frame) { |
| NSImage* iconImage = ResourceBundle::GetSharedInstance() |
| .GetNativeImageNamed(IDR_CRASH_SAD_TAB) |
| .ToNSImage(); |
| - icon_ = [[NSImageView new] autorelease]; |
| - icon_.image = iconImage; |
| - icon_.frameSize = iconImage.size; |
| - icon_.autoresizingMask = NSViewMaxXMargin | NSViewMaxYMargin; |
| - [container_ addSubview:icon_]; |
| - |
| - CGFloat width = self.bounds.size.width; |
| - title_ = MakeLabelTextField( |
| - NSMakeRect(0, NSMaxY(icon_.frame) + kIconTitleSpacing, width, 0)); |
| - title_.font = [NSFont systemFontOfSize:24]; |
| - title_.textColor = |
| + NSImageView* icon = [[NSImageView new] autorelease]; |
| + icon.image = iconImage; |
| + icon.frameSize = iconImage.size; |
| + [container_ addSubview:icon]; |
| + |
| + NSTextField* title = MakeLabelTextField( |
| + NSMakeRect(0, NSMaxY(icon.frame) + kIconTitleSpacing, 0, 0)); |
| + title.font = [NSFont systemFontOfSize:24]; |
| + title.textColor = |
| [NSColor colorWithCalibratedWhite:38.0f / 255.0f alpha:1.0]; |
| - [title_ sizeToFit]; |
| - [container_ addSubview:title_]; |
| - message_ = |
| - MakeLabelTextField(NSMakeRect(0, NSMaxY(title_.frame), width, 0)); |
| - base::mac::ObjCCast<NSCell>(message_.cell).wraps = YES; |
| - message_.font = [NSFont systemFontOfSize:14]; |
| - message_.textColor = |
| + NSMutableParagraphStyle* titleStyle = |
|
Nico
2016/09/08 17:12:59
nit: I think we slightly prefer local scoped_nsobj
Sidney San Martín
2016/09/09 01:36:00
Yeah, you caught me. I avoided scoped_nsobject bec
Nico
2016/09/09 01:48:42
Oh hm, that's a good point. Maybe just add `// Not
Sidney San Martín
2016/09/09 15:39:44
OK. I threw in a comment for now and ask around/as
|
| + [[NSMutableParagraphStyle new] autorelease]; |
| + titleStyle.lineSpacing = 6; |
| + title.attributedStringValue = [[[NSAttributedString alloc] |
| + initWithString:l10n_util::GetNSString(sadTab->GetTitle()) |
| + attributes:@{NSParagraphStyleAttributeName : titleStyle}] |
| + autorelease]; |
| + |
| + [title sizeToFit]; |
| + [container_ addSubview:title]; |
| + |
| + NSFont* messageFont = [NSFont systemFontOfSize:14]; |
| + NSColor* messageColor = |
| [NSColor colorWithCalibratedWhite:81.0f / 255.0f alpha:1.0]; |
| + |
| + message_ = MakeLabelTextField(NSMakeRect(0, NSMaxY(title.frame), 0, 0)); |
| + message_.frameOrigin = |
| + NSMakePoint(0, NSMaxY(title.frame) + kTitleMessageSpacing); |
| + base::mac::ObjCCast<NSCell>(message_.cell).wraps = YES; |
| + message_.font = messageFont; |
| + message_.textColor = messageColor; |
| + message_.stringValue = l10n_util::GetNSString(sadTab->GetMessage()); |
| [container_ addSubview:message_]; |
| + NSString* helpLinkTitle = |
| + l10n_util::GetNSString(sadTab->GetHelpLinkTitle()); |
| help_ = [[[HyperlinkTextView alloc] |
| initWithFrame:NSMakeRect(0, 0, 1, message_.font.pointSize + 4)] |
| autorelease]; |
| help_.delegate = self; |
| - help_.autoresizingMask = NSViewWidthSizable | NSViewMaxYMargin; |
| + help_.autoresizingMask = NSViewWidthSizable; |
| help_.textContainer.lineFragmentPadding = 2; // To align with message_. |
| + [help_ setMessage:helpLinkTitle |
| + withFont:messageFont |
| + messageColor:messageColor]; |
| + [help_ addLinkRange:NSMakeRange(0, helpLinkTitle.length) |
| + withURL:@(sadTab->GetHelpLinkURL()) |
| + linkColor:messageColor]; |
| + [help_ sizeToFit]; |
| [container_ addSubview:help_]; |
| button_ = [[BlueLabelButton new] autorelease]; |
| button_.target = self; |
| button_.action = @selector(buttonClicked); |
| + button_.title = l10n_util::GetNSString(sadTab->GetButtonTitle()); |
| + [button_ sizeToFit]; |
| [container_ addSubview:button_]; |
| [self addSubview:container_]; |
| + [self resizeSubviewsWithOldSize:self.bounds.size]; |
| } |
| return self; |
| } |
| +- (BOOL)isOpaque { |
| + return YES; |
| +} |
| + |
| - (BOOL)isFlipped { |
| return YES; |
| } |
| +- (void)updateLayer { |
| + // Currently, updateLayer is only called once. If that changes, a DCHECK in |
| + // SadTab::RecordFirstPaint will pipe up and we should add a guard here. |
| + sadTab_->RecordFirstPaint(); |
| +} |
| + |
| - (void)resizeSubviewsWithOldSize:(NSSize)oldSize { |
| [super resizeSubviewsWithOldSize:oldSize]; |
| @@ -131,8 +165,6 @@ NSTextField* MakeLabelTextField(NSRect frame) { |
| // |message_| can wrap to variable number of lines. |
| [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:message_]; |
| - message_.frameOrigin = |
| - NSMakePoint(0, NSMaxY(title_.frame) + kTitleMessageSpacing); |
| help_.frameOrigin = |
| NSMakePoint(0, NSMaxY(message_.frame) + kMessageLinkSpacing); |
| @@ -151,45 +183,22 @@ NSTextField* MakeLabelTextField(NSRect frame) { |
| size.height - containerSize.height - kTabMargin))); |
| } |
| -- (void)setTitle:(int)title { |
| - NSMutableParagraphStyle* style = [[NSMutableParagraphStyle new] autorelease]; |
| - style.lineSpacing = 6; |
| - |
| - title_.attributedStringValue = [[[NSAttributedString alloc] |
| - initWithString:l10n_util::GetNSString(title) |
| - attributes:@{NSParagraphStyleAttributeName : style}] autorelease]; |
| -} |
| - |
| -- (void)setMessage:(int)message { |
| - message_.stringValue = l10n_util::GetNSString(message); |
| -} |
| - |
| -- (void)setButtonTitle:(int)buttonTitle { |
| - button_.title = l10n_util::GetNSString(buttonTitle); |
| - [button_ sizeToFit]; |
| -} |
| - |
| -- (void)setHelpLinkTitle:(int)helpLinkTitle URL:(NSString*)url { |
| - NSString* title = l10n_util::GetNSString(helpLinkTitle); |
| - [help_ setMessage:title |
| - withFont:message_.font |
| - messageColor:message_.textColor]; |
| - [help_ addLinkRange:NSMakeRange(0, title.length) |
| - withURL:url |
| - linkColor:message_.textColor]; |
| - [help_ sizeToFit]; |
| -} |
| - |
| - (void)buttonClicked { |
| - [delegate_ sadTabViewButtonClicked:self]; |
| + sadTab_->PerformAction(chrome::SadTab::Action::BUTTON); |
| } |
| // Called when someone clicks on the embedded link. |
| - (BOOL)textView:(NSTextView*)textView |
| clickedOnLink:(id)link |
| atIndex:(NSUInteger)charIndex { |
| - [delegate_ sadTabView:self helpLinkClickedWithURL:(NSString*)link]; |
| + sadTab_->PerformAction(chrome::SadTab::Action::HELP_LINK); |
| return YES; |
| } |
| +- (NSRange)textView:(NSTextView*)textView |
| + willChangeSelectionFromCharacterRange:(NSRange)oldSelectedCharRange |
| + toCharacterRange:(NSRange)newSelectedCharRange { |
| + return NSMakeRange(0, 0); |
| +} |
| + |
| @end |