Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ui/message_center/cocoa/notification_controller.h" | 5 #import "ui/message_center/cocoa/notification_controller.h" |
| 6 | 6 |
| 7 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 196 | 196 |
| 197 // Initializes the closeButton_ ivar with the configured button. | 197 // Initializes the closeButton_ ivar with the configured button. |
| 198 - (void)configureCloseButtonInFrame:(NSRect)rootFrame; | 198 - (void)configureCloseButtonInFrame:(NSRect)rootFrame; |
| 199 | 199 |
| 200 // Initializes title_ in the given frame. | 200 // Initializes title_ in the given frame. |
| 201 - (void)configureTitleInFrame:(NSRect)rootFrame; | 201 - (void)configureTitleInFrame:(NSRect)rootFrame; |
| 202 | 202 |
| 203 // Initializes message_ in the given frame. | 203 // Initializes message_ in the given frame. |
| 204 - (void)configureBodyInFrame:(NSRect)rootFrame; | 204 - (void)configureBodyInFrame:(NSRect)rootFrame; |
| 205 | 205 |
| 206 // Initializes contextMessage_ in the given frame. | |
| 207 - (void)configureContextMessageInFrame:(NSRect)rootFrame; | |
| 208 | |
| 206 // Creates a NSTextField that the caller owns configured as a label in a | 209 // Creates a NSTextField that the caller owns configured as a label in a |
| 207 // notification. | 210 // notification. |
| 208 - (NSTextField*)newLabelWithFrame:(NSRect)frame; | 211 - (NSTextField*)newLabelWithFrame:(NSRect)frame; |
| 209 | 212 |
| 210 // Gets the rectangle in which notification content should be placed. This | 213 // Gets the rectangle in which notification content should be placed. This |
| 211 // rectangle is to the right of the icon and left of the control buttons. | 214 // rectangle is to the right of the icon and left of the control buttons. |
| 212 // This depends on the icon_ and closeButton_ being initialized. | 215 // This depends on the icon_ and closeButton_ being initialized. |
| 213 - (NSRect)currentContentRect; | 216 - (NSRect)currentContentRect; |
| 214 | 217 |
| 215 // Returns the wrapped text that could fit within the given text field with not | 218 // Returns the wrapped text that could fit within the given text field with not |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 253 [rootView addSubview:closeButton_]; | 256 [rootView addSubview:closeButton_]; |
| 254 | 257 |
| 255 // Create the title. | 258 // Create the title. |
| 256 [self configureTitleInFrame:rootFrame]; | 259 [self configureTitleInFrame:rootFrame]; |
| 257 [rootView addSubview:title_]; | 260 [rootView addSubview:title_]; |
| 258 | 261 |
| 259 // Create the message body. | 262 // Create the message body. |
| 260 [self configureBodyInFrame:rootFrame]; | 263 [self configureBodyInFrame:rootFrame]; |
| 261 [rootView addSubview:message_]; | 264 [rootView addSubview:message_]; |
| 262 | 265 |
| 266 // Create the context message body. | |
| 267 [self configureContextMessageInFrame:rootFrame]; | |
| 268 [rootView addSubview:contextMessage_]; | |
| 269 | |
| 263 // Populate the data. | 270 // Populate the data. |
| 264 [self updateNotification:notification_]; | 271 [self updateNotification:notification_]; |
| 265 } | 272 } |
| 266 | 273 |
| 267 - (NSRect)updateNotification:(const message_center::Notification*)notification { | 274 - (NSRect)updateNotification:(const message_center::Notification*)notification { |
| 268 DCHECK_EQ(notification->id(), notificationID_); | 275 DCHECK_EQ(notification->id(), notificationID_); |
| 269 notification_ = notification; | 276 notification_ = notification; |
| 270 | 277 |
| 271 NSRect rootFrame = NSMakeRect(0, 0, | 278 NSRect rootFrame = NSMakeRect(0, 0, |
| 272 message_center::kNotificationPreferredImageSize, | 279 message_center::kNotificationPreferredImageSize, |
| 273 message_center::kNotificationIconSize); | 280 message_center::kNotificationIconSize); |
| 274 | 281 |
| 275 // Update the icon. | 282 // Update the icon. |
| 276 [icon_ setImage:notification_->icon().AsNSImage()]; | 283 [icon_ setImage:notification_->icon().AsNSImage()]; |
| 277 | 284 |
| 278 // The message_center:: constants are relative to capHeight at the top and | 285 // The message_center:: constants are relative to capHeight at the top and |
| 279 // relative to the baseline at the bottom, but NSTextField uses the full line | 286 // relative to the baseline at the bottom, but NSTextField uses the full line |
| 280 // height for its height. | 287 // height for its height. |
| 281 CGFloat titleTopGap = | 288 CGFloat titleTopGap = |
| 282 roundf([[title_ font] ascender] - [[title_ font] capHeight]); | 289 roundf([[title_ font] ascender] - [[title_ font] capHeight]); |
| 283 CGFloat titleBottomGap = roundf(fabs([[title_ font] descender])); | 290 CGFloat titleBottomGap = roundf(fabs([[title_ font] descender])); |
| 284 CGFloat titlePadding = message_center::kTextTopPadding - titleTopGap; | 291 CGFloat titlePadding = message_center::kTextTopPadding - titleTopGap; |
| 285 | 292 |
| 286 CGFloat messageTopGap = | 293 CGFloat messageTopGap = |
| 287 roundf([[message_ font] ascender] - [[message_ font] capHeight]); | 294 roundf([[message_ font] ascender] - [[message_ font] capHeight]); |
| 295 CGFloat messageBottomGap = roundf(fabs([[message_ font] descender])); | |
| 288 CGFloat messagePadding = | 296 CGFloat messagePadding = |
| 289 message_center::kTextTopPadding - titleBottomGap - messageTopGap; | 297 message_center::kTextTopPadding - titleBottomGap - messageTopGap; |
| 290 | 298 |
| 299 CGFloat contextMessageTopGap = roundf( | |
| 300 [[contextMessage_ font] ascender] - [[contextMessage_ font] capHeight]); | |
| 301 CGFloat contextMessagePadding = | |
| 302 message_center::kTextTopPadding - messageBottomGap - contextMessageTopGap; | |
| 303 | |
| 291 // Set the title and recalculate the frame. | 304 // Set the title and recalculate the frame. |
| 292 [title_ setStringValue:base::SysUTF16ToNSString( | 305 [title_ setStringValue:base::SysUTF16ToNSString( |
| 293 [self wrapText:notification_->title() | 306 [self wrapText:notification_->title() |
| 294 forField:title_ | 307 forField:title_ |
| 295 maxNumberOfLines:message_center::kTitleLineLimit])]; | 308 maxNumberOfLines:message_center::kTitleLineLimit])]; |
| 296 [title_ sizeToFit]; | 309 [title_ sizeToFit]; |
| 297 NSRect titleFrame = [title_ frame]; | 310 NSRect titleFrame = [title_ frame]; |
| 298 titleFrame.origin.y = NSMaxY(rootFrame) - titlePadding - NSHeight(titleFrame); | 311 titleFrame.origin.y = NSMaxY(rootFrame) - titlePadding - NSHeight(titleFrame); |
| 299 | 312 |
| 300 // Set the message and recalculate the frame. | 313 // Set the message and recalculate the frame. |
| 301 [message_ setStringValue:base::SysUTF16ToNSString( | 314 [message_ setStringValue:base::SysUTF16ToNSString( |
| 302 [self wrapText:notification_->message() | 315 [self wrapText:notification_->message() |
| 303 forField:title_ | 316 forField:message_ |
| 304 maxNumberOfLines:message_center::kMessageExpandedLineLimit])]; | 317 maxNumberOfLines:message_center::kMessageExpandedLineLimit])]; |
| 305 [message_ setHidden:NO]; | |
| 306 [message_ sizeToFit]; | 318 [message_ sizeToFit]; |
| 307 NSRect messageFrame = [message_ frame]; | 319 NSRect messageFrame = [message_ frame]; |
| 308 messageFrame.origin.y = | |
| 309 NSMinY(titleFrame) - messagePadding - NSHeight(messageFrame); | |
| 310 messageFrame.size.height = NSHeight([message_ frame]); | |
| 311 | 320 |
| 312 // Create the list item views (up to a maximum). | 321 // Need to hide the message if there are items. |
|
jianli
2013/08/28 21:30:54
Do we also do this on views?
dewittj
2013/08/29 17:40:10
Yes. This isn't new, just added a comment for fun
| |
| 313 [listItemView_ removeFromSuperview]; | |
| 314 const std::vector<message_center::NotificationItem>& items = | 322 const std::vector<message_center::NotificationItem>& items = |
| 315 notification->items(); | 323 notification->items(); |
| 316 NSRect listFrame = NSZeroRect; | |
| 317 if (items.size() > 0) { | 324 if (items.size() > 0) { |
| 318 // If there are list items, then the message_ view should not be displayed. | 325 // If there are list items, then the message_ view should not be displayed. |
| 319 [message_ setHidden:YES]; | 326 [message_ setHidden:YES]; |
| 320 messageFrame.origin.y = titleFrame.origin.y; | 327 messageFrame.origin.y = titleFrame.origin.y; |
| 321 messageFrame.size.height = 0; | 328 messageFrame.size.height = 0; |
| 329 } else { | |
| 330 [message_ setHidden:NO]; | |
| 331 messageFrame.origin.y = | |
| 332 NSMinY(titleFrame) - messagePadding - NSHeight(messageFrame); | |
| 333 messageFrame.size.height = NSHeight([message_ frame]); | |
| 334 } | |
| 322 | 335 |
| 336 // Set the context message and recalculate the frame. | |
| 337 [contextMessage_ setStringValue:base::SysUTF16ToNSString( | |
| 338 [self wrapText:notification_->context_message() | |
| 339 forField:contextMessage_ | |
| 340 maxNumberOfLines:message_center::kContextMessageLineLimit])]; | |
| 341 [contextMessage_ sizeToFit]; | |
| 342 NSRect contextMessageFrame = [contextMessage_ frame]; | |
| 343 | |
| 344 if (notification_->context_message().length() == 0) { | |
|
jianli
2013/08/28 21:30:54
nit: empty()
dewittj
2013/08/29 17:40:10
Done.
| |
| 345 [contextMessage_ setHidden:YES]; | |
| 346 contextMessageFrame.origin.y = messageFrame.origin.y; | |
| 347 contextMessageFrame.size.height = 0; | |
| 348 } else { | |
| 349 [contextMessage_ setHidden:NO]; | |
| 350 contextMessageFrame.origin.y = | |
| 351 NSMinY(messageFrame) - | |
| 352 contextMessagePadding - | |
| 353 NSHeight(contextMessageFrame); | |
| 354 contextMessageFrame.size.height = NSHeight([contextMessage_ frame]); | |
| 355 } | |
| 356 | |
| 357 // Create the list item views (up to a maximum). | |
| 358 [listItemView_ removeFromSuperview]; | |
| 359 NSRect listFrame = NSZeroRect; | |
| 360 if (items.size() > 0) { | |
| 323 listFrame = [self currentContentRect]; | 361 listFrame = [self currentContentRect]; |
| 324 listFrame.origin.y = 0; | 362 listFrame.origin.y = 0; |
| 325 listFrame.size.height = 0; | 363 listFrame.size.height = 0; |
| 326 listItemView_.reset([[NSView alloc] initWithFrame:listFrame]); | 364 listItemView_.reset([[NSView alloc] initWithFrame:listFrame]); |
| 327 [listItemView_ accessibilitySetOverrideValue:NSAccessibilityListRole | 365 [listItemView_ accessibilitySetOverrideValue:NSAccessibilityListRole |
| 328 forAttribute:NSAccessibilityRoleAttribute]; | 366 forAttribute:NSAccessibilityRoleAttribute]; |
| 329 [listItemView_ | 367 [listItemView_ |
| 330 accessibilitySetOverrideValue:NSAccessibilityContentListSubrole | 368 accessibilitySetOverrideValue:NSAccessibilityContentListSubrole |
| 331 forAttribute:NSAccessibilitySubroleAttribute]; | 369 forAttribute:NSAccessibilitySubroleAttribute]; |
| 332 CGFloat y = 0; | 370 CGFloat y = 0; |
| 333 | 371 |
| 334 NSFont* font = [NSFont systemFontOfSize:message_center::kMessageFontSize]; | 372 NSFont* font = [NSFont systemFontOfSize:message_center::kMessageFontSize]; |
| 335 CGFloat lineHeight = roundf(NSHeight([font boundingRectForFont])); | 373 CGFloat lineHeight = roundf(NSHeight([font boundingRectForFont])); |
| 336 | 374 |
| 337 const int kNumNotifications = | 375 const int kNumNotifications = |
| 338 std::min(items.size(), message_center::kNotificationMaximumItems); | 376 std::min(items.size(), message_center::kNotificationMaximumItems); |
| 339 for (int i = kNumNotifications - 1; i >= 0; --i) { | 377 for (int i = kNumNotifications - 1; i >= 0; --i) { |
| 340 NSTextField* field = [self newLabelWithFrame: | 378 NSTextField* field = [self newLabelWithFrame: |
| 341 NSMakeRect(0, y, NSWidth(listFrame), lineHeight)]; | 379 NSMakeRect(0, y, NSWidth(listFrame), lineHeight)]; |
| 342 [[field cell] setUsesSingleLineMode:YES]; | 380 [[field cell] setUsesSingleLineMode:YES]; |
| 343 [field setAttributedStringValue: | 381 [field setAttributedStringValue: |
| 344 [MCNotificationController attributedStringForItem:items[i] | 382 [MCNotificationController attributedStringForItem:items[i] |
| 345 font:font]]; | 383 font:font]]; |
| 346 [listItemView_ addSubview:field]; | 384 [listItemView_ addSubview:field]; |
| 347 y += lineHeight; | 385 y += lineHeight; |
| 348 } | 386 } |
| 349 // TODO(thakis): The spacing is not completely right. | 387 // TODO(thakis): The spacing is not completely right. |
| 350 CGFloat listTopPadding = | 388 CGFloat listTopPadding = |
| 351 message_center::kTextTopPadding - messageTopGap; | 389 message_center::kTextTopPadding - contextMessageTopGap; |
| 352 listFrame.size.height = y; | 390 listFrame.size.height = y; |
| 353 listFrame.origin.y = | 391 listFrame.origin.y = |
| 354 NSMinY(titleFrame) - listTopPadding - NSHeight(listFrame); | 392 NSMinY(contextMessageFrame) - listTopPadding - NSHeight(listFrame); |
| 355 [listItemView_ setFrame:listFrame]; | 393 [listItemView_ setFrame:listFrame]; |
| 356 [[self view] addSubview:listItemView_]; | 394 [[self view] addSubview:listItemView_]; |
| 357 } | 395 } |
| 358 | 396 |
| 359 // Create the progress bar view if needed. | 397 // Create the progress bar view if needed. |
| 360 [progressBarView_ removeFromSuperview]; | 398 [progressBarView_ removeFromSuperview]; |
| 361 NSRect progressBarFrame = NSZeroRect; | 399 NSRect progressBarFrame = NSZeroRect; |
| 362 if (notification->type() == message_center::NOTIFICATION_TYPE_PROGRESS) { | 400 if (notification->type() == message_center::NOTIFICATION_TYPE_PROGRESS) { |
| 363 progressBarFrame = [self currentContentRect]; | 401 progressBarFrame = [self currentContentRect]; |
| 364 progressBarFrame.origin.y = NSMinY(messageFrame) - | 402 progressBarFrame.origin.y = NSMinY(contextMessageFrame) - |
| 365 message_center::kProgressBarTopPadding - | 403 message_center::kProgressBarTopPadding - |
| 366 message_center::kProgressBarThickness; | 404 message_center::kProgressBarThickness; |
| 367 progressBarFrame.size.height = message_center::kProgressBarThickness; | 405 progressBarFrame.size.height = message_center::kProgressBarThickness; |
| 368 progressBarView_.reset( | 406 progressBarView_.reset( |
| 369 [[MCNotificationProgressBar alloc] initWithFrame:progressBarFrame]); | 407 [[MCNotificationProgressBar alloc] initWithFrame:progressBarFrame]); |
| 370 // Setting indeterminate to NO does not work with custom drawRect. | 408 // Setting indeterminate to NO does not work with custom drawRect. |
| 371 [progressBarView_ setIndeterminate:YES]; | 409 [progressBarView_ setIndeterminate:YES]; |
| 372 [progressBarView_ setStyle:NSProgressIndicatorBarStyle]; | 410 [progressBarView_ setStyle:NSProgressIndicatorBarStyle]; |
| 373 [progressBarView_ setDoubleValue:notification->progress()]; | 411 [progressBarView_ setDoubleValue:notification->progress()]; |
| 374 [[self view] addSubview:progressBarView_]; | 412 [[self view] addSubview:progressBarView_]; |
| 375 } | 413 } |
| 376 | 414 |
| 377 // If the bottom-most element so far is out of the rootView's bounds, resize | 415 // If the bottom-most element so far is out of the rootView's bounds, resize |
| 378 // the view. | 416 // the view. |
| 379 CGFloat minY = NSMinY(messageFrame); | 417 CGFloat minY = NSMinY(contextMessageFrame); |
| 380 if (listItemView_ && NSMinY(listFrame) < minY) | 418 if (listItemView_ && NSMinY(listFrame) < minY) |
| 381 minY = NSMinY(listFrame); | 419 minY = NSMinY(listFrame); |
| 382 if (progressBarView_ && NSMinY(progressBarFrame) < minY) | 420 if (progressBarView_ && NSMinY(progressBarFrame) < minY) |
| 383 minY = NSMinY(progressBarFrame); | 421 minY = NSMinY(progressBarFrame); |
| 384 if (minY < messagePadding) { | 422 if (minY < messagePadding) { |
| 385 CGFloat delta = messagePadding - minY; | 423 CGFloat delta = messagePadding - minY; |
| 386 rootFrame.size.height += delta; | 424 rootFrame.size.height += delta; |
| 387 titleFrame.origin.y += delta; | 425 titleFrame.origin.y += delta; |
| 388 messageFrame.origin.y += delta; | 426 messageFrame.origin.y += delta; |
| 427 contextMessageFrame.origin.y += delta; | |
| 389 listFrame.origin.y += delta; | 428 listFrame.origin.y += delta; |
| 390 progressBarFrame.origin.y += delta; | 429 progressBarFrame.origin.y += delta; |
| 391 } | 430 } |
| 392 | 431 |
| 393 // Add the bottom container view. | 432 // Add the bottom container view. |
| 394 NSRect frame = rootFrame; | 433 NSRect frame = rootFrame; |
| 395 frame.size.height = 0; | 434 frame.size.height = 0; |
| 396 [bottomView_ removeFromSuperview]; | 435 [bottomView_ removeFromSuperview]; |
| 397 bottomView_.reset([[NSView alloc] initWithFrame:frame]); | 436 bottomView_.reset([[NSView alloc] initWithFrame:frame]); |
| 398 CGFloat y = 0; | 437 CGFloat y = 0; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 449 frame.size.height += NSHeight(imageFrame); | 488 frame.size.height += NSHeight(imageFrame); |
| 450 [bottomView_ addSubview:imageView]; | 489 [bottomView_ addSubview:imageView]; |
| 451 } | 490 } |
| 452 | 491 |
| 453 [bottomView_ setFrame:frame]; | 492 [bottomView_ setFrame:frame]; |
| 454 [[self view] addSubview:bottomView_]; | 493 [[self view] addSubview:bottomView_]; |
| 455 | 494 |
| 456 rootFrame.size.height += NSHeight(frame); | 495 rootFrame.size.height += NSHeight(frame); |
| 457 titleFrame.origin.y += NSHeight(frame); | 496 titleFrame.origin.y += NSHeight(frame); |
| 458 messageFrame.origin.y += NSHeight(frame); | 497 messageFrame.origin.y += NSHeight(frame); |
| 498 contextMessageFrame.origin.y += NSHeight(frame); | |
| 459 listFrame.origin.y += NSHeight(frame); | 499 listFrame.origin.y += NSHeight(frame); |
| 460 progressBarFrame.origin.y += NSHeight(frame); | 500 progressBarFrame.origin.y += NSHeight(frame); |
| 461 | 501 |
| 462 // Make sure that there is a minimum amount of spacing below the icon and | 502 // Make sure that there is a minimum amount of spacing below the icon and |
| 463 // the edge of the frame. | 503 // the edge of the frame. |
| 464 CGFloat bottomDelta = NSHeight(rootFrame) - NSHeight([icon_ frame]); | 504 CGFloat bottomDelta = NSHeight(rootFrame) - NSHeight([icon_ frame]); |
| 465 if (bottomDelta > 0 && bottomDelta < message_center::kIconBottomPadding) { | 505 if (bottomDelta > 0 && bottomDelta < message_center::kIconBottomPadding) { |
| 466 CGFloat bottomAdjust = message_center::kIconBottomPadding - bottomDelta; | 506 CGFloat bottomAdjust = message_center::kIconBottomPadding - bottomDelta; |
| 467 rootFrame.size.height += bottomAdjust; | 507 rootFrame.size.height += bottomAdjust; |
| 468 titleFrame.origin.y += bottomAdjust; | 508 titleFrame.origin.y += bottomAdjust; |
| 469 messageFrame.origin.y += bottomAdjust; | 509 messageFrame.origin.y += bottomAdjust; |
| 510 contextMessageFrame.origin.y += bottomAdjust; | |
| 470 listFrame.origin.y += bottomAdjust; | 511 listFrame.origin.y += bottomAdjust; |
| 471 progressBarFrame.origin.y += bottomAdjust; | 512 progressBarFrame.origin.y += bottomAdjust; |
| 472 } | 513 } |
| 473 | 514 |
| 474 [[self view] setFrame:rootFrame]; | 515 [[self view] setFrame:rootFrame]; |
| 475 [title_ setFrame:titleFrame]; | 516 [title_ setFrame:titleFrame]; |
| 476 [message_ setFrame:messageFrame]; | 517 [message_ setFrame:messageFrame]; |
| 518 [contextMessage_ setFrame:contextMessageFrame]; | |
| 477 [listItemView_ setFrame:listFrame]; | 519 [listItemView_ setFrame:listFrame]; |
| 478 [progressBarView_ setFrame:progressBarFrame]; | 520 [progressBarView_ setFrame:progressBarFrame]; |
| 479 | 521 |
| 480 return rootFrame; | 522 return rootFrame; |
| 481 } | 523 } |
| 482 | 524 |
| 483 - (void)close:(id)sender { | 525 - (void)close:(id)sender { |
| 484 [closeButton_ setTarget:nil]; | 526 [closeButton_ setTarget:nil]; |
| 485 messageCenter_->RemoveNotification([self notificationID], /*by_user=*/true); | 527 messageCenter_->RemoveNotification([self notificationID], /*by_user=*/true); |
| 486 } | 528 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 609 NSRect frame = [self currentContentRect]; | 651 NSRect frame = [self currentContentRect]; |
| 610 frame.size.height = 0; | 652 frame.size.height = 0; |
| 611 message_.reset([self newLabelWithFrame:frame]); | 653 message_.reset([self newLabelWithFrame:frame]); |
| 612 [message_ setAutoresizingMask:NSViewMinYMargin]; | 654 [message_ setAutoresizingMask:NSViewMinYMargin]; |
| 613 [message_ setTextColor:gfx::SkColorToCalibratedNSColor( | 655 [message_ setTextColor:gfx::SkColorToCalibratedNSColor( |
| 614 message_center::kDimTextColor)]; | 656 message_center::kDimTextColor)]; |
| 615 [message_ setFont: | 657 [message_ setFont: |
| 616 [NSFont messageFontOfSize:message_center::kMessageFontSize]]; | 658 [NSFont messageFontOfSize:message_center::kMessageFontSize]]; |
| 617 } | 659 } |
| 618 | 660 |
| 661 - (void)configureContextMessageInFrame:(NSRect)rootFrame { | |
| 662 NSRect frame = [self currentContentRect]; | |
| 663 frame.size.height = 0; | |
| 664 contextMessage_.reset([self newLabelWithFrame:frame]); | |
| 665 [contextMessage_ setAutoresizingMask:NSViewMinYMargin]; | |
| 666 [contextMessage_ setTextColor:gfx::SkColorToCalibratedNSColor( | |
| 667 message_center::kContextTextColor)]; | |
| 668 NSFont* messageFont = | |
| 669 [NSFont messageFontOfSize:message_center::kMessageFontSize]; | |
| 670 [contextMessage_ setFont: | |
| 671 [[NSFontManager sharedFontManager] convertFont:messageFont | |
| 672 toHaveTrait:NSBoldFontMask]]; | |
| 673 } | |
| 674 | |
| 619 - (NSTextField*)newLabelWithFrame:(NSRect)frame { | 675 - (NSTextField*)newLabelWithFrame:(NSRect)frame { |
| 620 NSTextField* label = [[NSTextField alloc] initWithFrame:frame]; | 676 NSTextField* label = [[NSTextField alloc] initWithFrame:frame]; |
| 621 [label setDrawsBackground:NO]; | 677 [label setDrawsBackground:NO]; |
| 622 [label setBezeled:NO]; | 678 [label setBezeled:NO]; |
| 623 [label setEditable:NO]; | 679 [label setEditable:NO]; |
| 624 [label setSelectable:NO]; | 680 [label setSelectable:NO]; |
| 625 return label; | 681 return label; |
| 626 } | 682 } |
| 627 | 683 |
| 628 - (NSRect)currentContentRect { | 684 - (NSRect)currentContentRect { |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 655 if (font.GetStringWidth(last) > width) | 711 if (font.GetStringWidth(last) > width) |
| 656 last = ui::ElideText(last, font, width, ui::ELIDE_AT_END); | 712 last = ui::ElideText(last, font, width, ui::ELIDE_AT_END); |
| 657 wrapped.resize(lines - 1); | 713 wrapped.resize(lines - 1); |
| 658 wrapped.push_back(last); | 714 wrapped.push_back(last); |
| 659 } | 715 } |
| 660 | 716 |
| 661 return JoinString(wrapped, '\n'); | 717 return JoinString(wrapped, '\n'); |
| 662 } | 718 } |
| 663 | 719 |
| 664 @end | 720 @end |
| OLD | NEW |