diff options
Diffstat (limited to 'knights/knightspixcache.cpp')
-rw-r--r-- | knights/knightspixcache.cpp | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/knights/knightspixcache.cpp b/knights/knightspixcache.cpp new file mode 100644 index 0000000..5f7a26e --- /dev/null +++ b/knights/knightspixcache.cpp @@ -0,0 +1,156 @@ +/*************************************************************************** + knightspixcache.cpp - description + ------------------- + begin : Mon Aug 20 2001 + copyright : (C) 2003 by Troy Corbin Jr. + email : tcorbin@users.sourceforge.net + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "knightspixcache.h" +#include "definitions.h" + +KnightsPixCache::KnightsPixCache() +{ + bytesTotal = 1024 * 1024; + bytesUsed = 0; +} +KnightsPixCache::~KnightsPixCache() +{ + clear(); + bytesUsed = 0; +} +/////////////////////////////////////// +// +// KnightsPixCache::cacheLimit +// +/////////////////////////////////////// +unsigned int KnightsPixCache::cacheLimit( void ) +{ + return ( bytesTotal / 1024 ); +} +/////////////////////////////////////// +// +// KnightsPixCache::setCacheLimit +// +/////////////////////////////////////// +void KnightsPixCache::setCacheLimit( const unsigned int &limit ) +{ + bytesTotal = limit * 1024; +} +/////////////////////////////////////// +// +// KnightsPixCache::clear +// +/////////////////////////////////////// +void KnightsPixCache::clear( void ) +{ + list.clear(); +} +/////////////////////////////////////// +// +// KnightsPixCache::cleanCache +// +/////////////////////////////////////// +void KnightsPixCache::cleanCache( const unsigned int &space ) +{ + pixmapList::Iterator tmpIT; + register unsigned int age; + + while( bytesUsed + space > bytesTotal ) + { + if( list.count() == 0 ) return; + age = 0; + for( IT = list.begin(); IT != list.end(); ++IT ) + { + if( (*IT).age > age ) + { + age = (*IT).age; + tmpIT = IT; + } + } + bytesUsed -= (*tmpIT).bytes; + list.remove( tmpIT ); + } +} +/////////////////////////////////////// +// +// KnightsPixCache::add +// +/////////////////////////////////////// +void KnightsPixCache::add( const QString &label, const QPixmap &pixmap ) +{ + unsigned int tmp; + cacheItem newItem; + + if( pixmap.isNull() ) + return; + tmp = ( pixmap.width() * pixmap.height() * pixmap.depth() ) >> 3; + if( ( bytesUsed + tmp ) > bytesTotal ) + cleanCache(tmp); + + newItem.label = label; + newItem.bytes = tmp; + newItem.item = pixmap; + newItem.age = 0; + list.append( newItem ); + bytesUsed += tmp; +} +/////////////////////////////////////// +// +// KnightsPixCache::find +// +/////////////////////////////////////// +bool KnightsPixCache::find( const QString &label, QPixmap &pixmap ) +{ + bool status(FALSE); + for( IT = list.begin(); IT != list.end(); ++IT ) + { + if( (*IT).label == label ) + { + pixmap = (*IT).item; + (*IT).age = 0; + status = TRUE; + } + else + (*IT).age++; + } + return status; +} +/////////////////////////////////////// +// +// KnightsPixCache::resize +// +/////////////////////////////////////// +void KnightsPixCache::resize( const int &size ) +{ + SquareLight.convertFromImage( Orig_SquareLight.smoothScale( size, size ) ); + SquareDark.convertFromImage( Orig_SquareDark.smoothScale( size, size ) ); + HighlightSelect.convertFromImage( Orig_HighlightSelect.smoothScale( size, size ) ); + HighlightMove.convertFromImage( Orig_HighlightMove.smoothScale( size, size ) ); + HighlightAttack.convertFromImage( Orig_HighlightAttack.smoothScale( size, size ) ); + BlackKing.convertFromImage( Orig_BlackKing.smoothScale( size, size ) ); + BlackQueen.convertFromImage( Orig_BlackQueen.smoothScale( size, size ) ); + BlackBishop.convertFromImage( Orig_BlackBishop.smoothScale( size, size ) ); + BlackKnight.convertFromImage( Orig_BlackKnight.smoothScale( size, size ) ); + BlackRook.convertFromImage( Orig_BlackRook.smoothScale( size, size ) ); + BlackPawn.convertFromImage( Orig_BlackPawn.smoothScale( size, size ) ); + WhiteKing.convertFromImage( Orig_WhiteKing.smoothScale( size, size ) ); + WhiteQueen.convertFromImage( Orig_WhiteQueen.smoothScale( size, size ) ); + WhiteBishop.convertFromImage( Orig_WhiteBishop.smoothScale( size, size ) ); + WhiteKnight.convertFromImage( Orig_WhiteKnight.smoothScale( size, size ) ); + WhiteRook.convertFromImage( Orig_WhiteRook.smoothScale( size, size ) ); + WhitePawn.convertFromImage( Orig_WhitePawn.smoothScale( size, size ) ); + Border.convertFromImage( Orig_Border.smoothScale( size * 9, size * 9) ); + BorderLightOn.convertFromImage( Orig_BorderLightOn.smoothScale( size / 2, size / 2) ); + BorderLightOff.convertFromImage( Orig_BorderLightOff.smoothScale( size / 2, size / 2) ); + return; +} |