| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2009 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 #include "chrome/browser/ui/cocoa/sad_tab_view.h" | |
| 6 | |
| 7 #include "app/resource_bundle.h" | |
| 8 #include "base/logging.h" | |
| 9 #import "chrome/browser/ui/cocoa/hyperlink_button_cell.h" | |
| 10 #include "grit/theme_resources.h" | |
| 11 #import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" | |
| 12 | |
| 13 // Offset above vertical middle of page where contents of page start. | |
| 14 static const CGFloat kSadTabOffset = -64; | |
| 15 // Padding between icon and title. | |
| 16 static const CGFloat kIconTitleSpacing = 20; | |
| 17 // Padding between title and message. | |
| 18 static const CGFloat kTitleMessageSpacing = 15; | |
| 19 // Padding between message and link. | |
| 20 static const CGFloat kMessageLinkSpacing = 15; | |
| 21 // Paddings on left and right of page. | |
| 22 static const CGFloat kTabHorzMargin = 13; | |
| 23 | |
| 24 @implementation SadTabView | |
| 25 | |
| 26 - (void)awakeFromNib { | |
| 27 // Load resource for image and set it. | |
| 28 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | |
| 29 NSImage* image = rb.GetNativeImageNamed(IDR_SAD_TAB); | |
| 30 DCHECK(image); | |
| 31 [image_ setImage:image]; | |
| 32 | |
| 33 // Set font for title. | |
| 34 NSFont* titleFont = [NSFont boldSystemFontOfSize:[NSFont systemFontSize]]; | |
| 35 [title_ setFont:titleFont]; | |
| 36 | |
| 37 // Set font for message. | |
| 38 NSFont* messageFont = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; | |
| 39 [message_ setFont:messageFont]; | |
| 40 | |
| 41 // If necessary, set font and color for link. | |
| 42 if (linkButton_) { | |
| 43 [linkButton_ setFont:messageFont]; | |
| 44 [linkCell_ setTextColor:[NSColor whiteColor]]; | |
| 45 } | |
| 46 | |
| 47 // Initialize background color. | |
| 48 NSColor* backgroundColor = [[NSColor colorWithCalibratedRed:(35.0f/255.0f) | |
| 49 green:(48.0f/255.0f) | |
| 50 blue:(64.0f/255.0f) | |
| 51 alpha:1.0] retain]; | |
| 52 backgroundColor_.reset(backgroundColor); | |
| 53 } | |
| 54 | |
| 55 - (void)drawRect:(NSRect)dirtyRect { | |
| 56 // Paint background. | |
| 57 [backgroundColor_ set]; | |
| 58 NSRectFill(dirtyRect); | |
| 59 } | |
| 60 | |
| 61 - (void)resizeSubviewsWithOldSize:(NSSize)oldSize { | |
| 62 NSRect newBounds = [self bounds]; | |
| 63 CGFloat maxWidth = NSWidth(newBounds) - (kTabHorzMargin * 2); | |
| 64 BOOL callSizeToFit = (messageSize_.width == 0); | |
| 65 | |
| 66 // Set new frame origin for image. | |
| 67 NSRect iconFrame = [image_ frame]; | |
| 68 CGFloat iconX = (maxWidth - NSWidth(iconFrame)) / 2; | |
| 69 CGFloat iconY = | |
| 70 MIN(((NSHeight(newBounds) - NSHeight(iconFrame)) / 2) - kSadTabOffset, | |
| 71 NSHeight(newBounds) - NSHeight(iconFrame)); | |
| 72 iconX = floor(iconX); | |
| 73 iconY = floor(iconY); | |
| 74 [image_ setFrameOrigin:NSMakePoint(iconX, iconY)]; | |
| 75 | |
| 76 // Set new frame origin for title. | |
| 77 if (callSizeToFit) | |
| 78 [title_ sizeToFit]; | |
| 79 NSRect titleFrame = [title_ frame]; | |
| 80 CGFloat titleX = (maxWidth - NSWidth(titleFrame)) / 2; | |
| 81 CGFloat titleY = iconY - kIconTitleSpacing - NSHeight(titleFrame); | |
| 82 [title_ setFrameOrigin:NSMakePoint(titleX, titleY)]; | |
| 83 | |
| 84 // Set new frame for message, wrapping or unwrapping the text if necessary. | |
| 85 if (callSizeToFit) { | |
| 86 [message_ sizeToFit]; | |
| 87 messageSize_ = [message_ frame].size; | |
| 88 } | |
| 89 NSRect messageFrame = [message_ frame]; | |
| 90 if (messageSize_.width > maxWidth) { // Need to wrap message. | |
| 91 [message_ setFrameSize:NSMakeSize(maxWidth, messageSize_.height)]; | |
| 92 CGFloat heightChange = | |
| 93 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:message_]; | |
| 94 messageFrame.size.width = maxWidth; | |
| 95 messageFrame.size.height = messageSize_.height + heightChange; | |
| 96 messageFrame.origin.x = kTabHorzMargin; | |
| 97 } else { | |
| 98 if (!callSizeToFit) { | |
| 99 [message_ sizeToFit]; | |
| 100 messageFrame = [message_ frame]; | |
| 101 } | |
| 102 messageFrame.origin.x = (maxWidth - NSWidth(messageFrame)) / 2; | |
| 103 } | |
| 104 messageFrame.origin.y = | |
| 105 titleY - kTitleMessageSpacing - NSHeight(messageFrame); | |
| 106 [message_ setFrame:messageFrame]; | |
| 107 | |
| 108 if (linkButton_) { | |
| 109 if (callSizeToFit) | |
| 110 [linkButton_ sizeToFit]; | |
| 111 // Set new frame origin for link. | |
| 112 NSRect linkFrame = [linkButton_ frame]; | |
| 113 CGFloat linkX = (maxWidth - NSWidth(linkFrame)) / 2; | |
| 114 CGFloat linkY = | |
| 115 NSMinY(messageFrame) - kMessageLinkSpacing - NSHeight(linkFrame); | |
| 116 [linkButton_ setFrameOrigin:NSMakePoint(linkX, linkY)]; | |
| 117 } | |
| 118 } | |
| 119 | |
| 120 - (void)removeLinkButton { | |
| 121 if (linkButton_) { | |
| 122 [linkButton_ removeFromSuperview]; | |
| 123 linkButton_ = nil; | |
| 124 } | |
| 125 } | |
| 126 | |
| 127 @end | |
| OLD | NEW |