aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickborderimage.cpp
diff options
context:
space:
mode:
authorDamian Jansen <damian.jansen@nokia.com>2012-07-11 17:01:09 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-13 13:17:12 +0200
commit2ec0df06aa61d23a1a7ad5bdf87c772f376259b7 (patch)
treea472ba74488c8ebc7ee301736f884a447d6d3a03 /src/quick/items/qquickborderimage.cpp
parent04fc2234562507a071e214635e6fe7dc63eda95b (diff)
Fix signal emission for the Image based items when loading.
StatusChanged signals are now always emitted. Other properties only emit when altered. AnimatedImage local and remote loading was also unified in this fix. BorderImage duplicated loading code is streamlined. Task-number: QTBUG-26405 Change-Id: Ib412d5879e0007229a8098e1fa960003051508de Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Diffstat (limited to 'src/quick/items/qquickborderimage.cpp')
-rw-r--r--src/quick/items/qquickborderimage.cpp82
1 files changed, 41 insertions, 41 deletions
diff --git a/src/quick/items/qquickborderimage.cpp b/src/quick/items/qquickborderimage.cpp
index 889877aea1..6c0387f859 100644
--- a/src/quick/items/qquickborderimage.cpp
+++ b/src/quick/items/qquickborderimage.cpp
@@ -293,34 +293,42 @@ void QQuickBorderImage::setSource(const QUrl &url)
void QQuickBorderImage::load()
{
Q_D(QQuickBorderImage);
- if (d->progress != 0.0) {
- d->progress = 0.0;
- emit progressChanged(d->progress);
- }
if (d->url.isEmpty()) {
d->pix.clear(this);
d->status = Null;
setImplicitSize(0, 0);
emit statusChanged(d->status);
+ if (d->progress != 0.0) {
+ d->progress = 0.0;
+ emit progressChanged(d->progress);
+ }
+ if (sourceSize() != d->oldSourceSize) {
+ d->oldSourceSize = sourceSize();
+ emit sourceSizeChanged();
+ }
update();
return;
} else {
- d->status = Loading;
if (d->url.path().endsWith(QLatin1String("sci"))) {
QString lf = QQmlFile::urlToLocalFileOrQrc(d->url);
if (!lf.isEmpty()) {
QFile file(lf);
file.open(QIODevice::ReadOnly);
setGridScaledImage(QQuickGridScaledImage(&file));
+ return;
} else {
+ if (d->progress != 0.0) {
+ d->progress = 0.0;
+ emit progressChanged(d->progress);
+ }
+ d->status = Loading;
QNetworkRequest req(d->url);
d->sciReply = qmlEngine(this)->networkAccessManager()->get(req);
qmlobject_connect(d->sciReply, QNetworkReply, SIGNAL(finished()),
this, QQuickBorderImage, SLOT(sciRequestFinished()))
}
} else {
-
QQuickPixmap::Options options;
if (d->async)
options |= QQuickPixmap::Asynchronous;
@@ -330,23 +338,15 @@ void QQuickBorderImage::load()
d->pix.load(qmlEngine(this), d->url, options);
if (d->pix.isLoading()) {
+ if (d->progress != 0.0) {
+ d->progress = 0.0;
+ emit progressChanged(d->progress);
+ }
+ d->status = Loading;
d->pix.connectFinished(this, SLOT(requestFinished()));
d->pix.connectDownloadProgress(this, SLOT(requestProgress(qint64,qint64)));
} else {
- QSize impsize = d->pix.implicitSize();
- setImplicitSize(impsize.width(), impsize.height());
-
- if (d->pix.isReady()) {
- d->status = Ready;
- } else {
- d->status = Error;
- qmlInfo(this) << d->pix.error();
- }
-
- d->progress = 1.0;
- emit statusChanged(d->status);
- emit progressChanged(d->progress);
- update();
+ requestFinished();
return;
}
}
@@ -462,6 +462,14 @@ void QQuickBorderImage::setGridScaledImage(const QQuickGridScaledImage& sci)
d->pix.load(qmlEngine(this), d->sciurl, options);
if (d->pix.isLoading()) {
+ if (d->progress != 0.0) {
+ d->progress = 0.0;
+ emit progressChanged(d->progress);
+ }
+ if (d->status != Loading) {
+ d->status = Loading;
+ emit statusChanged(d->status);
+ }
static int thisRequestProgress = -1;
static int thisRequestFinished = -1;
if (thisRequestProgress == -1) {
@@ -475,22 +483,7 @@ void QQuickBorderImage::setGridScaledImage(const QQuickGridScaledImage& sci)
d->pix.connectDownloadProgress(this, thisRequestProgress);
} else {
-
- QSize impsize = d->pix.implicitSize();
- setImplicitSize(impsize.width(), impsize.height());
-
- if (d->pix.isReady()) {
- d->status = Ready;
- } else {
- d->status = Error;
- qmlInfo(this) << d->pix.error();
- }
-
- d->progress = 1.0;
- emit statusChanged(d->status);
- emit progressChanged(1.0);
- update();
-
+ requestFinished();
}
}
}
@@ -503,18 +496,25 @@ void QQuickBorderImage::requestFinished()
if (d->pix.isError()) {
d->status = Error;
qmlInfo(this) << d->pix.error();
+ if (d->progress != 0) {
+ d->progress = 0;
+ emit progressChanged(d->progress);
+ }
} else {
d->status = Ready;
+ if (d->progress != 1.0) {
+ d->progress = 1.0;
+ emit progressChanged(d->progress);
+ }
}
setImplicitSize(impsize.width(), impsize.height());
-
- if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height())
+ emit statusChanged(d->status);
+ if (sourceSize() != d->oldSourceSize) {
+ d->oldSourceSize = sourceSize();
emit sourceSizeChanged();
+ }
- d->progress = 1.0;
- emit statusChanged(d->status);
- emit progressChanged(1.0);
update();
}