From de602ae6486b181ec081749a510cfcf15c71c817 Mon Sep 17 00:00:00 2001 From: lordjaxom Date: Fri, 18 Jun 2004 16:41:02 +0000 Subject: - reimplemented image cache (fixes segfaults and speeds up image loading) - fixed a recursion wenn de-initializing ImageMagick (crashes on exit) - reverted the changes in ImageMagick-loader that concerned palettes (obviously some versions of ImageMagick are BROKEN!!! I am using 5.5.7 which works fine. Version 5.4.7 shows random errors) - reimplemented "Flush image cache" into the setup menu - included -lMagick into Makefile as a workaround for Debian (and others possibly) - fixed display of scrollbar --- cache.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) (limited to 'cache.c') diff --git a/cache.c b/cache.c index 1182e9e..6c3f99a 100644 --- a/cache.c +++ b/cache.c @@ -1,6 +1,57 @@ /* - * $Id: cache.c,v 1.1 2004/06/05 01:40:13 lordjaxom Exp $ + * $Id: cache.c,v 1.2 2004/06/18 16:08:11 lordjaxom Exp $ */ #include "cache.h" +#include "bitmap.h" + +cText2SkinCache::cText2SkinCache(int MaxItems) { + mMaxItems = MaxItems; +} + +cText2SkinCache::~cText2SkinCache() { + Flush(); +} + +void cText2SkinCache::Delete(const key_type &Key, data_type &Data) { + delete Data; +} + +void cText2SkinCache::Flush(void) { + mUsage.clear(); + item_iterator it = mItems.begin(); + for (; it != mItems.end(); ++it) + Delete((*it).first, (*it).second); + mItems.clear(); +} + +void cText2SkinCache::Reset(void) { + item_iterator it = mItems.begin(); + for (; it != mItems.end(); ++it) + (*it).second->Reset(); +} + +cText2SkinCache::data_type &cText2SkinCache::operator[](const key_type &Key) { + item_iterator it = mItems.find(Key); + if (it != mItems.end()) { + usage_iterator ut = mUsage.begin(); + for (; ut != mUsage.end(); ++ut) { + if ((*ut) == Key) { + mUsage.erase(ut); + break; + } + } + mUsage.push_back(Key); + } else { + if ((int)mItems.size() == mMaxItems) { + usage_iterator ut = mUsage.begin(); + Delete(*ut, mItems[*ut]); + mItems.erase(*ut); + mUsage.erase(mUsage.begin()); + } + it = mItems.insert(item_map::value_type(Key, data_type())).first; + mUsage.push_back(Key); + } + return (*it).second; +} -- cgit v1.2.3