Disconnect from previous loading image when loading a new image.
Change-Id: If2fa95d9715a55d3f07ecf5f232e4f4b9a44a6fb Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
This commit is contained in:
parent
57f593b96f
commit
c5fb0a9d8a
|
@ -207,6 +207,7 @@ void QQuickImageBase::load()
|
|||
options |= QQuickPixmap::Asynchronous;
|
||||
if (d->cache)
|
||||
options |= QQuickPixmap::Cache;
|
||||
d->pix.clear(this);
|
||||
d->pix.load(qmlEngine(this), d->url, d->sourcesize, options);
|
||||
|
||||
if (d->pix.isLoading()) {
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
import QtQuick 2.0
|
||||
|
||||
Item {
|
||||
property alias status: image1.status
|
||||
|
||||
Image {
|
||||
id: image1
|
||||
asynchronous: true
|
||||
source: "image://test/first-image.png"
|
||||
}
|
||||
|
||||
Image {
|
||||
id: image2
|
||||
asynchronous: true
|
||||
source: "image://test/first-image.png"
|
||||
}
|
||||
|
||||
Timer {
|
||||
interval: 50
|
||||
running: true
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
image1.source = "image://test/second-image.png"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -56,6 +56,7 @@
|
|||
#include <QtGui/QPainter>
|
||||
#include <QtGui/QImageReader>
|
||||
#include <QQuickWindow>
|
||||
#include <QQuickImageProvider>
|
||||
|
||||
#include "../../shared/util.h"
|
||||
#include "../../shared/testhttpserver.h"
|
||||
|
@ -102,6 +103,7 @@ private slots:
|
|||
void sourceSize();
|
||||
void progressAndStatusChanges();
|
||||
void sourceSizeChanges();
|
||||
void correctStatus();
|
||||
|
||||
private:
|
||||
QQmlEngine engine;
|
||||
|
@ -868,6 +870,55 @@ void tst_qquickimage::progressAndStatusChanges()
|
|||
delete obj;
|
||||
}
|
||||
|
||||
class TestQImageProvider : public QQuickImageProvider
|
||||
{
|
||||
public:
|
||||
TestQImageProvider() : QQuickImageProvider(Image) {}
|
||||
|
||||
QImage requestImage(const QString &id, QSize *size, const QSize& requestedSize)
|
||||
{
|
||||
if (id == QLatin1String("first-image.png")) {
|
||||
QTest::qWait(50);
|
||||
int width = 100;
|
||||
int height = 100;
|
||||
QImage image(width, height, QImage::Format_RGB32);
|
||||
image.fill(QColor("yellow").rgb());
|
||||
if (size)
|
||||
*size = QSize(width, height);
|
||||
return image;
|
||||
}
|
||||
|
||||
QTest::qWait(400);
|
||||
int width = 100;
|
||||
int height = 100;
|
||||
QImage image(width, height, QImage::Format_RGB32);
|
||||
image.fill(QColor("green").rgb());
|
||||
if (size)
|
||||
*size = QSize(width, height);
|
||||
return image;
|
||||
}
|
||||
};
|
||||
|
||||
void tst_qquickimage::correctStatus()
|
||||
{
|
||||
QQmlEngine engine;
|
||||
engine.addImageProvider(QLatin1String("test"), new TestQImageProvider());
|
||||
|
||||
QQmlComponent component(&engine, testFileUrl("correctStatus.qml"));
|
||||
QObject *obj = component.create();
|
||||
QVERIFY(obj);
|
||||
|
||||
QTest::qWait(200);
|
||||
|
||||
// at this point image1 should be attempting to load second-image.png,
|
||||
// and should be in the loading state. Without a clear prior to that load,
|
||||
// the status can mistakenly be in the ready state.
|
||||
QCOMPARE(obj->property("status").toInt(), int(QQuickImage::Loading));
|
||||
|
||||
QTest::qWait(400);
|
||||
delete obj;
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_qquickimage)
|
||||
|
||||
#include "tst_qquickimage.moc"
|
||||
|
|
Loading…
Reference in New Issue