Index: ui/message_center/cocoa/notification_controller.mm |
diff --git a/ui/message_center/cocoa/notification_controller.mm b/ui/message_center/cocoa/notification_controller.mm |
index 60fb4865e0845ddfd0d7516cd82c71e09bffc8e5..202e5244d53a4d520df8ab6741a89418329bee0e 100644 |
--- a/ui/message_center/cocoa/notification_controller.mm |
+++ b/ui/message_center/cocoa/notification_controller.mm |
@@ -20,6 +20,7 @@ namespace { |
const int kTextTopPaddingAdjustment = -6; |
} // namespace |
+ |
@interface MCNotificationController (Private) |
// Configures a NSBox to be borderless, titleless, and otherwise appearance- |
// free. |
@@ -81,19 +82,55 @@ const int kTextTopPaddingAdjustment = -6; |
[rootView addSubview:title_]; |
// Create the message body. |
- [self configureBodyInFrame:rootFrame maxY:NSMinY([title_ frame])]; |
+ [self configureBodyInFrame:rootFrame]; |
[rootView addSubview:message_]; |
+ // Populate the data. |
+ [self updateNotification:notification_]; |
+} |
+ |
+- (NSRect)updateNotification:(const message_center::Notification*)notification { |
+ DCHECK_EQ(notification->id(), notificationID_); |
+ notification_ = notification; |
+ |
+ NSRect rootFrame = NSMakeRect(0, 0, |
+ message_center::kNotificationPreferredImageSize, |
+ message_center::kNotificationIconSize); |
+ |
+ // Update the icon. |
+ [icon_ setImage:notification_->icon().AsNSImage()]; |
+ |
+ // Set the title and recalculate the frame. |
+ [title_ setStringValue:base::SysUTF16ToNSString(notification_->title())]; |
+ [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:title_]; |
+ NSRect titleFrame = [title_ frame]; |
+ titleFrame.origin.y = NSMaxY(rootFrame) - message_center::kTextTopPadding - |
+ NSHeight(titleFrame); |
+ |
+ // Set the message and recalculate the frame. |
+ [message_ setStringValue:base::SysUTF16ToNSString(notification_->message())]; |
+ [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:message_]; |
+ NSRect messageFrame = [message_ frame]; |
+ messageFrame.origin.y = NSMinY(titleFrame) - message_center::kTextTopPadding - |
+ NSHeight(messageFrame); |
+ messageFrame.size.height = NSHeight([message_ frame]); |
+ |
// In this basic notification UI, the message body is the bottom-most |
// vertical element. If it is out of the rootView's bounds, resize the view. |
- if (NSMinY([message_ frame]) < |
+ if (NSMinY(messageFrame) < |
message_center::kTextTopPadding + kTextTopPaddingAdjustment) { |
- rootFrame.size.height += message_center::kTextTopPadding + |
- kTextTopPaddingAdjustment - |
- NSMinY([message_ frame]); |
+ CGFloat delta = message_center::kTextTopPadding + |
+ kTextTopPaddingAdjustment - NSMinY(messageFrame); |
+ rootFrame.size.height += delta; |
+ titleFrame.origin.y += delta; |
+ messageFrame.origin.y += delta; |
} |
- [rootView setFrame:rootFrame]; |
+ [[self view] setFrame:rootFrame]; |
+ [title_ setFrame:titleFrame]; |
+ [message_ setFrame:messageFrame]; |
+ |
+ return rootFrame; |
} |
- (void)close:(id)sender { |
@@ -131,7 +168,6 @@ const int kTextTopPaddingAdjustment = -6; |
// Inside the image box put the actual icon view. |
icon_.reset([[NSImageView alloc] initWithFrame:imageFrame]); |
- [icon_ setImage:notification_->icon().AsNSImage()]; |
[imageBox setContentView:icon_]; |
return imageBox.autorelease(); |
@@ -163,35 +199,19 @@ const int kTextTopPaddingAdjustment = -6; |
- (void)configureTitleInFrame:(NSRect)rootFrame { |
NSRect frame = [self currentContentRect]; |
- |
- title_.reset([self newLabelWithFrame:NSMakeRect(0, 0, NSWidth(frame), 0)]); |
+ frame.size.height = 0; |
+ title_.reset([self newLabelWithFrame:frame]); |
[title_ setAutoresizingMask:NSViewMinYMargin]; |
- [title_ setStringValue:base::SysUTF16ToNSString(notification_->title())]; |
[title_ setFont:[NSFont messageFontOfSize:message_center::kTitleFontSize]]; |
- |
- CGFloat delta = |
- [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:title_]; |
- frame.size.height = delta; |
- frame.origin.y = NSMaxY(rootFrame) - message_center::kTextTopPadding + |
- kTextTopPaddingAdjustment - delta; |
- [title_ setFrame:frame]; |
} |
-- (void)configureBodyInFrame:(NSRect)rootFrame maxY:(CGFloat)maxY { |
+- (void)configureBodyInFrame:(NSRect)rootFrame { |
NSRect frame = [self currentContentRect]; |
- |
- message_.reset([self newLabelWithFrame:NSMakeRect(0, 0, NSWidth(frame), 0)]); |
+ frame.size.height = 0; |
+ message_.reset([self newLabelWithFrame:frame]); |
[message_ setAutoresizingMask:NSViewMinYMargin]; |
- [message_ setStringValue:base::SysUTF16ToNSString(notification_->message())]; |
[message_ setFont: |
[NSFont messageFontOfSize:message_center::kMessageFontSize]]; |
- |
- CGFloat delta = |
- [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:message_]; |
- frame.size.height = delta; |
- frame.origin.y = maxY - message_center::kTextTopPadding + |
- kTextTopPaddingAdjustment - delta; |
- [message_ setFrame:frame]; |
} |
- (NSTextField*)newLabelWithFrame:(NSRect)frame { |