author | simon <simon> | 2002-12-11 19:34:20 (UTC) |
---|---|---|
committer | simon <simon> | 2002-12-11 19:34:20 (UTC) |
commit | b3373b77e12e4b138848110884aedc37b56384e1 (patch) (side-by-side diff) | |
tree | 7432537024816d316d05fdc364d26db73fae190b | |
parent | e59fabf981834292c2ed9b7192dd4f789cc4b7cb (diff) | |
download | opie-b3373b77e12e4b138848110884aedc37b56384e1.zip opie-b3373b77e12e4b138848110884aedc37b56384e1.tar.gz opie-b3373b77e12e4b138848110884aedc37b56384e1.tar.bz2 |
- SkinCache now operates on SkinData instead of single images
-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 @@ -18,16 +18,19 @@ along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 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 { typedef QMap<QString, QImage> ButtonMaskImageMap; @@ -39,47 +42,49 @@ struct SkinData ButtonMaskImageMap buttonMasks; }; 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 ); } Skin::Skin( const QString &fileNameInfix ) : m_fileNameInfix( 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(); buttonDownImage(); ( void )buttonMask( skinButtonInfo, buttonCount ); @@ -156,32 +161,26 @@ QString Skin::defaultSkinName() 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() { } void SkinLoader::schedule( const QString &skinName, const QString &fileNameInfix, const MediaWidget::SkinButtonInfo *skinButtonInfo, const uint buttonCount ) 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 @@ -20,18 +20,16 @@ Boston, MA 02111-1307, USA. */ #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; class Skin { |