src/hbcore/image/hbiconsource.cpp
changeset 34 ed14f46c0e55
parent 7 923ff622b8b9
--- 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 <QPicture>
 #include <QScopedPointer>
 #include <QImageReader>
-#include <QPixmap>
+#include <QImage>
 #include <QDir>
 #include <QFile>
 #include <QByteArray>
@@ -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;
         }
     }
 }