-rw-r--r-- | noncore/multimedia/opieplayer2/skin.cpp | 37 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/skin.h | 2 |
2 files changed, 18 insertions, 21 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 @@ -20,12 +20,15 @@ Boston, MA 02111-1307, USA. */ #include "skin.h" #include "singleton.h" +#include <qcache.h> +#include <qmap.h> + #include <qpe/resource.h> #include <qpe/config.h> #include <assert.h> struct SkinData @@ -41,20 +44,22 @@ struct SkinData 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 ) { init( name ); @@ -65,19 +70,19 @@ Skin::Skin( const QString &fileNameInfix ) { init( defaultSkinName() ); } 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 ) { backgroundImage(); buttonUpImage(); @@ -158,28 +163,22 @@ QImage Skin::loadImage( const QString &fileName ) { return QImage( Resource::findPixmap( 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 @@ -22,14 +22,12 @@ #ifndef SKIN_H #define SKIN_H #include <qstring.h> #include <qimage.h> -#include <qmap.h> -#include <qdict.h> #include "mediawidget.h" #include "threadutil.h" struct SkinData; |