Add loading of artwork in other formats as well as .png
This commit is contained in:
@@ -24,12 +24,12 @@
|
||||
|
||||
|
||||
#include <QtGui/QImage>
|
||||
|
||||
#include <QHash>
|
||||
#include <QImageReader>
|
||||
#include <QList>
|
||||
#include "embed.h"
|
||||
#include "config_mgr.h"
|
||||
|
||||
|
||||
|
||||
#ifndef PLUGIN_NAME
|
||||
namespace embed
|
||||
#else
|
||||
@@ -37,6 +37,10 @@ namespace PLUGIN_NAME
|
||||
#endif
|
||||
{
|
||||
|
||||
namespace
|
||||
{
|
||||
static QHash<QString, QPixmap> s_pixmapCache;
|
||||
}
|
||||
|
||||
#include "embedded_resources.h"
|
||||
|
||||
@@ -45,49 +49,73 @@ QPixmap getIconPixmap( const char * _name, int _w, int _h )
|
||||
{
|
||||
if( _w == -1 || _h == -1 )
|
||||
{
|
||||
QString name = QString( _name ) + ".png";
|
||||
// Return cached pixmap
|
||||
QPixmap cached = s_pixmapCache.value( _name );
|
||||
if( !cached.isNull() )
|
||||
{
|
||||
return cached;
|
||||
}
|
||||
|
||||
// Or try to load it
|
||||
QList<QByteArray> formats =
|
||||
QImageReader::supportedImageFormats();
|
||||
QList<QString> candidates;
|
||||
QPixmap p;
|
||||
QString name;
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < formats.size() && p.isNull(); ++i )
|
||||
{
|
||||
candidates << QString( _name ) + "." + formats.at( i ).data();
|
||||
}
|
||||
|
||||
#ifdef PLUGIN_NAME
|
||||
QPixmap p( configManager::inst()->artworkDir() + "plugins/" +
|
||||
STRINGIFY( PLUGIN_NAME ) + "_" + name );
|
||||
if( p.isNull() )
|
||||
{
|
||||
p = QPixmap( configManager::inst()->artworkDir() +
|
||||
name );
|
||||
for ( i = 0; i < candidates.size() && p.isNull(); ++i ) {
|
||||
name = candidates.at( i );
|
||||
p = QPixmap( configManager::inst()->artworkDir() + "plugins/" +
|
||||
STRINGIFY( PLUGIN_NAME ) + "_" + name );
|
||||
}
|
||||
#else
|
||||
// look whether icon is in artwork-dir
|
||||
QPixmap p( configManager::inst()->artworkDir() + name );
|
||||
#endif
|
||||
if( p.isNull() )
|
||||
{
|
||||
// nothing found, so look in default-artwork-dir
|
||||
p =
|
||||
QPixmap( configManager::inst()->defaultArtworkDir() + name );
|
||||
for ( i = 0; i < candidates.size() && p.isNull(); ++i ) {
|
||||
name = candidates.at( i );
|
||||
p = QPixmap( configManager::inst()->artworkDir() + name );
|
||||
}
|
||||
if( p.isNull() )
|
||||
{
|
||||
const embed::descriptor & e = findEmbeddedData(
|
||||
name.toUtf8().constData() );
|
||||
|
||||
// nothing found, so look in default-artwork-dir
|
||||
for ( i = 0; i < candidates.size() && p.isNull(); ++i ) {
|
||||
name = candidates.at( i );
|
||||
p = QPixmap( configManager::inst()->defaultArtworkDir()
|
||||
+ name );
|
||||
}
|
||||
|
||||
for ( i = 0; i < candidates.size() && p.isNull(); ++i ) {
|
||||
name = candidates.at( i );
|
||||
const embed::descriptor & e =
|
||||
findEmbeddedData( name.toUtf8().constData() );
|
||||
// found?
|
||||
if( QString( e.name ) == name )
|
||||
{
|
||||
p.loadFromData( e.data, e.size );
|
||||
}
|
||||
else
|
||||
{
|
||||
p = QPixmap( 1, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback
|
||||
if(p.isNull())
|
||||
{
|
||||
p = QPixmap( 1, 1 );
|
||||
}
|
||||
// Save to cache and return
|
||||
s_pixmapCache.insert( _name, p );
|
||||
return p;
|
||||
|
||||
}
|
||||
|
||||
return getIconPixmap( _name ).
|
||||
scaled( _w, _h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
|
||||
scaled( _w, _h, Qt::IgnoreAspectRatio,
|
||||
Qt::SmoothTransformation );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QString getText( const char * _name )
|
||||
{
|
||||
const embed::descriptor & e = findEmbeddedData( _name );
|
||||
|
||||
Reference in New Issue
Block a user