author | zecke <zecke> | 2005-04-04 20:23:39 (UTC) |
---|---|---|
committer | zecke <zecke> | 2005-04-04 20:23:39 (UTC) |
commit | 8ea4d025ded75eee0918258121d54273aead66ad (patch) (unidiff) | |
tree | 9fd3ac0d4c355cc3e5c7345b2de8c7edd3b60db1 | |
parent | be7d04d2b402e5515cfac3a2b32ed5831e15340b (diff) | |
download | opie-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
-rw-r--r-- | library/resource.cpp | 35 | ||||
-rw-r--r-- | library/resource.h | 11 |
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 | |||
@@ -1,201 +1,212 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
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 | */ | ||
32 | bool 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 |
33 | namespace { | 39 | namespace { |
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 |
40 | \brief The Resource class provides access to named resources. | 46 | \brief The Resource class provides access to named resources. |
41 | 47 | ||
42 | The resources may be provided from files or other sources. | 48 | The resources may be provided from files or other sources. |
43 | 49 | ||
44 | The allSounds() function returns a list of all the sounds available. | 50 | The allSounds() function returns a list of all the sounds available. |
45 | A particular sound can be searched for using findSound(). | 51 | A particular sound can be searched for using findSound(). |
46 | 52 | ||
47 | Images can be loaded with loadImage(), loadPixmap(), loadBitmap() | 53 | Images can be loaded with loadImage(), loadPixmap(), loadBitmap() |
48 | and loadIconSet(). | 54 | and loadIconSet(). |
49 | 55 | ||
50 | \ingroup qtopiaemb | 56 | \ingroup qtopiaemb |
51 | */ | 57 | */ |
52 | 58 | ||
53 | /*! | 59 | /*! |
54 | \fn Resource::Resource() | 60 | \fn Resource::Resource() |
55 | \internal | 61 | \internal |
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> |
63 | QPixmap Resource::loadPixmap( const QString &pix ) | 69 | QPixmap 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 | */ |
83 | QBitmap Resource::loadBitmap( const QString &pix ) | 91 | QBitmap Resource::loadBitmap( const QString &pix ) |
84 | { | 92 | { |
85 | QBitmap bm; | 93 | QBitmap bm; |
86 | bm = loadPixmap(pix); | 94 | bm = loadPixmap(pix); |
87 | return bm; | 95 | return bm; |
88 | } | 96 | } |
89 | 97 | ||
90 | /* | 98 | /* |
91 | * @internal | 99 | * @internal |
92 | * Parse the extensions only once. If the MimeType mapping | 100 | * Parse the extensions only once. If the MimeType mapping |
93 | * changes we will still use the old extensions, applications | 101 | * changes we will still use the old extensions, applications |
94 | * will need to be restarted to be aware of new extensions... | 102 | * will need to be restarted to be aware of new extensions... |
95 | * For now it seems ok to have that limitation, if that is a wrong | 103 | * For now it seems ok to have that limitation, if that is a wrong |
96 | * assumption we will need to invalidate this list | 104 | * assumption we will need to invalidate this list |
97 | */ | 105 | */ |
98 | QStringList *opie_image_extension_List = 0; | 106 | QStringList *opie_image_extension_List = 0; |
99 | static void clean_opie_image_extension_List() { | 107 | static void clean_opie_image_extension_List() { |
100 | delete opie_image_extension_List; | 108 | delete opie_image_extension_List; |
101 | opie_image_extension_List = 0; | 109 | opie_image_extension_List = 0; |
102 | } | 110 | } |
103 | 111 | ||
104 | QStringList opie_imageExtensions() { | 112 | QStringList opie_imageExtensions() { |
105 | /* | 113 | /* |
106 | * File extensions (e.g jpeg JPG jpg) are not | 114 | * File extensions (e.g jpeg JPG jpg) are not |
107 | * parsed yet | 115 | * parsed yet |
108 | */ | 116 | */ |
109 | if ( !opie_image_extension_List ) { | 117 | if ( !opie_image_extension_List ) { |
110 | opie_image_extension_List = new QStringList(); | 118 | opie_image_extension_List = new QStringList(); |
111 | qAddPostRoutine( clean_opie_image_extension_List ); | 119 | qAddPostRoutine( clean_opie_image_extension_List ); |
112 | 120 | ||
113 | QStrList fileFormats = QImageIO::inputFormats(); | 121 | QStrList fileFormats = QImageIO::inputFormats(); |
114 | QString ff = fileFormats.first(); | 122 | QString ff = fileFormats.first(); |
115 | while ( fileFormats.current() ) { | 123 | while ( fileFormats.current() ) { |
116 | *opie_image_extension_List += MimeType("image/"+ff.lower()).extensions(); | 124 | *opie_image_extension_List += MimeType("image/"+ff.lower()).extensions(); |
117 | ff = fileFormats.next(); | 125 | ff = fileFormats.next(); |
118 | } | 126 | } |
119 | } | 127 | } |
120 | 128 | ||
121 | return *opie_image_extension_List; // QShared so it should be efficient | 129 | return *opie_image_extension_List; // QShared so it should be efficient |
122 | } | 130 | } |
123 | 131 | ||
124 | /*! | 132 | /*! |
125 | Returns the filename of a pixmap called \a pix. You should avoid including | 133 | Returns the filename of a pixmap called \a pix. You should avoid including |
126 | any filename type extension (e.g. .png, .xpm). | 134 | any filename type extension (e.g. .png, .xpm). |
127 | 135 | ||
128 | Normally you will use loadPixmap() rather than this function. | 136 | Normally you will use loadPixmap() rather than this function. |
129 | */ | 137 | */ |
130 | QString Resource::findPixmap( const QString &pix ) | 138 | 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 | ||
166 | Currently, only WAV files are supported. | 177 | Currently, only WAV files are supported. |
167 | */ | 178 | */ |
168 | QString Resource::findSound( const QString &name ) | 179 | QString Resource::findSound( const QString &name ) |
169 | { | 180 | { |
170 | QString picsPath = QPEApplication::qpeDir() + "sounds/"; | 181 | QString picsPath = QPEApplication::qpeDir() + "sounds/"; |
171 | 182 | ||
172 | QString result; | 183 | QString result; |
173 | if ( QFile( (result = picsPath + name + ".wav") ).exists() ) | 184 | if ( QFile( (result = picsPath + name + ".wav") ).exists() ) |
174 | return result; | 185 | return result; |
175 | 186 | ||
176 | return QString(); | 187 | return QString(); |
177 | } | 188 | } |
178 | 189 | ||
179 | /*! | 190 | /*! |
180 | Returns a list of all sound names. | 191 | Returns a list of all sound names. |
181 | */ | 192 | */ |
182 | QStringList Resource::allSounds() | 193 | QStringList Resource::allSounds() |
183 | { | 194 | { |
184 | QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" ); | 195 | QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" ); |
185 | QStringList entries = resourcedir.entryList(); | 196 | QStringList entries = resourcedir.entryList(); |
186 | QStringList result; | 197 | QStringList result; |
187 | for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i) | 198 | for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i) |
188 | result.append((*i).replace(QRegExp("\\.wav"),"")); | 199 | result.append((*i).replace(QRegExp("\\.wav"),"")); |
189 | return result; | 200 | return result; |
190 | } | 201 | } |
191 | 202 | ||
192 | static QImage load_image(const QString &name) | 203 | static QImage load_image(const QString &name) |
193 | { | 204 | { |
194 | QImage img; | 205 | QImage img; |
195 | 206 | ||
196 | #ifndef LIBQPE_NO_INLINE_IMAGES | 207 | #ifndef LIBQPE_NO_INLINE_IMAGES |
197 | img = qembed_findImage(name.latin1()); | 208 | img = qembed_findImage(name.latin1()); |
198 | #endif | 209 | #endif |
199 | if ( img.isNull() ) | 210 | if ( img.isNull() ) |
200 | { | 211 | { |
201 | // No inlined image, try file | 212 | // No inlined image, try file |
diff --git a/library/resource.h b/library/resource.h index 1f1ba9a..4a3502a 100644 --- a/library/resource.h +++ b/library/resource.h | |||
@@ -1,57 +1,66 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
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 | #ifndef PIXMAPLOADER_H | 20 | #ifndef PIXMAPLOADER_H |
21 | #define PIXMAPLOADER_H | 21 | #define PIXMAPLOADER_H |
22 | 22 | ||
23 | #include <qimage.h> | 23 | #include <qimage.h> |
24 | #include <qbitmap.h> | 24 | #include <qbitmap.h> |
25 | #include <qiconset.h> | 25 | #include <qiconset.h> |
26 | #include <qstringlist.h> | 26 | #include <qstringlist.h> |
27 | 27 | ||
28 | class Resource | 28 | class Resource |
29 | { | 29 | { |
30 | public: | 30 | public: |
31 | Resource() {} | 31 | Resource() {} |
32 | 32 | ||
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 | ||
45 | extern bool qpe_fast_findPixmap; | ||
45 | // Inline for compatibility with SHARP ROMs | 46 | // Inline for compatibility with SHARP ROMs |
46 | inline QIconSet Resource::loadIconSet( const QString &pix ) | 47 | inline 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 |