summaryrefslogtreecommitdiff
authorzecke <zecke>2005-04-04 20:23:39 (UTC)
committer zecke <zecke>2005-04-04 20:23:39 (UTC)
commit8ea4d025ded75eee0918258121d54273aead66ad (patch) (unidiff)
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
@@ -16,24 +16,30 @@
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#define QTOPIA_INTERNAL_MIMEEXT 21#define QTOPIA_INTERNAL_MIMEEXT
22#include <qpe/qpeapplication.h> 22#include <qpe/qpeapplication.h>
23#include "resource.h" 23#include "resource.h"
24#include "mimetype.h" 24#include "mimetype.h"
25#include <qdir.h> 25#include <qdir.h>
26#include <qpixmapcache.h> 26#include <qpixmapcache.h>
27 27
28/*
29 * enable or disable the search for the icon without .png or .xpm
30 * suffix. We would use MimeType to lookup possible extensions...
31 */
32bool qpe_fast_findPixmap = false; // visible in libqpe
33
28// this namespace is just a workaround for a gcc bug 34// this namespace is just a workaround for a gcc bug
29// gcc exports inline functions in the generated file 35// gcc exports inline functions in the generated file
30// inlinepics_p.h 36// inlinepics_p.h
31 37
32#ifndef LIBQPE_NO_INLINE_IMAGES 38#ifndef LIBQPE_NO_INLINE_IMAGES
33namespace { 39namespace {
34#include "inlinepics_p.h" 40#include "inlinepics_p.h"
35} 41}
36#endif 42#endif
37 43
38/*! 44/*!
39 \class Resource resource.h 45 \class Resource resource.h
@@ -56,31 +62,33 @@ namespace {
56*/ 62*/
57 63
58/*! 64/*!
59 Returns the QPixmap called \a pix. You should avoid including 65 Returns the QPixmap called \a pix. You should avoid including
60 any filename type extension (e.g. .png, .xpm). 66 any filename type extension (e.g. .png, .xpm).
61*/ 67*/
62#include <stdio.h> 68#include <stdio.h>
63QPixmap Resource::loadPixmap( const QString &pix ) 69QPixmap Resource::loadPixmap( const QString &pix )
64{ 70{
65 QPixmap pm; // null pixmap 71 QPixmap pm; // null pixmap
66 QString key="QPE_"+pix; 72 QString key="QPE_"+pix;
67 if ( !QPixmapCache::find(key,pm) ) { 73 if ( !QPixmapCache::find(key,pm) ) {
68 QImage I = loadImage(pix); 74 QImage I = loadImage(pix);
69 if( I.isNull() ) { 75 if( I.isNull() ) {
70 qWarning( "Could not load %s", pix.latin1() ); 76 qWarning( "Could not load %s", pix.latin1() );
71 } else { 77 } else {
72 pm.convertFromImage(I); 78 pm.convertFromImage(I);
73 QPixmapCache::insert(key,pm); 79 QPixmapCache::insert(key,pm);
74 } 80 }
81 }else {
82 qWarning("In Cache for %s pixmap %s", qApp->argv()[0], pix.local8Bit().data() );
75 } 83 }
76 return pm; 84 return pm;
77} 85}
78 86
79/*! 87/*!
80 Returns the QBitmap called \a pix. You should avoid including 88 Returns the QBitmap called \a pix. You should avoid including
81 any filename type extension (e.g. .png, .xpm). 89 any filename type extension (e.g. .png, .xpm).
82*/ 90*/
83QBitmap Resource::loadBitmap( const QString &pix ) 91QBitmap Resource::loadBitmap( const QString &pix )
84{ 92{
85 QBitmap bm; 93 QBitmap bm;
86 bm = loadPixmap(pix); 94 bm = loadPixmap(pix);
@@ -131,35 +139,38 @@ QString Resource::findPixmap( const QString &pix )
131{ 139{
132 QString picsPath = QPEApplication::qpeDir() + "pics/"; 140 QString picsPath = QPEApplication::qpeDir() + "pics/";
133 QString f; 141 QString f;
134 142
135 // Common case optimizations... 143 // Common case optimizations...
136 f = picsPath + pix + ".png"; 144 f = picsPath + pix + ".png";
137 if ( QFile( f ).exists() ) 145 if ( QFile( f ).exists() )
138 return f; 146 return f;
139 f = picsPath + pix + ".xpm"; 147 f = picsPath + pix + ".xpm";
140 if ( QFile( f ).exists() ) 148 if ( QFile( f ).exists() )
141 return f; 149 return f;
142 150
143 // All formats... 151 if ( !qpe_fast_findPixmap ) {
144 QStringList exts = opie_imageExtensions(); 152 printf("Doing slow search for %s %s\n", qApp->argv()[0], pix.local8Bit().data() );
145 for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) { 153 // All formats...
146 QString f = picsPath + pix + "." + *it; 154 QStringList exts = opie_imageExtensions();
147 if ( QFile(f).exists() ) 155 for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) {
148 return f; 156 QString f = picsPath + pix + "." + *it;
149 } 157 if ( QFile(f).exists() )
158 return f;
159 }
150 160
151 // Finally, no (or existing) extension... 161 // Finally, no (or existing) extension...
152 if ( QFile( picsPath + pix ).exists() ) 162 if ( QFile( picsPath + pix ).exists() )
153 return picsPath + pix; 163 return picsPath + pix;
164 }
154 165
155 //qDebug("Cannot find pixmap: %s", pix.latin1()); 166 //qDebug("Cannot find pixmap: %s", pix.latin1());
156 return QString(); 167 return QString();
157} 168}
158 169
159/*! 170/*!
160 Returns a sound file for a sound called \a name. 171 Returns a sound file for a sound called \a name.
161 172
162 You should avoid including any filename type extension (e.g. .wav), 173 You should avoid including any filename type extension (e.g. .wav),
163 as the system will search for only those fileformats which are supported 174 as the system will search for only those fileformats which are supported
164 by the library. 175 by the library.
165 176
diff --git a/library/resource.h b/library/resource.h
index 1f1ba9a..4a3502a 100644
--- a/library/resource.h
+++ b/library/resource.h
@@ -33,25 +33,34 @@ public:
33 static QImage loadImage( const QString &name); 33 static QImage loadImage( const QString &name);
34 34
35 static QPixmap loadPixmap( const QString &name ); 35 static QPixmap loadPixmap( const QString &name );
36 static QBitmap loadBitmap( const QString &name ); 36 static QBitmap loadBitmap( const QString &name );
37 static QString findPixmap( const QString &name ); 37 static QString findPixmap( const QString &name );
38 38
39 static QIconSet loadIconSet( const QString &name ); 39 static QIconSet loadIconSet( const QString &name );
40 40
41 static QString findSound( const QString &name ); 41 static QString findSound( const QString &name );
42 static QStringList allSounds(); 42 static QStringList allSounds();
43}; 43};
44 44
45extern bool qpe_fast_findPixmap;
45// Inline for compatibility with SHARP ROMs 46// Inline for compatibility with SHARP ROMs
46inline QIconSet Resource::loadIconSet( const QString &pix ) 47inline QIconSet Resource::loadIconSet( const QString &pix )
47{ 48{
49 /*
50 * disable the slow load
51 */
52 bool oldMode = qpe_fast_findPixmap;
53 qpe_fast_findPixmap = true;
54
48 QPixmap dpm = loadPixmap( pix + "_disabled" ); 55 QPixmap dpm = loadPixmap( pix + "_disabled" );
49 QPixmap pm = loadPixmap( pix ); 56 QPixmap pm = loadPixmap( pix );
50 QIconSet is( pm ); 57 QIconSet is( pm );
51 if ( !dpm.isNull() ) 58 if ( !dpm.isNull() )
52 is.setPixmap( dpm, pm.width() <= 22 ? QIconSet::Small : QIconSet::Large, QIconSet::Disabled ); 59 is.setPixmap( dpm, pm.width() <= 22 ? QIconSet::Small : QIconSet::Large, QIconSet::Disabled );
60
61 qpe_fast_findPixmap = oldMode;
53 return is; 62 return is;
54} 63}
55 64
56 65
57#endif 66#endif