src/declarative/graphicsitems/qdeclarativeimagebase.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
child 37 758a864f9613
--- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -50,6 +50,13 @@
 
 QT_BEGIN_NAMESPACE
 
+
+/*!
+    \class QDeclarativeImageBase
+    \internal
+    \brief The base class for declarative images.
+ */
+
 QDeclarativeImageBase::QDeclarativeImageBase(QDeclarativeImageBasePrivate &dd, QDeclarativeItem *parent)
   : QDeclarativeItem(dd, parent)
 {
@@ -57,9 +64,6 @@
 
 QDeclarativeImageBase::~QDeclarativeImageBase()
 {
-    Q_D(QDeclarativeImageBase);
-    if (d->pendingPixmapCache)
-        QDeclarativePixmapCache::cancel(d->url, this);
 }
 
 QDeclarativeImageBase::Status QDeclarativeImageBase::status() const
@@ -91,7 +95,6 @@
     }
 }
 
-
 QUrl QDeclarativeImageBase::source() const
 {
     Q_D(const QDeclarativeImageBase);
@@ -105,11 +108,6 @@
     if ((d->url.isEmpty() == url.isEmpty()) && url == d->url)
         return;
 
-    if (d->pendingPixmapCache) {
-        QDeclarativePixmapCache::cancel(d->url, this);
-        d->pendingPixmapCache = false;
-    }
-
     d->url = url;
     emit sourceChanged(d->url);
 
@@ -122,6 +120,7 @@
     Q_D(QDeclarativeImageBase);
     if (d->sourcesize == size)
         return;
+
     d->sourcesize = size;
     emit sourceSizeChanged();
     if (isComponentComplete())
@@ -143,7 +142,7 @@
     }
 
     if (d->url.isEmpty()) {
-        d->pix = QPixmap();
+        d->pix.clear();
         d->status = Null;
         setImplicitWidth(0);
         setImplicitHeight(0);
@@ -152,48 +151,37 @@
         update();
     } else {
         d->status = Loading;
-        int reqwidth = d->sourcesize.width();
-        int reqheight = d->sourcesize.height();
-        QSize impsize;
-        QString errorString;
-        QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async, reqwidth, reqheight);
-        if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) {
-            QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url, reqwidth, reqheight);
-            d->pendingPixmapCache = true;
+
+        d->pix.load(qmlEngine(this), d->url, d->sourcesize, d->async);
 
-            static int replyDownloadProgress = -1;
-            static int replyFinished = -1;
+        if (d->pix.isLoading()) {
+
             static int thisRequestProgress = -1;
             static int thisRequestFinished = -1;
-            if (replyDownloadProgress == -1) {
-                replyDownloadProgress =
-                    QDeclarativePixmapReply::staticMetaObject.indexOfSignal("downloadProgress(qint64,qint64)");
-                replyFinished =
-                    QDeclarativePixmapReply::staticMetaObject.indexOfSignal("finished()");
+            if (thisRequestProgress == -1) {
                 thisRequestProgress =
                     QDeclarativeImageBase::staticMetaObject.indexOfSlot("requestProgress(qint64,qint64)");
                 thisRequestFinished =
                     QDeclarativeImageBase::staticMetaObject.indexOfSlot("requestFinished()");
             }
 
-            QMetaObject::connect(reply, replyFinished, this,
-                                 thisRequestFinished, Qt::DirectConnection);
-            QMetaObject::connect(reply, replyDownloadProgress, this,
-                                 thisRequestProgress, Qt::DirectConnection);
+            d->pix.connectFinished(this, thisRequestFinished);
+            d->pix.connectDownloadProgress(this, thisRequestProgress);
+
         } else {
-            //### should be unified with requestFinished
-            if (status == QDeclarativePixmapReply::Ready) {
-                setImplicitWidth(impsize.width());
-                setImplicitHeight(impsize.height());
+            QSize impsize = d->pix.implicitSize();
+            setImplicitWidth(impsize.width());
+            setImplicitHeight(impsize.height());
 
-                if (d->status == Loading)
-                    d->status = Ready;
+            if (d->pix.isReady()) {
+                d->status = Ready;
 
                 if (!d->sourcesize.isValid())
                     emit sourceSizeChanged();
+
             } else {
                 d->status = Error;
-                qmlInfo(this) << errorString;
+                qmlInfo(this) << d->pix.error();
             }
             d->progress = 1.0;
             emit statusChanged(d->status);
@@ -201,6 +189,7 @@
             pixmapChange();
             update();
         }
+
     }
 
     emit statusChanged(d->status);
@@ -210,14 +199,13 @@
 {
     Q_D(QDeclarativeImageBase);
 
-    d->pendingPixmapCache = false;
+    QSize impsize = d->pix.implicitSize();
 
-    QSize impsize;
-    QString errorString;
-    if (QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async, d->sourcesize.width(), d->sourcesize.height()) != QDeclarativePixmapReply::Ready) {
+    if (d->pix.isError()) {
         d->status = Error;
-        qmlInfo(this) << errorString;
+        qmlInfo(this) << d->pix.error();
     }
+
     setImplicitWidth(impsize.width());
     setImplicitHeight(impsize.height());