diff options
author | lordjaxom <lordjaxom> | 2004-06-18 16:41:02 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2004-06-18 16:41:02 +0000 |
commit | de602ae6486b181ec081749a510cfcf15c71c817 (patch) | |
tree | a6b7efe2b4ad29d6c88b588e8a9b0d7bbeff7c08 /cache.c | |
parent | 1d3cd38e88ae97dd6906f9818d52b9ef07bf057d (diff) | |
download | vdr-plugin-text2skin-de602ae6486b181ec081749a510cfcf15c71c817.tar.gz vdr-plugin-text2skin-de602ae6486b181ec081749a510cfcf15c71c817.tar.bz2 |
- reimplemented image cache (fixes segfaults and speeds up image loading)v0.0.6
- 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
Diffstat (limited to 'cache.c')
-rw-r--r-- | cache.c | 53 |
1 files changed, 52 insertions, 1 deletions
@@ -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; +} |