-rw-r--r-- | library/resource.cpp | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/library/resource.cpp b/library/resource.cpp index a093e2f..18139b9 100644 --- a/library/resource.cpp +++ b/library/resource.cpp @@ -84,12 +84,46 @@ QBitmap Resource::loadBitmap( const QString &pix ) { QBitmap bm; bm = loadPixmap(pix); return bm; } +/* + * @internal + * Parse the extensions only once. If the MimeType mapping + * changes we will still use the old extensions, applications + * will need to be restarted to be aware of new extensions... + * For now it seems ok to have that limitation, if that is a wrong + * assumption we will need to invalidate this list + */ +QStringList *opie_image_extension_List = 0; +static void clean_opie_image_extension_List() { + delete opie_image_extension_List; + opie_image_extension_List = 0; +} + +QStringList opie_imageExtensions() { + /* + * File extensions (e.g jpeg JPG jpg) are not + * parsed yet + */ + if ( !opie_image_extension_List ) { + opie_image_extension_List = new QStringList(); + qAddPostRoutine( clean_opie_image_extension_List ); + + QStrList fileFormats = QImageIO::inputFormats(); + QString ff = fileFormats.first(); + while ( fileFormats.current() ) { + *opie_image_extension_List += MimeType("image/"+ff.lower()).extensions(); + ff = fileFormats.next(); + } + } + + return *opie_image_extension_List; // QShared so it should be efficient +} + /*! Returns the filename of a pixmap called \a pix. You should avoid including any filename type extension (e.g. .png, .xpm). Normally you will use loadPixmap() rather than this function. */ @@ -104,22 +138,17 @@ QString Resource::findPixmap( const QString &pix ) return f; f = picsPath + pix + ".xpm"; if ( QFile( f ).exists() ) return f; // All formats... - QStrList fileFormats = QImageIO::inputFormats(); - QString ff = fileFormats.first(); - while ( fileFormats.current() ) { - QStringList exts = MimeType("image/"+ff.lower()).extensions(); - for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) { - QString f = picsPath + pix + "." + *it; - if ( QFile(f).exists() ) - return f; - } - ff = fileFormats.next(); + QStringList exts = opie_imageExtensions(); + for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) { + QString f = picsPath + pix + "." + *it; + if ( QFile(f).exists() ) + return f; } // Finally, no (or existing) extension... if ( QFile( picsPath + pix ).exists() ) return picsPath + pix; |