32 #endif // HB_BOOTSTRAPPED |
32 #endif // HB_BOOTSTRAPPED |
33 #include <QtSvg/QSvgRenderer> |
33 #include <QtSvg/QSvgRenderer> |
34 #include <QPicture> |
34 #include <QPicture> |
35 #include <QScopedPointer> |
35 #include <QScopedPointer> |
36 #include <QImageReader> |
36 #include <QImageReader> |
37 #include <QPixmap> |
37 #include <QImage> |
38 #include <QDir> |
38 #include <QDir> |
39 #include <QFile> |
39 #include <QFile> |
40 #include <QByteArray> |
40 #include <QByteArray> |
41 #ifndef HB_BOOTSTRAPPED |
41 #ifndef HB_BOOTSTRAPPED |
42 #ifdef HB_NVG_CS_ICON |
42 #ifdef HB_NVG_CS_ICON |
43 #include "hbnvg_p.h" |
43 #include "hbnvg_p.h" |
44 #endif // HB_NVG_CS_ICON |
44 #endif // HB_NVG_CS_ICON |
45 #endif // HB_BOOTSTRAPPED |
45 #endif // HB_BOOTSTRAPPED |
46 |
46 |
|
47 |
47 #ifdef HB_BOOTSTRAPPED |
48 #ifdef HB_BOOTSTRAPPED |
48 |
49 |
49 // Copied from HbIconLoader::formatFromPath, |
50 // Copied from HbIconLoader::formatFromPath, |
50 // to avoid IconLoader dependency in ThemeIndexer, which needs this source file. |
51 // to avoid IconLoader dependency in ThemeIndexer, which needs this source file. |
51 QString iconTypeFromFilename(const QString &iconPath) |
52 QString iconTypeFromFilename(const QString &iconPath) |
226 mDefaultSize = img.size(); |
227 mDefaultSize = img.size(); |
227 } |
228 } |
228 } |
229 } |
229 releaseImageReader(); |
230 releaseImageReader(); |
230 } else if (mType != "BLOB") { |
231 } else if (mType != "BLOB") { |
231 if (!mPixmap) { |
232 if (!mImage) { |
232 mPixmap = new QPixmap(mFilename); |
233 mImage = new QImage(mFilename); |
233 } |
234 if (mImage->isNull()) { |
234 mDefaultSize = mPixmap->size(); |
235 qWarning("HbIconSource::defaultSize: Cannot load %s", qPrintable(mFilename)); |
|
236 } |
|
237 } |
|
238 mDefaultSize = mImage->size(); |
235 } |
239 } |
236 } |
240 } |
237 |
241 |
238 return QSizeF(mDefaultSize); |
242 return QSizeF(mDefaultSize); |
239 } |
243 } |
303 QImageReader *HbIconSource::imageReader() |
310 QImageReader *HbIconSource::imageReader() |
304 { |
311 { |
305 if (!mImageReader) { |
312 if (!mImageReader) { |
306 type(); // make sure type is initialized |
313 type(); // make sure type is initialized |
307 mImageReader = new QImageReader(mFilename, mType.toLatin1()); |
314 mImageReader = new QImageReader(mFilename, mType.toLatin1()); |
|
315 if (!mImageReader->canRead()) { |
|
316 qWarning("HbIconSource::imageReader: Cannot read image %s", qPrintable(mFilename)); |
|
317 } |
308 } |
318 } |
309 return mImageReader && mImageReader->canRead() ? mImageReader : 0; |
319 return mImageReader && mImageReader->canRead() ? mImageReader : 0; |
310 } |
320 } |
311 |
321 |
312 /*! |
322 /*! |
326 void HbIconSource::takeImageReader() |
336 void HbIconSource::takeImageReader() |
327 { |
337 { |
328 mImageReader = 0; |
338 mImageReader = 0; |
329 } |
339 } |
330 |
340 |
331 QPixmap *HbIconSource::pixmap() |
341 /*! |
332 { |
342 Returns the QImage, reading from the file, if needed. |
333 if (!mPixmap) { |
343 |
334 mPixmap = new QPixmap(mFilename); |
344 If image() has been called before and the data is still available |
335 } |
345 then no file access is done. |
336 |
346 |
337 return mPixmap; |
347 HbIconSource works with QImage everywhere so it can be used outside |
338 } |
348 the gui thread too. |
339 |
349 */ |
340 void HbIconSource::deletePixmapIfLargerThan(int limitInBytes) |
350 QImage *HbIconSource::image() |
341 { |
351 { |
342 if (mPixmap) { |
352 if (!mImage) { |
343 QSize size = mPixmap->size(); |
353 // Must use QImage so this function can be called outside the |
344 int sizeInBytes = size.width() * size.height() * mPixmap->depth(); |
354 // main thread. |
|
355 mImage = new QImage(mFilename); |
|
356 if (mImage->isNull()) { |
|
357 qWarning("HbIconSource::image: Cannot load %s", qPrintable(mFilename)); |
|
358 } |
|
359 } |
|
360 return mImage; |
|
361 } |
|
362 |
|
363 void HbIconSource::deleteImageIfLargerThan(int limitInBytes) |
|
364 { |
|
365 if (mImage) { |
|
366 QSize size = mImage->size(); |
|
367 int sizeInBytes = size.width() * size.height() * mImage->depth(); |
345 sizeInBytes /= 8; // depth is in bits, we want bytes |
368 sizeInBytes /= 8; // depth is in bits, we want bytes |
346 |
369 |
347 if (sizeInBytes > limitInBytes) { |
370 if (sizeInBytes > limitInBytes) { |
348 delete mPixmap; |
371 delete mImage; |
349 mPixmap = 0; |
372 mImage = 0; |
350 } |
373 } |
351 } |
374 } |
352 } |
375 } |
353 |
376 |
354 bool HbIconSource::canKeepOpen() const |
377 bool HbIconSource::canKeepOpen() const |