From 09666b3add3883db7a1a427ea5efc4aa797f8f0a Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Sat, 20 Mar 2010 18:54:24 +0000 Subject: [PATCH] appropriately shorten the title length when showing the control buttons in compact view --- macosx/TorrentCell.m | 60 +++++++++++++++++++++------------------ macosx/TorrentTableView.m | 4 ++- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/macosx/TorrentCell.m b/macosx/TorrentCell.m index 054d4f580..4f5f0e15a 100644 --- a/macosx/TorrentCell.m +++ b/macosx/TorrentCell.m @@ -55,7 +55,6 @@ #define PADDING_BETWEEN_TITLE_AND_MIN_STATUS 2.0 #define PADDING_BETWEEN_TITLE_AND_PROGRESS 1.0 #define PADDING_BETWEEN_PROGRESS_AND_BAR 2.0 -#define PADDING_BETWEEN_TITLE_AND_BAR_MIN 3.0 #define PADDING_BETWEEN_BAR_AND_STATUS 2.0 #define PIECES_TOTAL_PERCENT 0.6 @@ -69,7 +68,7 @@ - (void) drawPiecesBar: (NSRect) barRect; - (NSRect) rectForMinimalStatusWithString: (NSAttributedString *) string inBounds: (NSRect) bounds; -- (NSRect) rectForTitleWithString: (NSAttributedString *) string basedOnMinimalStatusRect: (NSRect) statusRect inBounds: (NSRect) bounds; +- (NSRect) rectForTitleWithString: (NSAttributedString *) string withRightBound: (CGFloat) rightBound inBounds: (NSRect) bounds; - (NSRect) rectForProgressWithStringInBounds: (NSRect) bounds; - (NSRect) rectForStatusWithStringInBounds: (NSRect) bounds; - (NSRect) barRectForBounds: (NSRect) bounds; @@ -276,7 +275,8 @@ NSMutableDictionary * revealInfo = [userInfo mutableCopy]; [revealInfo setObject: @"Reveal" forKey: @"Type"]; - NSTrackingArea * area = [[NSTrackingArea alloc] initWithRect: revealButtonRect options: revealOptions owner: controlView userInfo: revealInfo]; + NSTrackingArea * area = [[NSTrackingArea alloc] initWithRect: revealButtonRect options: revealOptions owner: controlView + userInfo: revealInfo]; [controlView addTrackingArea: area]; [revealInfo release]; [area release]; @@ -405,27 +405,6 @@ [minimalString drawInRect: minimalStatusRect]; } - //title - NSAttributedString * titleString = [self attributedTitle]; - NSRect titleRect = [self rectForTitleWithString: titleString basedOnMinimalStatusRect: minimalStatusRect inBounds: cellFrame]; - [titleString drawInRect: titleRect]; - - //priority icon - if ([torrent priority] != TR_PRI_NORMAL) - { - NSImage * priorityImage = [torrent priority] == TR_PRI_HIGH ? [NSImage imageNamed: @"PriorityHigh.png"] - : [NSImage imageNamed: @"PriorityLow.png"]; - //take line out completely when 10.6-only - priorityImage = [NSApp isOnSnowLeopardOrBetter] ? [priorityImage retain] : [priorityImage copy]; - - NSRect priorityRect = NSMakeRect(NSMaxX(titleRect) + PADDING_BETWEEN_TITLE_AND_PRIORITY, - NSMidY(titleRect) - PRIORITY_ICON_HEIGHT * 0.5, - PRIORITY_ICON_WIDTH, PRIORITY_ICON_HEIGHT); - - [self drawImage: priorityImage inRect: priorityRect]; - [priorityImage release]; - } - //progress if (!minimal) { @@ -459,7 +438,9 @@ controlImage = [NSImage imageNamed: [@"Resume" stringByAppendingString: controlImageSuffix]]; } - [self drawImage: controlImage inRect: [self controlButtonRectForBounds: cellFrame]]; + const NSRect controlRect = [self controlButtonRectForBounds: cellFrame]; + [self drawImage: controlImage inRect: controlRect]; + minimalStatusRect = controlRect; //used for limiting title width //reveal button NSString * revealImageString; @@ -489,6 +470,27 @@ } } + //title + NSAttributedString * titleString = [self attributedTitle]; + NSRect titleRect = [self rectForTitleWithString: titleString withRightBound: NSMinX(minimalStatusRect) inBounds: cellFrame]; + [titleString drawInRect: titleRect]; + + //priority icon + if ([torrent priority] != TR_PRI_NORMAL) + { + NSImage * priorityImage = [torrent priority] == TR_PRI_HIGH ? [NSImage imageNamed: @"PriorityHigh.png"] + : [NSImage imageNamed: @"PriorityLow.png"]; + //take line out completely when 10.6-only + priorityImage = [NSApp isOnSnowLeopardOrBetter] ? [priorityImage retain] : [priorityImage copy]; + + NSRect priorityRect = NSMakeRect(NSMaxX(titleRect) + PADDING_BETWEEN_TITLE_AND_PRIORITY, + NSMidY(titleRect) - PRIORITY_ICON_HEIGHT * 0.5, + PRIORITY_ICON_WIDTH, PRIORITY_ICON_HEIGHT); + + [self drawImage: priorityImage inRect: priorityRect]; + [priorityImage release]; + } + //status if (!minimal) { @@ -664,7 +666,7 @@ return result; } -- (NSRect) rectForTitleWithString: (NSAttributedString *) string basedOnMinimalStatusRect: (NSRect) statusRect inBounds: (NSRect) bounds +- (NSRect) rectForTitleWithString: (NSAttributedString *) string withRightBound: (CGFloat) rightBound inBounds: (NSRect) bounds { const BOOL minimal = [fDefaults boolForKey: @"SmallView"]; @@ -674,9 +676,11 @@ + (minimal ? IMAGE_SIZE_MIN : IMAGE_SIZE_REG) + PADDING_BETWEEN_IMAGE_AND_TITLE; result.size.height = HEIGHT_TITLE; - result.size.width = NSMaxX(bounds) - NSMinX(result) - PADDING_HORIZONTAL; if (minimal) - result.size.width -= PADDING_BETWEEN_TITLE_AND_MIN_STATUS + NSWidth(statusRect); + result.size.width = rightBound - NSMinX(result) - PADDING_BETWEEN_TITLE_AND_MIN_STATUS; + else + result.size.width = NSMaxX(bounds) - NSMinX(result) - PADDING_HORIZONTAL; + if ([[self representedObject] priority] != TR_PRI_NORMAL) { result.size.width -= PRIORITY_ICON_WIDTH + PADDING_BETWEEN_TITLE_AND_PRIORITY; diff --git a/macosx/TorrentTableView.m b/macosx/TorrentTableView.m index 8cea87efa..3b5d54c00 100644 --- a/macosx/TorrentTableView.m +++ b/macosx/TorrentTableView.m @@ -230,7 +230,7 @@ [super updateTrackingAreas]; [self removeTrackingAreas]; - NSRange rows = [self rowsInRect: [self visibleRect]]; + const NSRange rows = [self rowsInRect: [self visibleRect]]; if (rows.length == 0) return; @@ -262,6 +262,8 @@ - (void) setRowHover: (NSInteger) row { + NSAssert([fDefaults boolForKey: @"SmallView"], @"cannot set a hover row when not in compact view"); + fMouseRow = row; if (row >= 0) [self setNeedsDisplayInRect: [self rectOfRow: row]];