-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 @@ -24,4 +24,7 @@ #include "singleton.h" +#include <qcache.h> +#include <qmap.h> + #include <qpe/resource.h> #include <qpe/config.h> @@ -45,12 +48,14 @@ 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; }; @@ -69,5 +74,5 @@ Skin::Skin( const QString &fileNameInfix ) Skin::~Skin() { - delete d; + SkinCache::self().store( m_skinPath, m_fileNameInfix, d ); } @@ -75,5 +80,5 @@ void Skin::init( const QString &name ) { m_skinPath = "opieplayer2/skins/" + name; - d = new SkinData; + d = SkinCache::self().lookupAndTake( m_skinPath, m_fileNameInfix ); } @@ -162,20 +167,14 @@ 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; } 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 @@ -26,6 +26,4 @@ #include <qstring.h> #include <qimage.h> -#include <qmap.h> -#include <qdict.h> #include "mediawidget.h" |