summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/resource.cpp49
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
@@ -66,78 +66,107 @@ QPixmap Resource::loadPixmap( const QString &pix )
QString key="QPE_"+pix;
if ( !QPixmapCache::find(key,pm) ) {
QImage I = loadImage(pix);
if( I.isNull() ) {
qWarning( "Could not load %s", pix.latin1() );
} else {
pm.convertFromImage(I);
QPixmapCache::insert(key,pm);
}
}
return pm;
}
/*!
Returns the QBitmap called \a pix. You should avoid including
any filename type extension (e.g. .png, .xpm).
*/
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.
*/
QString Resource::findPixmap( const QString &pix )
{
QString picsPath = QPEApplication::qpeDir() + "pics/";
QString f;
// Common case optimizations...
f = picsPath + pix + ".png";
if ( QFile( f ).exists() )
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;
//qDebug("Cannot find pixmap: %s", pix.latin1());
return QString();
}
/*!
Returns a sound file for a sound called \a name.
You should avoid including any filename type extension (e.g. .wav),
as the system will search for only those fileformats which are supported
by the library.
Currently, only WAV files are supported.
*/
QString Resource::findSound( const QString &name )
{
QString picsPath = QPEApplication::qpeDir() + "sounds/";
QString result;