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.
|
|
|
#include "nex.h"
|
|
|
|
|
|
|
|
struct BitmapPool::PoolItem
|
|
|
|
{
|
|
|
|
PoolItem() : used(false) {}
|
|
|
|
|
|
|
|
bool used;
|
|
|
|
Bitmap bitmap;
|
|
|
|
};
|
|
|
|
|
|
|
|
BitmapPool::BitmapPool()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
BitmapPool::~BitmapPool()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Bitmap *BitmapPool::get(bool clear)
|
|
|
|
{
|
|
|
|
mMutex.lock();
|
|
|
|
BitmapPool::PoolItem *p=0;
|
|
|
|
for (TQPtrListIterator<BitmapPool::PoolItem> i(mBitmaps); i.current(); ++i)
|
|
|
|
{
|
|
|
|
if (!(*i)->used)
|
|
|
|
p=*i;
|
|
|
|
}
|
|
|
|
if (!p)
|
|
|
|
{
|
|
|
|
p=new BitmapPool::PoolItem;
|
|
|
|
p->bitmap.resize(width, height);
|
|
|
|
}
|
|
|
|
|
|
|
|
p->used=true;
|
|
|
|
|
|
|
|
if (clear) p->bitmap.clear();
|
|
|
|
|
|
|
|
mMutex.unlock();
|
|
|
|
return &(p->bitmap);
|
|
|
|
}
|
|
|
|
|
|
|
|
void BitmapPool::release(Bitmap *bitmap)
|
|
|
|
{
|
|
|
|
mMutex.lock();
|
|
|
|
for (TQPtrListIterator<BitmapPool::PoolItem> i(mBitmaps); i.current(); ++i)
|
|
|
|
{
|
|
|
|
if (&((*i)->bitmap)==bitmap)
|
|
|
|
(*i)->used=false;
|
|
|
|
}
|
|
|
|
mMutex.unlock();
|
|
|
|
}
|
|
|
|
|