-rw-r--r-- | noncore/multimedia/opieplayer2/skin.cpp | 35 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/skin.h | 2 |
2 files changed, 17 insertions, 20 deletions
diff --git a/noncore/multimedia/opieplayer2/skin.cpp b/noncore/multimedia/opieplayer2/skin.cpp index d2e3b00..5013bb4 100644 --- a/noncore/multimedia/opieplayer2/skin.cpp +++ b/noncore/multimedia/opieplayer2/skin.cpp @@ -22,8 +22,11 @@ #include "skin.h" #include "singleton.h" +#include <qcache.h> +#include <qmap.h> + #include <qpe/resource.h> #include <qpe/config.h> #include <assert.h> @@ -43,16 +46,18 @@ class SkinCache : public Singleton<SkinCache> { public: SkinCache(); - QImage loadImage( const QString &name ); + SkinData *lookupAndTake( const QString &skinPath, const QString &fileNameInfix ); -private: - typedef QDict<QImage> ImageCache; + void store( const QString &skinPath, const QString &fileNameInfix, SkinData *data ); - ImageCache m_cache; +private: + typedef QCache<SkinData> DataCache; + typedef QCache<QPixmap> BackgroundPixmapCache; - ThreadUtil::Mutex m_cacheGuard; + DataCache m_cache; + BackgroundPixmapCache m_backgroundPixmapCache; }; Skin::Skin( const QString &name, const QString &fileNameInfix ) : m_fileNameInfix( fileNameInfix ) @@ -67,15 +72,15 @@ Skin::Skin( const QString &fileNameInfix ) } Skin::~Skin() { - delete d; + SkinCache::self().store( m_skinPath, m_fileNameInfix, d ); } void Skin::init( const QString &name ) { m_skinPath = "opieplayer2/skins/" + name; - d = new SkinData; + d = SkinCache::self().lookupAndTake( m_skinPath, m_fileNameInfix ); } void Skin::preload( const MediaWidget::SkinButtonInfo *skinButtonInfo, uint buttonCount ) { @@ -160,24 +165,18 @@ QImage Skin::loadImage( const QString &fileName ) } SkinCache::SkinCache() { - m_cache.setAutoDelete( true ); } -QImage SkinCache::loadImage( const QString &name ) +SkinData *SkinCache::lookupAndTake( const QString &skinPath, const QString &fileNameInfix ) { - ThreadUtil::AutoLock lock( m_cacheGuard ); - - QImage *image = m_cache.find( name ); - if ( image ) { - qDebug( "cache hit for %s", name.ascii() ); - return *image; + return new SkinData; } - image = new QImage( Resource::findPixmap( name ) ); - m_cache.insert( name, image ); - return *image; +void SkinCache::store( const QString &skinPath, const QString &fileNameInfix, SkinData *data ) +{ + delete data; } SkinLoader::SkinLoader() { diff --git a/noncore/multimedia/opieplayer2/skin.h b/noncore/multimedia/opieplayer2/skin.h index e55832c..9180067 100644 --- a/noncore/multimedia/opieplayer2/skin.h +++ b/noncore/multimedia/opieplayer2/skin.h @@ -24,10 +24,8 @@ #define SKIN_H #include <qstring.h> #include <qimage.h> -#include <qmap.h> -#include <qdict.h> #include "mediawidget.h" #include "threadutil.h" |