Index: chrome/browser/cocoa/download_item_cell.mm |
diff --git a/chrome/browser/cocoa/download_item_cell.mm b/chrome/browser/cocoa/download_item_cell.mm |
index 3890807097c65c500a0a16d9e8a074ef08003e4e..d5758cab778e212eba266c03eeffb16bbf44fe39 100644 |
--- a/chrome/browser/cocoa/download_item_cell.mm |
+++ b/chrome/browser/cocoa/download_item_cell.mm |
@@ -21,7 +21,7 @@ namespace { |
const CGFloat kImagePaddingTop = 7; |
// Distance from left border to icon |
-const CGFloat kImagePaddingLeft = 8; |
+const CGFloat kImagePaddingLeft = 9; |
// Width of icon |
const CGFloat kImageWidth = 16; |
@@ -38,14 +38,17 @@ const CGFloat kTextPaddingRight = 3; |
// y coordinate of download name string, in view coords, when status message |
// is visible |
-const CGFloat kPrimaryTextPosTop = 5; |
+const CGFloat kPrimaryTextPosTop = 3; |
// y coordinate of download name string, in view coords, when status message |
// is not visible |
const CGFloat kPrimaryTextOnlyPosTop = 10; |
// y coordinate of status message, in view coords |
-const CGFloat kSecondaryTextPosTop = 17; |
+const CGFloat kSecondaryTextPosTop = 18; |
+ |
+// Grey value of status text |
+const CGFloat kSecondaryTextColor = 0.5; |
// Width of dropdown area on the right (includes 1px for the border on each |
// side). |
@@ -57,6 +60,9 @@ const CGFloat kDropdownArrowWidth = 5; |
// Height of dropdown arrow |
const CGFloat kDropdownArrowHeight = 3; |
+// Vertical displacement of dropdown area, relative to the "centered" position. |
+const CGFloat kDropdownAreaY = -2; |
+ |
// Duration of the two-lines-to-one-line animation, in seconds |
NSTimeInterval kHideStatusDuration = 0.3; |
@@ -79,6 +85,8 @@ const int kCompleteAnimationDuration = 2.5; |
- (void)hideSecondaryTitle; |
- (void)animation:(NSAnimation*)animation |
progressed:(NSAnimationProgress)progress; |
+- (NSString*)elideTitle:(int)availableWidth; |
+- (NSString*)elideStatus:(int)availableWidth; |
@end |
@implementation DownloadItemCell |
@@ -94,7 +102,7 @@ const int kCompleteAnimationDuration = 2.5; |
[self setFont:[NSFont systemFontOfSize: |
[NSFont systemFontSizeForControlSize:NSSmallControlSize]]]; |
[self setSecondaryFont:[NSFont systemFontOfSize: |
- [NSFont systemFontSizeForControlSize:NSMiniControlSize]]]; |
+ [NSFont systemFontSizeForControlSize:NSSmallControlSize]]]; |
[self updateTrackingAreas:self]; |
[[NSNotificationCenter defaultCenter] |
@@ -285,19 +293,29 @@ const int kCompleteAnimationDuration = 2.5; |
toPoint:topLeft |
radius:radius]; |
[path lineToPoint:topLeft]; |
- [path closePath]; // Right path is closed |
return path; |
} |
-- (void)elideTitle:(int)availableWidth { |
+- (NSString*)elideTitle:(int)availableWidth { |
NSFont* font = [self font]; |
gfx::Font font_chr = |
gfx::Font::CreateFont(base::SysNSStringToWide([font fontName]), |
[font pointSize]); |
- NSString* titleString = base::SysWideToNSString( |
+ return base::SysWideToNSString( |
ElideFilename(downloadPath_, font_chr, availableWidth)); |
- [self setTitle:titleString]; |
+} |
+ |
+- (NSString*)elideStatus:(int)availableWidth { |
+ NSFont* font = [self secondaryFont]; |
+ gfx::Font font_chr = |
+ gfx::Font::CreateFont(base::SysNSStringToWide([font fontName]), |
+ [font pointSize]); |
+ |
+ return base::SysWideToNSString(ElideText( |
+ base::SysNSStringToWide([self secondaryTitle]), |
+ font_chr, |
+ availableWidth)); |
} |
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { |
@@ -354,11 +372,16 @@ const int kCompleteAnimationDuration = 2.5; |
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { |
// Draw title |
- [self elideTitle:cellFrame.size.width - |
- (kTextPosLeft + kTextPaddingRight + kDropdownAreaWidth)]; |
+ CGFloat textWidth = cellFrame.size.width - |
+ (kTextPosLeft + kTextPaddingRight + kDropdownAreaWidth); |
+ [self setTitle:[self elideTitle:textWidth]]; |
+ |
+ NSColor* themeTextColor = [[[self controlView] gtm_theme] |
+ textColorForStyle:GTMThemeStyleBookmarksBarButton |
+ state:GTMThemeStateActiveWindow]; |
NSColor* color = [self isButtonPartPressed] |
- ? [NSColor alternateSelectedControlTextColor] : [NSColor textColor]; |
+ ? [NSColor alternateSelectedControlTextColor] : themeTextColor; |
NSString* primaryText = [self title]; |
NSDictionary* primaryTextAttributes = [NSDictionary |
@@ -374,8 +397,9 @@ const int kCompleteAnimationDuration = 2.5; |
// Draw secondary title, if any |
if ([self secondaryTitle] != nil && statusAlpha_ > 0) { |
- NSString* secondaryText = [self secondaryTitle]; |
- NSColor* secondaryColor = [color colorWithAlphaComponent:statusAlpha_]; |
+ NSString* secondaryText = [self elideStatus:textWidth]; |
+ NSColor* secondaryColor = [NSColor colorWithDeviceWhite:kSecondaryTextColor |
+ alpha:statusAlpha_]; |
NSDictionary* secondaryTextAttributes = [NSDictionary |
dictionaryWithObjectsAndKeys: |
secondaryColor, NSForegroundColorAttributeName, |
@@ -430,25 +454,46 @@ const int kCompleteAnimationDuration = 2.5; |
operation:NSCompositeSourceOver |
fraction:[self isEnabled] ? 1.0 : 0.5]; |
+ // Separator between button and popup parts |
+ CGFloat lx = NSMaxX(cellFrame) - kDropdownAreaWidth + 0.5; |
+ [[NSColor colorWithDeviceWhite:0.0 alpha:0.1] set]; |
+ [NSBezierPath strokeLineFromPoint:NSMakePoint(lx, NSMinY(cellFrame) + 1) |
+ toPoint:NSMakePoint(lx, NSMaxY(cellFrame) - 1)]; |
+ [[NSColor colorWithDeviceWhite:1.0 alpha:0.1] set]; |
+ [NSBezierPath strokeLineFromPoint:NSMakePoint(lx + 1, NSMinY(cellFrame) + 1) |
+ toPoint:NSMakePoint(lx + 1, NSMaxY(cellFrame) - 1)]; |
+ |
// Popup arrow. Put center of mass of the arrow in the center of the |
// dropdown area. |
CGFloat cx = NSMaxX(cellFrame) - kDropdownAreaWidth/2 + 0.5; |
CGFloat cy = NSMidY(cellFrame); |
NSPoint p1 = NSMakePoint(cx - kDropdownArrowWidth/2, |
- cy - kDropdownArrowHeight/3); |
+ cy - kDropdownArrowHeight/3 + kDropdownAreaY); |
NSPoint p2 = NSMakePoint(cx + kDropdownArrowWidth/2, |
- cy - kDropdownArrowHeight/3); |
- NSPoint p3 = NSMakePoint(cx, cy + kDropdownArrowHeight*2/3); |
+ cy - kDropdownArrowHeight/3 + kDropdownAreaY); |
+ NSPoint p3 = NSMakePoint(cx, cy + kDropdownArrowHeight*2/3 + kDropdownAreaY); |
NSBezierPath *triangle = [NSBezierPath bezierPath]; |
[triangle moveToPoint:p1]; |
[triangle lineToPoint:p2]; |
[triangle lineToPoint:p3]; |
[triangle closePath]; |
+ NSGraphicsContext* context = [NSGraphicsContext currentContext]; |
+ [context saveGraphicsState]; |
+ |
+ scoped_nsobject<NSShadow> shadow([[NSShadow alloc] init]); |
+ [shadow setShadowColor:[NSColor whiteColor]]; |
+ [shadow setShadowOffset:NSMakeSize(0, -1)]; |
+ [shadow setShadowBlurRadius:0.0]; |
+ [shadow set]; |
+ |
NSColor* fill = [self isDropdownPartPressed] |
- ? [NSColor alternateSelectedControlTextColor] : [NSColor textColor]; |
+ ? [NSColor alternateSelectedControlTextColor] : themeTextColor; |
[fill setFill]; |
+ |
[triangle fill]; |
+ |
+ [context restoreGraphicsState]; |
} |
- (NSRect)imageRectForBounds:(NSRect)cellFrame { |