summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/resource.cpp33
1 files changed, 4 insertions, 29 deletions
diff --git a/library/resource.cpp b/library/resource.cpp
index 43fdc60..cfa0d26 100644
--- a/library/resource.cpp
+++ b/library/resource.cpp
@@ -1,255 +1,230 @@
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// this namespace is just a workaround for a gcc bug 28// this namespace is just a workaround for a gcc bug
29// gcc exports inline functions in the generated file 29// gcc exports inline functions in the generated file
30// inlinepics_p.h 30// inlinepics_p.h
31 31
32namespace { 32namespace {
33#include "inlinepics_p.h" 33#include "inlinepics_p.h"
34} 34}
35 35
36static bool g_notUseSet = ::getenv("OVERWRITE_ICON_SET"); 36static bool g_notUseSet = ::getenv("OVERWRITE_ICON_SET");
37 37
38/*! 38/*!
39 \class Resource resource.h 39 \class Resource resource.h
40 \brief The Resource class provides access to named resources. 40 \brief The Resource class provides access to named resources.
41 41
42 The resources may be provided from files or other sources. 42 The resources may be provided from files or other sources.
43 43
44 The allSounds() function returns a list of all the sounds available. 44 The allSounds() function returns a list of all the sounds available.
45 A particular sound can be searched for using findSound(). 45 A particular sound can be searched for using findSound().
46 46
47 Images can be loaded with loadImage(), loadPixmap(), loadBitmap() 47 Images can be loaded with loadImage(), loadPixmap(), loadBitmap()
48 and loadIconSet(). 48 and loadIconSet().
49 49
50 \ingroup qtopiaemb 50 \ingroup qtopiaemb
51*/ 51*/
52 52
53/*! 53/*!
54 \fn Resource::Resource() 54 \fn Resource::Resource()
55 \internal 55 \internal
56*/ 56*/
57 57
58/*! 58/*!
59 Returns the QPixmap called \a pix. You should avoid including 59 Returns the QPixmap called \a pix. You should avoid including
60 any filename type extension (e.g. .png, .xpm). 60 any filename type extension (e.g. .png, .xpm).
61*/ 61*/
62QPixmap Resource::loadPixmap( const QString &pix ) 62QPixmap Resource::loadPixmap( const QString &pix )
63{ 63{
64 QPixmap pm; 64 QPixmap pm;
65 65 QString key="QPE_"+pix;
66 // Give the pixmaps some kind of namespace in the pixmapcache 66 if ( !QPixmapCache::find(key,pm) ) {
67 int index = pix.find('/'); 67 pm.convertFromImage(loadImage(pix));
68 QString appName1 = qApp->argv()[0]; 68 QPixmapCache::insert(key,pm);
69 appName1 = appName1.replace(QRegExp(".*/"),"");
70 QString appName2 = pix.left(index);
71
72 if ( appName2 == "" || appName2 == pix || appName2 == "icons" )
73 appName2 = "Global";
74
75 QString appKey1 = "_QPE_" + appName1 + "_" + pix;
76 QString appKey2 = "_QPE_" + appName2 + "_" + pix.mid(index+1);
77
78 if ( !QPixmapCache::find(appKey1, pm) ) {
79 if ( !QPixmapCache::find(appKey2, pm) ) {
80 QImage img;
81 QString f = findPixmap( pix );
82 if ( !f.isEmpty() ) {
83 img.load(f);
84 if ( !img.isNull() ) {
85 pm.convertFromImage(img);
86 if ( f.contains(appName1) ) {
87 QPixmapCache::insert( appKey1, pm);
88 } else {
89 QPixmapCache::insert( appKey2, pm);
90 }
91 }
92 }
93 }
94 } 69 }
95 return pm; 70 return pm;
96} 71}
97 72
98/*! 73/*!
99 Returns the QBitmap called \a pix. You should avoid including 74 Returns the QBitmap called \a pix. You should avoid including
100 any filename type extension (e.g. .png, .xpm). 75 any filename type extension (e.g. .png, .xpm).
101*/ 76*/
102QBitmap Resource::loadBitmap( const QString &pix ) 77QBitmap Resource::loadBitmap( const QString &pix )
103{ 78{
104 QBitmap bm; 79 QBitmap bm;
105 bm = loadPixmap(pix); 80 bm = loadPixmap(pix);
106 return bm; 81 return bm;
107} 82}
108 83
109/*! 84/*!
110 Returns the filename of a pixmap called \a pix. You should avoid including 85 Returns the filename of a pixmap called \a pix. You should avoid including
111 any filename type extension (e.g. .png, .xpm). 86 any filename type extension (e.g. .png, .xpm).
112 87
113 Normally you will use loadPixmap() rather than this function. 88 Normally you will use loadPixmap() rather than this function.
114*/ 89*/
115QString Resource::findPixmap( const QString &pix ) 90QString Resource::findPixmap( const QString &pix )
116{ 91{
117 QString picsPath = QPEApplication::qpeDir() + "pics/"; 92 QString picsPath = QPEApplication::qpeDir() + "pics/";
118 93
119 QString f; 94 QString f;
120 95
121 // Common case optimizations... 96 // Common case optimizations...
122 f = picsPath + pix + ".png"; 97 f = picsPath + pix + ".png";
123 if ( QFile( f ).exists() ) 98 if ( QFile( f ).exists() )
124 return f; 99 return f;
125 f = picsPath + pix + ".xpm"; 100 f = picsPath + pix + ".xpm";
126 if ( QFile( f ).exists() ) 101 if ( QFile( f ).exists() )
127 return f; 102 return f;
128 103
129 104
130 // All formats... 105 // All formats...
131 QStrList fileFormats = QImageIO::inputFormats(); 106 QStrList fileFormats = QImageIO::inputFormats();
132 QString ff = fileFormats.first(); 107 QString ff = fileFormats.first();
133 while ( fileFormats.current() ) { 108 while ( fileFormats.current() ) {
134 QStringList exts = MimeType("image/"+ff.lower()).extensions(); 109 QStringList exts = MimeType("image/"+ff.lower()).extensions();
135 for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) { 110 for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) {
136 QString f = picsPath + pix + "." + *it; 111 QString f = picsPath + pix + "." + *it;
137 if ( QFile(f).exists() ) 112 if ( QFile(f).exists() )
138 return f; 113 return f;
139 } 114 }
140 ff = fileFormats.next(); 115 ff = fileFormats.next();
141 } 116 }
142 117
143 // Finally, no (or existing) extension... 118 // Finally, no (or existing) extension...
144 if ( QFile( picsPath + pix ).exists() ) 119 if ( QFile( picsPath + pix ).exists() )
145 return picsPath + pix; 120 return picsPath + pix;
146 121
147 //qDebug("Cannot find pixmap: %s", pix.latin1()); 122 //qDebug("Cannot find pixmap: %s", pix.latin1());
148 return QString(); 123 return QString();
149} 124}
150 125
151/*! 126/*!
152 Returns a sound file for a sound called \a name. 127 Returns a sound file for a sound called \a name.
153 128
154 You should avoid including any filename type extension (e.g. .wav), 129 You should avoid including any filename type extension (e.g. .wav),
155 as the system will search for only those fileformats which are supported 130 as the system will search for only those fileformats which are supported
156 by the library. 131 by the library.
157 132
158 Currently, only WAV files are supported. 133 Currently, only WAV files are supported.
159*/ 134*/
160QString Resource::findSound( const QString &name ) 135QString Resource::findSound( const QString &name )
161{ 136{
162 QString picsPath = QPEApplication::qpeDir() + "sounds/"; 137 QString picsPath = QPEApplication::qpeDir() + "sounds/";
163 138
164 QString result; 139 QString result;
165 if ( QFile( (result = picsPath + name + ".wav") ).exists() ) 140 if ( QFile( (result = picsPath + name + ".wav") ).exists() )
166 return result; 141 return result;
167 142
168 return QString(); 143 return QString();
169} 144}
170 145
171/*! 146/*!
172 Returns a list of all sound names. 147 Returns a list of all sound names.
173*/ 148*/
174QStringList Resource::allSounds() 149QStringList Resource::allSounds()
175{ 150{
176 QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" ); 151 QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" );
177 QStringList entries = resourcedir.entryList(); 152 QStringList entries = resourcedir.entryList();
178 QStringList result; 153 QStringList result;
179 for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i) 154 for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i)
180 result.append((*i).replace(QRegExp("\\.wav"),"")); 155 result.append((*i).replace(QRegExp("\\.wav"),""));
181 return result; 156 return result;
182} 157}
183 158
184static QImage load_image(const QString &name) 159static QImage load_image(const QString &name)
185{ 160{
186 if (g_notUseSet ) { 161 if (g_notUseSet ) {
187 // try file 162 // try file
188 QImage img; 163 QImage img;
189 QString f = Resource::findPixmap(name); 164 QString f = Resource::findPixmap(name);
190 if ( !f.isEmpty() ) 165 if ( !f.isEmpty() )
191 img.load(f); 166 img.load(f);
192 if (img.isNull() ) 167 if (img.isNull() )
193 img = qembed_findImage(name.latin1() ); 168 img = qembed_findImage(name.latin1() );
194 return img; 169 return img;
195 } 170 }
196 else{ 171 else{
197 QImage img = qembed_findImage(name.latin1()); 172 QImage img = qembed_findImage(name.latin1());
198 173
199 if ( img.isNull() ) { 174 if ( img.isNull() ) {
200 // No inlined image, try file 175 // No inlined image, try file
201 QString f = Resource::findPixmap(name); 176 QString f = Resource::findPixmap(name);
202 if ( !f.isEmpty() ) 177 if ( !f.isEmpty() )
203 img.load(f); 178 img.load(f);
204 } 179 }
205 return img; 180 return img;
206 } 181 }
207} 182}
208 183
209/*! 184/*!
210 Returns the QImage called \a name. You should avoid including 185 Returns the QImage called \a name. You should avoid including
211 any filename type extension (e.g. .png, .xpm). 186 any filename type extension (e.g. .png, .xpm).
212*/ 187*/
213QImage Resource::loadImage( const QString &name) 188QImage Resource::loadImage( const QString &name)
214{ 189{
215 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps 190 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps
216 static QImage last_enabled; 191 static QImage last_enabled;
217 static QString last_enabled_name; 192 static QString last_enabled_name;
218 if ( name == last_enabled_name ) 193 if ( name == last_enabled_name )
219 return last_enabled; 194 return last_enabled;
220#endif 195#endif
221 QImage img = load_image(name); 196 QImage img = load_image(name);
222 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps 197 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps
223 if ( img.isNull() ) { 198 if ( img.isNull() ) {
224 // No file, try generating 199 // No file, try generating
225 if ( name[name.length()-1]=='d' && name.right(9)=="_disabled" ) { 200 if ( name[name.length()-1]=='d' && name.right(9)=="_disabled" ) {
226 last_enabled_name = name.left(name.length()-9); 201 last_enabled_name = name.left(name.length()-9);
227 last_enabled = load_image(last_enabled_name); 202 last_enabled = load_image(last_enabled_name);
228 if ( last_enabled.isNull() ) { 203 if ( last_enabled.isNull() ) {
229 last_enabled_name = QString::null; 204 last_enabled_name = QString::null;
230 } else { 205 } else {
231 img.detach(); 206 img.detach();
232 img.create( last_enabled.width(), last_enabled.height(), 32 ); 207 img.create( last_enabled.width(), last_enabled.height(), 32 );
233 for ( int y = 0; y < img.height(); y++ ) { 208 for ( int y = 0; y < img.height(); y++ ) {
234 for ( int x = 0; x < img.width(); x++ ) { 209 for ( int x = 0; x < img.width(); x++ ) {
235 QRgb p = last_enabled.pixel( x, y ); 210 QRgb p = last_enabled.pixel( x, y );
236 int a = qAlpha(p)/3; 211 int a = qAlpha(p)/3;
237 int g = qGray(qRed(p),qGreen(p),qBlue(p)); 212 int g = qGray(qRed(p),qGreen(p),qBlue(p));
238 img.setPixel( x, y, qRgba(g,g,g,a) ); 213 img.setPixel( x, y, qRgba(g,g,g,a) );
239 } 214 }
240 } 215 }
241 img.setAlphaBuffer( TRUE ); 216 img.setAlphaBuffer( TRUE );
242 } 217 }
243 } 218 }
244 } 219 }
245#endif 220#endif
246 return img; 221 return img;
247} 222}
248 223
249/*! 224/*!
250 \fn QIconSet Resource::loadIconSet( const QString &name ) 225 \fn QIconSet Resource::loadIconSet( const QString &name )
251 226
252 Returns a QIconSet for the pixmap named \a name. A disabled icon is 227 Returns a QIconSet for the pixmap named \a name. A disabled icon is
253 generated that conforms to the Qtopia look & feel. You should avoid 228 generated that conforms to the Qtopia look & feel. You should avoid
254 including any filename type extension (eg. .png, .xpm). 229 including any filename type extension (eg. .png, .xpm).
255*/ 230*/