summaryrefslogtreecommitdiff
path: root/library/resource.cpp
Side-by-side diff
Diffstat (limited to 'library/resource.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/resource.cpp125
1 files changed, 98 insertions, 27 deletions
diff --git a/library/resource.cpp b/library/resource.cpp
index 0915c45..0db2a75 100644
--- a/library/resource.cpp
+++ b/library/resource.cpp
@@ -1,6 +1,6 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
@@ -19,6 +19,8 @@
**********************************************************************/
+#define QTOPIA_INTERNAL_MIMEEXT
#include "qpeapplication.h"
#include "resource.h"
+#include "mimetype.h"
#include <qdir.h>
#include <qfile.h>
@@ -34,4 +36,12 @@
The resources may be provided from files or other sources.
+
+ The allSounds() function returns a list of all the sounds available.
+ A particular sound can be searched for using findSound().
+
+ Images can be loaded with loadImage(), loadPixmap(), loadBitmap()
+ and loadIconSet().
+
+ \ingroup qtopiaemb
*/
@@ -42,8 +52,8 @@
/*!
- Returns the QPixmap named \a pix. You should avoid including
- any filename type extension (eg. .png, .xpm).
+ Returns the QPixmap called \a pix. You should avoid including
+ any filename type extension (e.g. .png, .xpm).
*/
-QPixmap Resource::loadPixmap( const QString &pix )
+QPixmap Resource::loadPixmap( const QString &pix )
{
QPixmap pm;
@@ -57,8 +67,8 @@ QPixmap Resource::loadPixmap( const QString &pix )
/*!
- Returns the QBitmap named \a pix. You should avoid including
- any filename type extension (eg. .png, .xpm).
+ 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 Resource::loadBitmap( const QString &pix )
{
QBitmap bm;
@@ -68,6 +78,6 @@ QBitmap Resource::loadBitmap( const QString &pix )
/*!
- Returns the filename of a pixmap named \a pix. You should avoid including
- any filename type extension (eg. .png, .xpm .jpg .jpeg).
+ 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.
@@ -77,13 +87,29 @@ QString Resource::findPixmap( const QString &pix )
QString picsPath = QPEApplication::qpeDir() + "pics/";
- if ( QFile( picsPath + pix + ".png").exists() )
- return picsPath + pix + ".png";
- else if ( QFile( picsPath + pix + ".jpeg").exists() )
- return picsPath + pix + ".jpeg";
- else if ( QFile( picsPath + pix + ".jpg").exists() )
- return picsPath + pix + ".jpg";
- else if ( QFile( picsPath + pix + ".xpm").exists() )
- return picsPath + pix + ".xpm";
- else if ( QFile( picsPath + pix ).exists() )
+ 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();
+ }
+
+ // Finally, no (or existing) extension...
+ if ( QFile( picsPath + pix ).exists() )
return picsPath + pix;
@@ -93,6 +119,11 @@ QString Resource::findPixmap( const QString &pix )
/*!
- Returns a sound file for a sound named \a name.
- You should avoid including any filename type extension (eg. .wav, .au, .mp3).
+ 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 )
@@ -120,18 +151,58 @@ QStringList Resource::allSounds()
}
+static QImage load_image(const QString &name)
+{
+ QImage img = qembed_findImage(name.latin1());
+ if ( img.isNull() ) {
+ // No inlined image, try file
+ QString f = Resource::findPixmap(name);
+ if ( !f.isEmpty() )
+ img.load(f);
+ }
+ return img;
+}
+
/*!
- Returns the QImage named \a name. You should avoid including
- any filename type extension (eg. .png, .xpm .jpg).
+ Returns the QImage called \a name. You should avoid including
+ any filename type extension (e.g. .png, .xpm).
*/
QImage Resource::loadImage( const QString &name)
{
- QImage img = qembed_findImage(name.latin1());
- if ( img.isNull() )
- return QImage(findPixmap(name));
+#ifndef QT_NO_DEPTH_32 // have alpha-blended pixmaps
+ static QImage last_enabled;
+ static QString last_enabled_name;
+ if ( name == last_enabled_name )
+ return last_enabled;
+#endif
+ QImage img = load_image(name);
+#ifndef QT_NO_DEPTH_32 // have alpha-blended pixmaps
+ if ( img.isNull() ) {
+ // No file, try generating
+ if ( name[name.length()-1]=='d' && name.right(9)=="_disabled" ) {
+ last_enabled_name = name.left(name.length()-9);
+ last_enabled = load_image(last_enabled_name);
+ if ( last_enabled.isNull() ) {
+ last_enabled_name = QString::null;
+ } else {
+ img.detach();
+ img.create( last_enabled.width(), last_enabled.height(), 32 );
+ for ( int y = 0; y < img.height(); y++ ) {
+ for ( int x = 0; x < img.width(); x++ ) {
+ QRgb p = last_enabled.pixel( x, y );
+ int a = qAlpha(p)/3;
+ int g = qGray(qRed(p),qGreen(p),qBlue(p));
+ img.setPixel( x, y, qRgba(g,g,g,a) );
+ }
+ }
+ img.setAlphaBuffer( TRUE );
+ }
+ }
+ }
+#endif
return img;
}
/*!
- \fn QIconSet Resource::loadIconSet( const QString &name )
+ \fn QIconSet Resource::loadIconSet( const QString &name )
Returns a QIconSet for the pixmap named \a name. A disabled icon is