diff -r 7516d6d86cf5 -r ed14f46c0e55 src/hbcore/image/hbiconsource.cpp --- a/src/hbcore/image/hbiconsource.cpp Mon Oct 04 17:49:30 2010 +0300 +++ b/src/hbcore/image/hbiconsource.cpp Mon Oct 18 18:23:13 2010 +0300 @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include #include #include @@ -44,6 +44,7 @@ #endif // HB_NVG_CS_ICON #endif // HB_BOOTSTRAPPED + #ifdef HB_BOOTSTRAPPED // Copied from HbIconLoader::formatFromPath, @@ -119,7 +120,7 @@ HbIconSource::HbIconSource(const QString &filename) : mFilename(filename), mPicture(0), - mPixmap(0), + mImage(0), mByteArray(0), mSvgRenderer(0), mImageReader(0) @@ -131,7 +132,7 @@ mFilename(filename), mType(type), mPicture(0), - mPixmap(0), + mImage(0), mByteArray(0), mSvgRenderer(0), mImageReader(0) @@ -144,7 +145,7 @@ delete mImageReader; delete mSvgRenderer; delete mPicture; - delete mPixmap; + delete mImage; delete mByteArray; } @@ -228,10 +229,13 @@ } releaseImageReader(); } else if (mType != "BLOB") { - if (!mPixmap) { - mPixmap = new QPixmap(mFilename); + if (!mImage) { + mImage = new QImage(mFilename); + if (mImage->isNull()) { + qWarning("HbIconSource::defaultSize: Cannot load %s", qPrintable(mFilename)); + } } - mDefaultSize = mPixmap->size(); + mDefaultSize = mImage->size(); } } @@ -245,6 +249,9 @@ { if (!mSvgRenderer) { mSvgRenderer = new QSvgRenderer(mFilename); + if (!mSvgRenderer->isValid()) { + qWarning("HbIconSource::svgRenderer: Invalid SVG document: %s", qPrintable(mFilename)); + } } return mSvgRenderer && mSvgRenderer->isValid() ? mSvgRenderer : 0; } @@ -305,6 +312,9 @@ if (!mImageReader) { type(); // make sure type is initialized mImageReader = new QImageReader(mFilename, mType.toLatin1()); + if (!mImageReader->canRead()) { + qWarning("HbIconSource::imageReader: Cannot read image %s", qPrintable(mFilename)); + } } return mImageReader && mImageReader->canRead() ? mImageReader : 0; } @@ -328,25 +338,38 @@ mImageReader = 0; } -QPixmap *HbIconSource::pixmap() +/*! + Returns the QImage, reading from the file, if needed. + + If image() has been called before and the data is still available + then no file access is done. + + HbIconSource works with QImage everywhere so it can be used outside + the gui thread too. + */ +QImage *HbIconSource::image() { - if (!mPixmap) { - mPixmap = new QPixmap(mFilename); + if (!mImage) { + // Must use QImage so this function can be called outside the + // main thread. + mImage = new QImage(mFilename); + if (mImage->isNull()) { + qWarning("HbIconSource::image: Cannot load %s", qPrintable(mFilename)); + } } - - return mPixmap; + return mImage; } -void HbIconSource::deletePixmapIfLargerThan(int limitInBytes) +void HbIconSource::deleteImageIfLargerThan(int limitInBytes) { - if (mPixmap) { - QSize size = mPixmap->size(); - int sizeInBytes = size.width() * size.height() * mPixmap->depth(); + if (mImage) { + QSize size = mImage->size(); + int sizeInBytes = size.width() * size.height() * mImage->depth(); sizeInBytes /= 8; // depth is in bits, we want bytes if (sizeInBytes > limitInBytes) { - delete mPixmap; - mPixmap = 0; + delete mImage; + mImage = 0; } } }