Changeset 3187


Ignore:
Timestamp:
Sep 26, 2007, 5:30:54 PM (15 years ago)
Author:
livings124
Message:

eliminate some useless drawing for the progress bar, and ensure width is an integer (drawing with pixels is quite annoying)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/TorrentCell.m

    r3182 r3187  
    182182        result.origin.y += PADDING_BETWEEN_TITLE_AND_PROGRESS + HEIGHT_STATUS + PADDING_BETWEEN_PROGRESS_AND_BAR;
    183183   
    184     result.size.width = NSMaxX(bounds) - result.origin.x - PADDING_HORIZONAL - BUTTONS_TOTAL_WIDTH;
     184    result.size.width = round(NSMaxX(bounds) - result.origin.x - PADDING_HORIZONAL - BUTTONS_TOTAL_WIDTH);
    185185   
    186186    return result;
     
    279279@implementation TorrentCell (Private)
    280280
    281 #warning NSDivideRect ?
    282281- (void) drawSimpleBar: (NSRect) barRect
    283282{
    284283    Torrent * torrent = [self representedObject];
    285284   
     285    int leftWidth = barRect.size.width;
    286286    float progress = [torrent progress], left = [torrent progressLeft];
    287287   
    288288    if (progress < 1.0)
    289289    {
    290         if (!fWhiteGradient)
    291             fWhiteGradient = [[CTGradient progressWhiteGradient] retain];
    292         [fWhiteGradient fillRect: barRect angle: -90];
    293        
    294         float include = progress + left;
    295         if (include < 1.0)
    296         {
     290        int rightWidth = leftWidth * progress;
     291        leftWidth -= rightWidth;
     292       
     293        float rightProgress = 1.0 - progress;
     294        if (left < rightProgress)
     295        {
     296            int rightNoIncludeWidth = rightWidth * ((rightProgress - left) / rightProgress);
     297            rightWidth -= rightNoIncludeWidth;
     298           
     299            NSRect noIncludeRect = barRect;
     300            noIncludeRect.origin.x += barRect.size.width - rightNoIncludeWidth;
     301            noIncludeRect.size.width = rightNoIncludeWidth;
     302           
    297303            if (!fLightGrayGradient)
    298304                fLightGrayGradient = [[CTGradient progressLightGrayGradient] retain];
     305            [fLightGrayGradient fillRect: noIncludeRect angle: -90];
     306        }
     307       
     308        if (leftWidth > 0)
     309        {
     310            NSRect includeRect = barRect;
     311            includeRect.origin.x += leftWidth;
     312            includeRect.size.width = rightWidth;
    299313           
    300             NSRect noIncludeRect = barRect;
    301             noIncludeRect.origin.x += barRect.size.width * include;
    302             noIncludeRect.size.width *= 1.0 - include;
    303             [fLightGrayGradient fillRect: noIncludeRect angle: -90];
    304         }
    305     }
    306    
    307     NSRect completeRect = barRect;
    308     completeRect.size.width *= progress;
    309    
    310     if ([torrent isActive])
    311     {
    312         if ([torrent isChecking])
    313         {
    314             if (!fYellowGradient)
    315                 fYellowGradient = [[CTGradient progressYellowGradient] retain];
    316             [fYellowGradient fillRect: completeRect angle: -90];
    317         }
    318         else if ([torrent isSeeding])
    319         {
    320             NSRect ratioRect = completeRect;
    321             ratioRect.size.width *= [torrent progressStopRatio];
    322            
    323             if (ratioRect.size.width < completeRect.size.width)
    324             {
    325                 if (!fLightGreenGradient)
    326                     fLightGreenGradient = [[CTGradient progressLightGreenGradient] retain];
    327                 [fLightGreenGradient fillRect: completeRect angle: -90];
    328             }
    329            
    330             if (!fGreenGradient)
    331                 fGreenGradient = [[CTGradient progressGreenGradient] retain];
    332             [fGreenGradient fillRect: ratioRect angle: -90];
     314            if (!fWhiteGradient)
     315                fWhiteGradient = [[CTGradient progressWhiteGradient] retain];
     316            [fWhiteGradient fillRect: includeRect angle: -90];
     317        }
     318    }
     319   
     320    if (leftWidth > 0)
     321    {
     322        NSRect completeRect = barRect;
     323        completeRect.size.width = leftWidth;
     324       
     325        if ([torrent isActive])
     326        {
     327            if ([torrent isChecking])
     328            {
     329                if (!fYellowGradient)
     330                    fYellowGradient = [[CTGradient progressYellowGradient] retain];
     331                [fYellowGradient fillRect: completeRect angle: -90];
     332            }
     333            else if ([torrent isSeeding])
     334            {
     335                #warning integer-ize!
     336                NSRect ratioRect = completeRect;
     337                ratioRect.size.width *= [torrent progressStopRatio];
     338               
     339                if (ratioRect.size.width < completeRect.size.width)
     340                {
     341                    if (!fLightGreenGradient)
     342                        fLightGreenGradient = [[CTGradient progressLightGreenGradient] retain];
     343                    [fLightGreenGradient fillRect: completeRect angle: -90];
     344                }
     345               
     346                if (!fGreenGradient)
     347                    fGreenGradient = [[CTGradient progressGreenGradient] retain];
     348                [fGreenGradient fillRect: ratioRect angle: -90];
     349            }
     350            else
     351            {
     352                if (!fBlueGradient)
     353                    fBlueGradient = [[CTGradient progressBlueGradient] retain];
     354                [fBlueGradient fillRect: completeRect angle: -90];
     355            }
    333356        }
    334357        else
    335358        {
    336             if (!fBlueGradient)
    337                 fBlueGradient = [[CTGradient progressBlueGradient] retain];
    338             [fBlueGradient fillRect: completeRect angle: -90];
    339         }
    340     }
    341     else
    342     {
    343         if ([torrent waitingToStart])
    344         {
    345             if (left <= 0.0)
    346             {
    347                 if (!fDarkGreenGradient)
    348                     fDarkGreenGradient = [[CTGradient progressDarkGreenGradient] retain];
    349                 [fDarkGreenGradient fillRect: completeRect angle: -90];
     359            if ([torrent waitingToStart])
     360            {
     361                if (left <= 0.0)
     362                {
     363                    if (!fDarkGreenGradient)
     364                        fDarkGreenGradient = [[CTGradient progressDarkGreenGradient] retain];
     365                    [fDarkGreenGradient fillRect: completeRect angle: -90];
     366                }
     367                else
     368                {
     369                    if (!fDarkBlueGradient)
     370                        fDarkBlueGradient = [[CTGradient progressDarkBlueGradient] retain];
     371                    [fDarkBlueGradient fillRect: completeRect angle: -90];
     372                }
    350373            }
    351374            else
    352375            {
    353                 if (!fDarkBlueGradient)
    354                     fDarkBlueGradient = [[CTGradient progressDarkBlueGradient] retain];
    355                 [fDarkBlueGradient fillRect: completeRect angle: -90];
    356             }
    357         }
    358         else
    359         {
    360             if (!fGrayGradient)
    361                 fGrayGradient = [[CTGradient progressGrayGradient] retain];
    362             [fGrayGradient fillRect: completeRect angle: -90];
     376                if (!fGrayGradient)
     377                    fGrayGradient = [[CTGradient progressGrayGradient] retain];
     378                [fGrayGradient fillRect: completeRect angle: -90];
     379            }
    363380        }
    364381    }
Note: See TracChangeset for help on using the changeset viewer.