Changeset 6127


Ignore:
Timestamp:
Jun 10, 2008, 9:13:33 PM (13 years ago)
Author:
livings124
Message:

remember the previous color of the pieces view as much as possible to avoid excessive drawing

Location:
trunk/macosx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/PiecesView.m

    r6126 r6127  
    3232#define HIGH_PEERS 15
    3333
    34 #define FINISHED 1
     34#define PIECE_NONE 0
     35#define PIECE_MIXED 1
     36#define PIECE_FINISHED 2
     37#define PIECE_HIGH_PEERS 3
     38#define PIECE_FLASHING 4
    3539
    3640@implementation PiecesView
     
    141145            }
    142146           
    143             NSColor * pieceColor;
     147            NSColor * pieceColor = nil;
    144148            if (showAvailablity)
    145149            {
    146150                if (pieces[index] == -1)
    147151                {
    148                     pieceColor = !first && fPieces[index] != FINISHED ? [NSColor orangeColor] : fBluePieceColor;
    149                     fPieces[index] = FINISHED;
     152                    if (first || fPieces[index] != PIECE_FINISHED)
     153                    {
     154                        if (!first && fPieces[index] != PIECE_FLASHING)
     155                        {
     156                            pieceColor = [NSColor orangeColor];
     157                            fPieces[index] = PIECE_FLASHING;
     158                        }
     159                        else
     160                        {
     161                            pieceColor = fBluePieceColor;
     162                            fPieces[index] = PIECE_FINISHED;
     163                        }
     164                    }
     165                }
     166                else if (pieces[index] == 0)
     167                {
     168                    if (first || fPieces[index] != PIECE_NONE)
     169                    {
     170                        pieceColor = [NSColor whiteColor];
     171                        fPieces[index] = PIECE_NONE;
     172                    }
     173                }
     174                else if (pieces[index] >= HIGH_PEERS)
     175                {
     176                    if (first || fPieces[index] != PIECE_HIGH_PEERS)
     177                    {
     178                        pieceColor = fGreenAvailabilityColor;
     179                        fPieces[index] = PIECE_HIGH_PEERS;
     180                    }
    150181                }
    151182                else
    152183                {
    153                     float percent = MIN(1.0, (float)pieces[index]/HIGH_PEERS);
    154                     pieceColor = [[NSColor whiteColor] blendedColorWithFraction: percent ofColor: fGreenAvailabilityColor];
    155                     fPieces[index] = 0;
     184                    if (first || fPieces[index] != PIECE_MIXED)
     185                    {
     186                        float percent = (float)pieces[index]/HIGH_PEERS;
     187                        pieceColor = [[NSColor whiteColor] blendedColorWithFraction: percent ofColor: fGreenAvailabilityColor];
     188                        fPieces[index] = PIECE_MIXED;
     189                    }
    156190                }
    157191            }
     
    160194                if (piecesPercent[index] == 1.0)
    161195                {
    162                     pieceColor = !first && fPieces[index] != FINISHED ? [NSColor orangeColor] : fBluePieceColor;
    163                     fPieces[index] = FINISHED;
     196                    if (first || fPieces[index] != PIECE_FINISHED)
     197                    {
     198                        if (!first && fPieces[index] != PIECE_FLASHING)
     199                        {
     200                            pieceColor = [NSColor orangeColor];
     201                            fPieces[index] = PIECE_FLASHING;
     202                        }
     203                        else
     204                        {
     205                            pieceColor = fBluePieceColor;
     206                            fPieces[index] = PIECE_FINISHED;
     207                        }
     208                    }
     209                }
     210                else if (piecesPercent[index] == 0.0)
     211                {
     212                    if (first || fPieces[index] != PIECE_NONE)
     213                    {
     214                        pieceColor = [NSColor whiteColor];
     215                        fPieces[index] = PIECE_NONE;
     216                    }
    164217                }
    165218                else
    166219                {
    167                     pieceColor = [[NSColor whiteColor] blendedColorWithFraction: piecesPercent[index] ofColor: fBluePieceColor];
    168                     fPieces[index] = 0;
     220                    if (first || fPieces[index] != PIECE_MIXED)
     221                    {
     222                        pieceColor = [[NSColor whiteColor] blendedColorWithFraction: piecesPercent[index] ofColor: fBluePieceColor];
     223                        fPieces[index] = PIECE_MIXED;
     224                    }
    169225                }
    170226            }
    171227           
    172             rect.origin = NSMakePoint(j * (fWidth + BETWEEN) + BETWEEN + fExtraBorder,
    173                                     [image size].width - (i + 1) * (fWidth + BETWEEN) - fExtraBorder);
    174            
    175             [pieceColor set];
    176             NSRectFill(rect);
     228            if (pieceColor)
     229            {
     230                rect.origin = NSMakePoint(j * (fWidth + BETWEEN) + BETWEEN + fExtraBorder,
     231                                        [image size].width - (i + 1) * (fWidth + BETWEEN) - fExtraBorder);
     232               
     233                [pieceColor set];
     234                NSRectFill(rect);
     235            }
    177236        }
    178237   
  • trunk/macosx/TorrentCell.m

    r6125 r6127  
    736736   
    737737    int pieceCount = MIN([torrent pieceCount], MAX_PIECES);
    738     float * piecePercent = malloc(pieceCount * sizeof(float)),
     738    float * piecesPercent = malloc(pieceCount * sizeof(float)),
    739739        * previousPiecePercent = [torrent getPreviousAmountFinished];
    740     [torrent getAmountFinished: piecePercent size: pieceCount];
     740    [torrent getAmountFinished: piecesPercent size: pieceCount];
    741741   
    742742    NSBitmapImageRep * bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: nil
     
    748748    {
    749749        NSColor * pieceColor;
    750         if (piecePercent[i] == 1.0 && previousPiecePercent != NULL && previousPiecePercent[i] < 1.0)
     750        if (piecesPercent[i] == 1.0 && previousPiecePercent != NULL && previousPiecePercent[i] < 1.0)
    751751            pieceColor = [NSColor orangeColor];
    752752        else
    753             pieceColor = [[NSColor whiteColor] blendedColorWithFraction: piecePercent[i] ofColor: fBluePieceColor];
     753            pieceColor = [[NSColor whiteColor] blendedColorWithFraction: piecesPercent[i] ofColor: fBluePieceColor];
    754754       
    755755        //it's faster to just set color instead of checking previous color
     
    757757    }
    758758   
    759     [torrent setPreviousAmountFinished: piecePercent]; //holds onto piecePercent, so no need to release it here
     759    [torrent setPreviousAmountFinished: piecesPercent]; //holds onto piecePercent, so no need to release it here
    760760   
    761761    //actually draw image
Note: See TracChangeset for help on using the changeset viewer.