summaryrefslogtreecommitdiff
authorzecke <zecke>2005-04-04 20:23:39 (UTC)
committer zecke <zecke>2005-04-04 20:23:39 (UTC)
commit8ea4d025ded75eee0918258121d54273aead66ad (patch) (side-by-side diff)
tree9fd3ac0d4c355cc3e5c7345b2de8c7edd3b60db1
parentbe7d04d2b402e5515cfac3a2b32ed5831e15340b (diff)
downloadopie-8ea4d025ded75eee0918258121d54273aead66ad.zip
opie-8ea4d025ded75eee0918258121d54273aead66ad.tar.gz
opie-8ea4d025ded75eee0918258121d54273aead66ad.tar.bz2
Speed up start times of applications:
-Do not load MimeType when using Resource::loadIconSet we introduce a global boolean (like TT) What is bad: The boolean is visible outside of libqpe and we've that extern in the header... On the former we can use visibility attributes soon
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/resource.cpp35
-rw-r--r--library/resource.h11
2 files changed, 33 insertions, 13 deletions
diff --git a/library/resource.cpp b/library/resource.cpp
index 18139b9..da09892 100644
--- a/library/resource.cpp
+++ b/library/resource.cpp
@@ -12,32 +12,38 @@
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#define QTOPIA_INTERNAL_MIMEEXT
#include <qpe/qpeapplication.h>
#include "resource.h"
#include "mimetype.h"
#include <qdir.h>
#include <qpixmapcache.h>
+/*
+ * enable or disable the search for the icon without .png or .xpm
+ * suffix. We would use MimeType to lookup possible extensions...
+ */
+bool qpe_fast_findPixmap = false; // visible in libqpe
+
// this namespace is just a workaround for a gcc bug
// gcc exports inline functions in the generated file
// inlinepics_p.h
#ifndef LIBQPE_NO_INLINE_IMAGES
namespace {
#include "inlinepics_p.h"
}
#endif
/*!
\class Resource resource.h
\brief The Resource class provides access to named resources.
The resources may be provided from files or other sources.
@@ -52,39 +58,41 @@ namespace {
/*!
\fn Resource::Resource()
\internal
*/
/*!
Returns the QPixmap called \a pix. You should avoid including
any filename type extension (e.g. .png, .xpm).
*/
#include <stdio.h>
QPixmap Resource::loadPixmap( const QString &pix )
{
QPixmap pm; // null pixmap
QString key="QPE_"+pix;
if ( !QPixmapCache::find(key,pm) ) {
- QImage I = loadImage(pix);
- if( I.isNull() ) {
+ QImage I = loadImage(pix);
+ if( I.isNull() ) {
qWarning( "Could not load %s", pix.latin1() );
} else {
pm.convertFromImage(I);
QPixmapCache::insert(key,pm);
}
+ }else {
+ qWarning("In Cache for %s pixmap %s", qApp->argv()[0], pix.local8Bit().data() );
}
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;
}
/*
@@ -127,43 +135,46 @@ QStringList opie_imageExtensions() {
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...
- 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;
- }
+ if ( !qpe_fast_findPixmap ) {
+ printf("Doing slow search for %s %s\n", qApp->argv()[0], pix.local8Bit().data() );
+ // All formats...
+ 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;
+ // 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 )
{
diff --git a/library/resource.h b/library/resource.h
index 1f1ba9a..4a3502a 100644
--- a/library/resource.h
+++ b/library/resource.h
@@ -29,29 +29,38 @@ class Resource
{
public:
Resource() {}
static QImage loadImage( const QString &name);
static QPixmap loadPixmap( const QString &name );
static QBitmap loadBitmap( const QString &name );
static QString findPixmap( const QString &name );
static QIconSet loadIconSet( const QString &name );
static QString findSound( const QString &name );
static QStringList allSounds();
};
+extern bool qpe_fast_findPixmap;
// Inline for compatibility with SHARP ROMs
-inline QIconSet Resource::loadIconSet( const QString &pix )
+inline QIconSet Resource::loadIconSet( const QString &pix )
{
+ /*
+ * disable the slow load
+ */
+ bool oldMode = qpe_fast_findPixmap;
+ qpe_fast_findPixmap = true;
+
QPixmap dpm = loadPixmap( pix + "_disabled" );
QPixmap pm = loadPixmap( pix );
QIconSet is( pm );
if ( !dpm.isNull() )
is.setPixmap( dpm, pm.width() <= 22 ? QIconSet::Small : QIconSet::Large, QIconSet::Disabled );
+
+ qpe_fast_findPixmap = oldMode;
return is;
}
#endif