Do pixel conversion on the pixmap decoder thread when possible
authorGunnar Sletta <gunnar.sletta@digia.com>
Mon, 11 Feb 2013 10:14:04 +0000 (11:14 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 12 Feb 2013 07:46:36 +0000 (08:46 +0100)
Change-Id: Id991bee5c0a8b260fc1ca4395402970c6a722b5d
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>

src/quick/util/qquickpixmapcache.cpp
src/quick/util/qquickpixmapcache_p.h

index dda2fbe..7a9bea3 100644 (file)
@@ -91,6 +91,17 @@ static inline QString imageId(const QUrl &url)
     return url.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority).mid(1);
 }
 
+QQuickDefaultTextureFactory::QQuickDefaultTextureFactory(const QImage &image)
+{
+    if (image.format() == QImage::Format_ARGB32_Premultiplied
+            || image.format() == QImage::Format_RGB32) {
+        im = image;
+    } else {
+        im = image.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+    }
+}
+
+
 QSGTexture *QQuickDefaultTextureFactory::createTexture(QQuickWindow *) const
 {
     QSGPlainTexture *t = new QSGPlainTexture();
index 3fefa35..08dba80 100644 (file)
@@ -61,11 +61,7 @@ class QQuickDefaultTextureFactory : public QQuickTextureFactory
 {
     Q_OBJECT
 public:
-    QQuickDefaultTextureFactory(const QImage &i)
-        : im(i)
-    {
-    }
-
+    QQuickDefaultTextureFactory(const QImage &i);
     QSGTexture *createTexture(QQuickWindow *window) const;
     QSize textureSize() const { return im.size(); }
     int textureByteCount() const { return im.byteCount(); }