You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
knights/knights/knightspixcache.cpp

157 lines
4.9 KiB

/***************************************************************************
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 TQString &label, const TQPixmap &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 TQString &label, TQPixmap &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;
}