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 965ba423f24432ae86ef611ed1cd5b7c649cbe9e..ab0187859abff637e2fb0fe9ca0f0fd9cc1b3822 100644 |
--- a/ui/message_center/cocoa/notification_controller.mm |
+++ b/ui/message_center/cocoa/notification_controller.mm |
@@ -203,6 +203,9 @@ |
// Initializes message_ in the given frame. |
- (void)configureBodyInFrame:(NSRect)rootFrame; |
+// Initializes contextMessage_ in the given frame. |
+- (void)configureContextMessageInFrame:(NSRect)rootFrame; |
+ |
// Creates a NSTextField that the caller owns configured as a label in a |
// notification. |
- (NSTextField*)newLabelWithFrame:(NSRect)frame; |
@@ -260,6 +263,10 @@ |
[self configureBodyInFrame:rootFrame]; |
[rootView addSubview:message_]; |
+ // Create the context message body. |
+ [self configureContextMessageInFrame:rootFrame]; |
+ [rootView addSubview:contextMessage_]; |
+ |
// Populate the data. |
[self updateNotification:notification_]; |
} |
@@ -285,9 +292,15 @@ |
CGFloat messageTopGap = |
roundf([[message_ font] ascender] - [[message_ font] capHeight]); |
+ CGFloat messageBottomGap = roundf(fabs([[message_ font] descender])); |
CGFloat messagePadding = |
message_center::kTextTopPadding - titleBottomGap - messageTopGap; |
+ CGFloat contextMessageTopGap = roundf( |
+ [[contextMessage_ font] ascender] - [[contextMessage_ font] capHeight]); |
+ CGFloat contextMessagePadding = |
+ message_center::kTextTopPadding - messageBottomGap - contextMessageTopGap; |
+ |
// Set the title and recalculate the frame. |
[title_ setStringValue:base::SysUTF16ToNSString( |
[self wrapText:notification_->title() |
@@ -300,26 +313,50 @@ |
// Set the message and recalculate the frame. |
[message_ setStringValue:base::SysUTF16ToNSString( |
[self wrapText:notification_->message() |
- forField:title_ |
+ forField:message_ |
maxNumberOfLines:message_center::kMessageExpandedLineLimit])]; |
- [message_ setHidden:NO]; |
[message_ sizeToFit]; |
NSRect messageFrame = [message_ frame]; |
- messageFrame.origin.y = |
- NSMinY(titleFrame) - messagePadding - NSHeight(messageFrame); |
- messageFrame.size.height = NSHeight([message_ frame]); |
- // Create the list item views (up to a maximum). |
- [listItemView_ removeFromSuperview]; |
+ // If there are list items, then the message_ view should not be displayed. |
const std::vector<message_center::NotificationItem>& items = |
notification->items(); |
- NSRect listFrame = NSZeroRect; |
if (items.size() > 0) { |
- // If there are list items, then the message_ view should not be displayed. |
[message_ setHidden:YES]; |
messageFrame.origin.y = titleFrame.origin.y; |
messageFrame.size.height = 0; |
+ } else { |
+ [message_ setHidden:NO]; |
+ messageFrame.origin.y = |
+ NSMinY(titleFrame) - messagePadding - NSHeight(messageFrame); |
+ messageFrame.size.height = NSHeight([message_ frame]); |
+ } |
+ // Set the context message and recalculate the frame. |
+ [contextMessage_ setStringValue:base::SysUTF16ToNSString( |
+ [self wrapText:notification_->context_message() |
+ forField:contextMessage_ |
+ maxNumberOfLines:message_center::kContextMessageLineLimit])]; |
+ [contextMessage_ sizeToFit]; |
+ NSRect contextMessageFrame = [contextMessage_ frame]; |
+ |
+ if (notification_->context_message().empty()) { |
+ [contextMessage_ setHidden:YES]; |
+ contextMessageFrame.origin.y = messageFrame.origin.y; |
+ contextMessageFrame.size.height = 0; |
+ } else { |
+ [contextMessage_ setHidden:NO]; |
+ contextMessageFrame.origin.y = |
+ NSMinY(messageFrame) - |
+ contextMessagePadding - |
+ NSHeight(contextMessageFrame); |
+ contextMessageFrame.size.height = NSHeight([contextMessage_ frame]); |
+ } |
+ |
+ // Create the list item views (up to a maximum). |
+ [listItemView_ removeFromSuperview]; |
+ NSRect listFrame = NSZeroRect; |
+ if (items.size() > 0) { |
listFrame = [self currentContentRect]; |
listFrame.origin.y = 0; |
listFrame.size.height = 0; |
@@ -348,10 +385,10 @@ |
} |
// TODO(thakis): The spacing is not completely right. |
CGFloat listTopPadding = |
- message_center::kTextTopPadding - messageTopGap; |
+ message_center::kTextTopPadding - contextMessageTopGap; |
listFrame.size.height = y; |
listFrame.origin.y = |
- NSMinY(titleFrame) - listTopPadding - NSHeight(listFrame); |
+ NSMinY(contextMessageFrame) - listTopPadding - NSHeight(listFrame); |
[listItemView_ setFrame:listFrame]; |
[[self view] addSubview:listItemView_]; |
} |
@@ -361,7 +398,7 @@ |
NSRect progressBarFrame = NSZeroRect; |
if (notification->type() == message_center::NOTIFICATION_TYPE_PROGRESS) { |
progressBarFrame = [self currentContentRect]; |
- progressBarFrame.origin.y = NSMinY(messageFrame) - |
+ progressBarFrame.origin.y = NSMinY(contextMessageFrame) - |
message_center::kProgressBarTopPadding - |
message_center::kProgressBarThickness; |
progressBarFrame.size.height = message_center::kProgressBarThickness; |
@@ -376,7 +413,7 @@ |
// If the bottom-most element so far is out of the rootView's bounds, resize |
// the view. |
- CGFloat minY = NSMinY(messageFrame); |
+ CGFloat minY = NSMinY(contextMessageFrame); |
if (listItemView_ && NSMinY(listFrame) < minY) |
minY = NSMinY(listFrame); |
if (progressBarView_ && NSMinY(progressBarFrame) < minY) |
@@ -386,6 +423,7 @@ |
rootFrame.size.height += delta; |
titleFrame.origin.y += delta; |
messageFrame.origin.y += delta; |
+ contextMessageFrame.origin.y += delta; |
listFrame.origin.y += delta; |
progressBarFrame.origin.y += delta; |
} |
@@ -456,6 +494,7 @@ |
rootFrame.size.height += NSHeight(frame); |
titleFrame.origin.y += NSHeight(frame); |
messageFrame.origin.y += NSHeight(frame); |
+ contextMessageFrame.origin.y += NSHeight(frame); |
listFrame.origin.y += NSHeight(frame); |
progressBarFrame.origin.y += NSHeight(frame); |
@@ -467,6 +506,7 @@ |
rootFrame.size.height += bottomAdjust; |
titleFrame.origin.y += bottomAdjust; |
messageFrame.origin.y += bottomAdjust; |
+ contextMessageFrame.origin.y += bottomAdjust; |
listFrame.origin.y += bottomAdjust; |
progressBarFrame.origin.y += bottomAdjust; |
} |
@@ -474,6 +514,7 @@ |
[[self view] setFrame:rootFrame]; |
[title_ setFrame:titleFrame]; |
[message_ setFrame:messageFrame]; |
+ [contextMessage_ setFrame:contextMessageFrame]; |
[listItemView_ setFrame:listFrame]; |
[progressBarView_ setFrame:progressBarFrame]; |
@@ -611,11 +652,22 @@ |
message_.reset([self newLabelWithFrame:frame]); |
[message_ setAutoresizingMask:NSViewMinYMargin]; |
[message_ setTextColor:gfx::SkColorToCalibratedNSColor( |
- message_center::kDimTextColor)]; |
+ message_center::kRegularTextColor)]; |
[message_ setFont: |
[NSFont messageFontOfSize:message_center::kMessageFontSize]]; |
} |
+- (void)configureContextMessageInFrame:(NSRect)rootFrame { |
+ NSRect frame = [self currentContentRect]; |
+ frame.size.height = 0; |
+ contextMessage_.reset([self newLabelWithFrame:frame]); |
+ [contextMessage_ setAutoresizingMask:NSViewMinYMargin]; |
+ [contextMessage_ setTextColor:gfx::SkColorToCalibratedNSColor( |
+ message_center::kDimTextColor)]; |
+ [contextMessage_ setFont: |
+ [NSFont messageFontOfSize:message_center::kMessageFontSize]]; |
+} |
+ |
- (NSTextField*)newLabelWithFrame:(NSRect)frame { |
NSTextField* label = [[NSTextField alloc] initWithFrame:frame]; |
[label setDrawsBackground:NO]; |