Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: ui/message_center/cocoa/status_item_view.mm

Issue 16159005: [Mac][MC] Adjust the size of the status item view based on the unread count. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | ui/message_center/cocoa/status_item_view_unittest.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/status_item_view.h" 5 #import "ui/message_center/cocoa/status_item_view.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "grit/ui_resources.h" 10 #include "grit/ui_resources.h"
11 #include "ui/base/resource/resource_bundle.h" 11 #include "ui/base/resource/resource_bundle.h"
12 12
13 namespace { 13 namespace {
14 14
15 // The width of the status bar. 15 // The width of the status bar item when it's just the icon.
16 const CGFloat kStatusItemLength = 45; 16 const CGFloat kStatusItemLengthIcon = 27;
17
18 // The width of the status bar item when it's the icon and a number.
19 const CGFloat kStatusItemLengthNumber = 35;
20
21 // The width of the status bar item when it's the icon, a number, and a + sign.
sail 2013/05/28 19:40:22 I was a little surprised by this approach. I thoug
22 const CGFloat kStatusItemLengthNumberPlus = 43;
17 23
18 // The amount of space between the edge of the status item and where the icon 24 // The amount of space between the edge of the status item and where the icon
19 // should start drawing. 25 // should start drawing.
20 const CGFloat kInset = 6; 26 const CGFloat kInset = 5;
27
28 // The amount of space between the icon and the unread count number.
29 const CGFloat kUnreadCountLeftMargin = 3;
30
31 // The lower-left Y coordinate of the unread count number.
32 const CGFloat kUnreadCountMinY = 4;
21 33
22 } // namespace 34 } // namespace
23 35
24 @implementation MCStatusItemView 36 @implementation MCStatusItemView
25 37
26 @synthesize unreadCount = unreadCount_; 38 @synthesize unreadCount = unreadCount_;
27 @synthesize highlight = highlight_; 39 @synthesize highlight = highlight_;
28 40
29 - (id)initWithStatusItem:(NSStatusItem*)item { 41 - (id)initWithStatusItem:(NSStatusItem*)item {
30 CGFloat thickness = [[item statusBar] thickness]; 42 CGFloat thickness = [[item statusBar] thickness];
31 NSRect frame = NSMakeRect(0, 0, kStatusItemLength, thickness); 43 NSRect frame = NSMakeRect(0, 0, kStatusItemLengthIcon, thickness);
32 if ((self = [super initWithFrame:frame])) { 44 if ((self = [super initWithFrame:frame])) {
33 statusItem_.reset([item retain]); 45 statusItem_.reset([item retain]);
34 [statusItem_ setView:self]; 46 [statusItem_ setView:self];
35 } 47 }
36 return self; 48 return self;
37 } 49 }
38 50
39 - (message_center::StatusItemClickedCallack)callback { 51 - (message_center::StatusItemClickedCallack)callback {
40 return callback_.get(); 52 return callback_.get();
41 } 53 }
42 54
43 - (void)setCallback:(message_center::StatusItemClickedCallack)callback { 55 - (void)setCallback:(message_center::StatusItemClickedCallack)callback {
44 callback_.reset(Block_copy(callback)); 56 callback_.reset(Block_copy(callback));
45 } 57 }
46 58
47 - (void)setUnreadCount:(size_t)unreadCount { 59 - (void)setUnreadCount:(size_t)unreadCount {
48 unreadCount_ = unreadCount; 60 unreadCount_ = unreadCount;
61
62 NSRect frame = [self frame];
63 if (unreadCount_ == 0)
64 frame.size.width = kStatusItemLengthIcon;
65 else if (unreadCount_ < 10)
66 frame.size.width = kStatusItemLengthNumber;
67 else
68 frame.size.width = kStatusItemLengthNumberPlus;
69 [self setFrame:frame];
70
49 [self setNeedsDisplay:YES]; 71 [self setNeedsDisplay:YES];
50 } 72 }
51 73
52 - (void)setHighlight:(BOOL)highlight { 74 - (void)setHighlight:(BOOL)highlight {
53 highlight_ = highlight; 75 highlight_ = highlight;
54 [self setNeedsDisplay:YES]; 76 [self setNeedsDisplay:YES];
55 } 77 }
56 78
57 - (void)mouseDown:(NSEvent*)event { 79 - (void)mouseDown:(NSEvent*)event {
58 DCHECK(!inMouseEventSequence_); 80 DCHECK(!inMouseEventSequence_);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 else 121 else
100 count = [NSString stringWithFormat:@"%"PRIuS, unreadCount_]; 122 count = [NSString stringWithFormat:@"%"PRIuS, unreadCount_];
101 123
102 NSColor* fontColor = highlight ? [NSColor whiteColor] 124 NSColor* fontColor = highlight ? [NSColor whiteColor]
103 : [NSColor blackColor]; 125 : [NSColor blackColor];
104 NSDictionary* attributes = @{ 126 NSDictionary* attributes = @{
105 NSFontAttributeName: [NSFont fontWithName:@"Helvetica-Bold" size:12], 127 NSFontAttributeName: [NSFont fontWithName:@"Helvetica-Bold" size:12],
106 NSForegroundColorAttributeName: fontColor, 128 NSForegroundColorAttributeName: fontColor,
107 }; 129 };
108 130
109 // Center the string inside the remaining space of the status item.
110 NSSize stringSize = [count sizeWithAttributes:attributes];
111 NSRect iconSlice, textSlice;
112 NSDivideRect(frame, &iconSlice, &textSlice, NSMaxX(drawRect), NSMinXEdge);
113 NSPoint countPoint = NSMakePoint( 131 NSPoint countPoint = NSMakePoint(
114 floorf(NSMinX(textSlice) + (NSWidth(textSlice) - stringSize.width) / 2), 132 NSMaxX(drawRect) + kUnreadCountLeftMargin, kUnreadCountMinY);
115 floorf(NSMinY(textSlice) +
116 (NSHeight(textSlice) - stringSize.height) / 2));
117
118 [count drawAtPoint:countPoint withAttributes:attributes]; 133 [count drawAtPoint:countPoint withAttributes:attributes];
119 } 134 }
120 } 135 }
121 136
122 @end 137 @end
OLDNEW
« no previous file with comments | « no previous file | ui/message_center/cocoa/status_item_view_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698