summaryrefslogtreecommitdiff
path: root/library/resource.cpp
Unidiff
Diffstat (limited to 'library/resource.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/resource.cpp7
1 files changed, 0 insertions, 7 deletions
diff --git a/library/resource.cpp b/library/resource.cpp
index f6b548d..a093e2f 100644
--- a/library/resource.cpp
+++ b/library/resource.cpp
@@ -1,233 +1,226 @@
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
32#ifndef LIBQPE_NO_INLINE_IMAGES 32#ifndef LIBQPE_NO_INLINE_IMAGES
33namespace { 33namespace {
34#include "inlinepics_p.h" 34#include "inlinepics_p.h"
35} 35}
36#endif 36#endif
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*/
62#include <stdio.h> 62#include <stdio.h>
63QPixmap Resource::loadPixmap( const QString &pix ) 63QPixmap Resource::loadPixmap( const QString &pix )
64{ 64{
65 QPixmap pm; // null pixmap 65 QPixmap pm; // null pixmap
66 QString key="QPE_"+pix; 66 QString key="QPE_"+pix;
67 if ( !QPixmapCache::find(key,pm) ) { 67 if ( !QPixmapCache::find(key,pm) ) {
68 QImage I = loadImage(pix); 68 QImage I = loadImage(pix);
69 if( I.isNull() ) { 69 if( I.isNull() ) {
70 qWarning( "Could not load %s", pix.latin1() ); 70 qWarning( "Could not load %s", pix.latin1() );
71 } else { 71 } else {
72 pm.convertFromImage(I); 72 pm.convertFromImage(I);
73 QPixmapCache::insert(key,pm); 73 QPixmapCache::insert(key,pm);
74 } 74 }
75 } 75 }
76 return pm; 76 return pm;
77} 77}
78 78
79/*! 79/*!
80 Returns the QBitmap called \a pix. You should avoid including 80 Returns the QBitmap called \a pix. You should avoid including
81 any filename type extension (e.g. .png, .xpm). 81 any filename type extension (e.g. .png, .xpm).
82*/ 82*/
83QBitmap Resource::loadBitmap( const QString &pix ) 83QBitmap Resource::loadBitmap( const QString &pix )
84{ 84{
85 QBitmap bm; 85 QBitmap bm;
86 bm = loadPixmap(pix); 86 bm = loadPixmap(pix);
87 return bm; 87 return bm;
88} 88}
89 89
90/*! 90/*!
91 Returns the filename of a pixmap called \a pix. You should avoid including 91 Returns the filename of a pixmap called \a pix. You should avoid including
92 any filename type extension (e.g. .png, .xpm). 92 any filename type extension (e.g. .png, .xpm).
93 93
94 Normally you will use loadPixmap() rather than this function. 94 Normally you will use loadPixmap() rather than this function.
95*/ 95*/
96QString Resource::findPixmap( const QString &pix ) 96QString Resource::findPixmap( const QString &pix )
97{ 97{
98 QString picsPath = QPEApplication::qpeDir() + "pics/"; 98 QString picsPath = QPEApplication::qpeDir() + "pics/";
99 QString f; 99 QString f;
100 100
101 // Common case optimizations... 101 // Common case optimizations...
102 f = picsPath + pix + ".png"; 102 f = picsPath + pix + ".png";
103 if ( QFile( f ).exists() ) 103 if ( QFile( f ).exists() )
104 return f; 104 return f;
105 f = picsPath + pix + ".xpm"; 105 f = picsPath + pix + ".xpm";
106 if ( QFile( f ).exists() ) 106 if ( QFile( f ).exists() )
107 return f; 107 return f;
108 108
109 // All formats... 109 // All formats...
110 QStrList fileFormats = QImageIO::inputFormats(); 110 QStrList fileFormats = QImageIO::inputFormats();
111 QString ff = fileFormats.first(); 111 QString ff = fileFormats.first();
112 while ( fileFormats.current() ) { 112 while ( fileFormats.current() ) {
113 QStringList exts = MimeType("image/"+ff.lower()).extensions(); 113 QStringList exts = MimeType("image/"+ff.lower()).extensions();
114 for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) { 114 for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) {
115 QString f = picsPath + pix + "." + *it; 115 QString f = picsPath + pix + "." + *it;
116 if ( QFile(f).exists() ) 116 if ( QFile(f).exists() )
117 return f; 117 return f;
118 } 118 }
119 ff = fileFormats.next(); 119 ff = fileFormats.next();
120 } 120 }
121 121
122 // Finally, no (or existing) extension... 122 // Finally, no (or existing) extension...
123 if ( QFile( picsPath + pix ).exists() ) 123 if ( QFile( picsPath + pix ).exists() )
124 return picsPath + pix; 124 return picsPath + pix;
125 125
126 //qDebug("Cannot find pixmap: %s", pix.latin1()); 126 //qDebug("Cannot find pixmap: %s", pix.latin1());
127 return QString(); 127 return QString();
128} 128}
129 129
130/*! 130/*!
131 Returns a sound file for a sound called \a name. 131 Returns a sound file for a sound called \a name.
132 132
133 You should avoid including any filename type extension (e.g. .wav), 133 You should avoid including any filename type extension (e.g. .wav),
134 as the system will search for only those fileformats which are supported 134 as the system will search for only those fileformats which are supported
135 by the library. 135 by the library.
136 136
137 Currently, only WAV files are supported. 137 Currently, only WAV files are supported.
138*/ 138*/
139QString Resource::findSound( const QString &name ) 139QString Resource::findSound( const QString &name )
140{ 140{
141 QString picsPath = QPEApplication::qpeDir() + "sounds/"; 141 QString picsPath = QPEApplication::qpeDir() + "sounds/";
142 142
143 QString result; 143 QString result;
144 if ( QFile( (result = picsPath + name + ".wav") ).exists() ) 144 if ( QFile( (result = picsPath + name + ".wav") ).exists() )
145 return result; 145 return result;
146 146
147 return QString(); 147 return QString();
148} 148}
149 149
150/*! 150/*!
151 Returns a list of all sound names. 151 Returns a list of all sound names.
152*/ 152*/
153QStringList Resource::allSounds() 153QStringList Resource::allSounds()
154{ 154{
155 QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" ); 155 QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" );
156 QStringList entries = resourcedir.entryList(); 156 QStringList entries = resourcedir.entryList();
157 QStringList result; 157 QStringList result;
158 for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i) 158 for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i)
159 result.append((*i).replace(QRegExp("\\.wav"),"")); 159 result.append((*i).replace(QRegExp("\\.wav"),""));
160 return result; 160 return result;
161} 161}
162 162
163static QImage load_image(const QString &name) 163static QImage load_image(const QString &name)
164{ 164{
165 QImage img; 165 QImage img;
166 166
167#ifndef LIBQPE_NO_INLINE_IMAGES 167#ifndef LIBQPE_NO_INLINE_IMAGES
168 img = qembed_findImage(name.latin1()); 168 img = qembed_findImage(name.latin1());
169#else
170 QString f = Resource::findPixmap( "/inline/" + name );
171 if ( !f.isEmpty() )
172 {
173 img.load(f);
174 return img;
175 }
176#endif 169#endif
177 if ( img.isNull() ) 170 if ( img.isNull() )
178 { 171 {
179 // No inlined image, try file 172 // No inlined image, try file
180 QString f = Resource::findPixmap(name); 173 QString f = Resource::findPixmap(name);
181 if ( !f.isEmpty() ) 174 if ( !f.isEmpty() )
182 img.load(f); 175 img.load(f);
183 } 176 }
184 return img; 177 return img;
185} 178}
186 179
187/*! 180/*!
188 Returns the QImage called \a name. You should avoid including 181 Returns the QImage called \a name. You should avoid including
189 any filename type extension (e.g. .png, .xpm). 182 any filename type extension (e.g. .png, .xpm).
190*/ 183*/
191QImage Resource::loadImage( const QString &name) 184QImage Resource::loadImage( const QString &name)
192{ 185{
193 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps 186 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps
194 static QImage last_enabled; 187 static QImage last_enabled;
195 static QString last_enabled_name; 188 static QString last_enabled_name;
196 if ( name == last_enabled_name ) 189 if ( name == last_enabled_name )
197 return last_enabled; 190 return last_enabled;
198#endif 191#endif
199 QImage img = load_image(name); 192 QImage img = load_image(name);
200 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps 193 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps
201 if ( img.isNull() ) { 194 if ( img.isNull() ) {
202 // No file, try generating 195 // No file, try generating
203 if ( name[name.length()-1]=='d' && name.right(9)=="_disabled" ) { 196 if ( name[name.length()-1]=='d' && name.right(9)=="_disabled" ) {
204 last_enabled_name = name.left(name.length()-9); 197 last_enabled_name = name.left(name.length()-9);
205 last_enabled = load_image(last_enabled_name); 198 last_enabled = load_image(last_enabled_name);
206 if ( last_enabled.isNull() ) { 199 if ( last_enabled.isNull() ) {
207 last_enabled_name = QString::null; 200 last_enabled_name = QString::null;
208 } else { 201 } else {
209 img.detach(); 202 img.detach();
210 img.create( last_enabled.width(), last_enabled.height(), 32 ); 203 img.create( last_enabled.width(), last_enabled.height(), 32 );
211 for ( int y = 0; y < img.height(); y++ ) { 204 for ( int y = 0; y < img.height(); y++ ) {
212 for ( int x = 0; x < img.width(); x++ ) { 205 for ( int x = 0; x < img.width(); x++ ) {
213 QRgb p = last_enabled.pixel( x, y ); 206 QRgb p = last_enabled.pixel( x, y );
214 int a = qAlpha(p)/3; 207 int a = qAlpha(p)/3;
215 int g = qGray(qRed(p),qGreen(p),qBlue(p)); 208 int g = qGray(qRed(p),qGreen(p),qBlue(p));
216 img.setPixel( x, y, qRgba(g,g,g,a) ); 209 img.setPixel( x, y, qRgba(g,g,g,a) );
217 } 210 }
218 } 211 }
219 img.setAlphaBuffer( TRUE ); 212 img.setAlphaBuffer( TRUE );
220 } 213 }
221 } 214 }
222 } 215 }
223#endif 216#endif
224 return img; 217 return img;
225} 218}
226 219
227/*! 220/*!
228 \fn QIconSet Resource::loadIconSet( const QString &name ) 221 \fn QIconSet Resource::loadIconSet( const QString &name )
229 222
230 Returns a QIconSet for the pixmap named \a name. A disabled icon is 223 Returns a QIconSet for the pixmap named \a name. A disabled icon is
231 generated that conforms to the Qtopia look & feel. You should avoid 224 generated that conforms to the Qtopia look & feel. You should avoid
232 including any filename type extension (eg. .png, .xpm). 225 including any filename type extension (eg. .png, .xpm).
233*/ 226*/