Diffstat (limited to 'noncore/multimedia/opieplayer2/skin.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/multimedia/opieplayer2/skin.cpp | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/noncore/multimedia/opieplayer2/skin.cpp b/noncore/multimedia/opieplayer2/skin.cpp index 8281b20..0de3023 100644 --- a/noncore/multimedia/opieplayer2/skin.cpp +++ b/noncore/multimedia/opieplayer2/skin.cpp @@ -5,4 +5,6 @@ #include <qpe/config.h> +#include <assert.h> + Skin::Skin( const QString &name, const QString &fileNameInfix ) : m_fileNameInfix( fileNameInfix ) @@ -33,5 +35,5 @@ QImage Skin::backgroundImage() const { if ( m_backgroundImage.isNull() ) - m_backgroundImage = QImage( Resource::findPixmap( QString( "%1/background" ).arg( m_skinPath ) ) ); + m_backgroundImage = SkinCache::self().loadImage( QString( "%1/background" ).arg( m_skinPath ) ); return m_backgroundImage; } @@ -40,5 +42,5 @@ QImage Skin::buttonUpImage() const { if ( m_buttonUpImage.isNull() ) - m_buttonUpImage = QImage( Resource::findPixmap( QString( "%1/skin%2_up" ).arg( m_skinPath ).arg( m_fileNameInfix ) ) ); + m_buttonUpImage = SkinCache::self().loadImage( QString( "%1/skin%2_up" ).arg( m_skinPath ).arg( m_fileNameInfix ) ); return m_buttonUpImage; } @@ -47,5 +49,5 @@ QImage Skin::buttonDownImage() const { if ( m_buttonDownImage.isNull() ) - m_buttonDownImage = QImage( Resource::findPixmap( QString( "%1/skin%2_down" ).arg( m_skinPath ).arg( m_fileNameInfix ) ) ); + m_buttonDownImage = SkinCache::self().loadImage( QString( "%1/skin%2_down" ).arg( m_skinPath ).arg( m_fileNameInfix ) ); return m_buttonDownImage; } @@ -87,5 +89,5 @@ QImage Skin::buttonMaskImage( const QString &fileName ) const QString prefix = m_skinPath + QString::fromLatin1( "/skin%1_mask_" ).arg( m_fileNameInfix ); QString path = prefix + fileName + ".png"; - it = m_buttonMasks.insert( fileName, QImage( Resource::findPixmap( path ) ) ); + it = m_buttonMasks.insert( fileName, SkinCache::self().loadImage( path ) ); } return *it; @@ -99,4 +101,52 @@ QString Skin::defaultSkinName() } +SkinCache::SkinCache() +{ + m_cache.setAutoDelete( true ); +} + +QImage SkinCache::loadImage( const QString &name ) +{ + ThreadUtil::AutoLock lock( m_cacheGuard ); + + QImage *image = m_cache.find( name ); + if ( image ) { + qDebug( "cache hit for %s", name.ascii() ); + return *image; + } + + image = new QImage( Resource::findPixmap( name ) ); + m_cache.insert( name, image ); + return *image; +} + +SkinLoader::SkinLoader() +{ +} + +void SkinLoader::schedule( const QString &skinName, const QString &fileNameInfix, + const MediaWidget::SkinButtonInfo *skinButtonInfo, const uint buttonCount ) +{ + assert( isRunning() == false ); + + pendingSkins << Info( skinName, fileNameInfix, skinButtonInfo, buttonCount ); +} + +void SkinLoader::run() +{ + qDebug( "SkinLoader::run()" ); + for ( InfoList::ConstIterator it = pendingSkins.begin(); it != pendingSkins.end(); ++it ) + load( *it ); + qDebug( "SkinLoader is done." ); +} + +void SkinLoader::load( const Info &nfo ) +{ + qDebug( "preloading %s with infix %s", nfo.skinName.ascii(), nfo.fileNameInfix.ascii() ); + + Skin skin( nfo.skinName, nfo.fileNameInfix ); + skin.preload( nfo.skinButtonInfo, nfo.buttonCount ); +} + /* vim: et sw=4 ts=4 */ |