From 6b77a1cdb9536b1c135eb86d53a6b2c22c19b0a4 Mon Sep 17 00:00:00 2001 From: zecke Date: Tue, 10 Sep 2002 12:09:49 +0000 Subject: Qtopia1-6 merge still to test bic changes to be resolved more changes to be made? --- (limited to 'library/resource.cpp') diff --git a/library/resource.cpp b/library/resource.cpp index 0915c45..0db2a75 100644 --- a/library/resource.cpp +++ b/library/resource.cpp @@ -1,7 +1,7 @@ /********************************************************************** -** 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 ** GNU General Public License version 2 as published by the Free Software @@ -18,8 +18,10 @@ ** **********************************************************************/ +#define QTOPIA_INTERNAL_MIMEEXT #include "qpeapplication.h" #include "resource.h" +#include "mimetype.h" #include #include #include @@ -33,6 +35,14 @@ \brief The Resource class provides access to named resources. 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 */ /*! @@ -41,10 +51,10 @@ */ /*! - 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; QString key="QPE_"+pix; @@ -56,10 +66,10 @@ 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; bm = loadPixmap(pix); @@ -67,8 +77,8 @@ 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. */ @@ -76,15 +86,31 @@ 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; //qDebug("Cannot find pixmap: %s", pix.latin1()); @@ -92,8 +118,13 @@ 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 ) { @@ -119,20 +150,60 @@ QStringList Resource::allSounds() return result; } +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 generated that conforms to the Qtopia look & feel. You should avoid -- cgit v0.9.0.2