void ImageBase::setSourceSize(const QSize &size) { if (size != this->sourceSize()) { Q_D(ImageBase); d->sourceSize = size; d->explicitSourceSize = size.isValid(); emit sourceSizeChanged(); if (d->complete) { d->load(); } } }
void QDeclarativeImageBase::setSourceSize(const QSize& size) { Q_D(QDeclarativeImageBase); if (d->sourcesize == size) return; d->sourcesize = size; d->explicitSourceSize = true; emit sourceSizeChanged(); if (isComponentComplete()) load(); }
void QQuickAndroid9Patch::setSource(const QUrl &source) { if (m_source != source) { m_source = source; m_xDivs.clear(); m_yDivs.clear(); loadImage(); m_sourceSize = m_image.size(); emit sourceChanged(source); emit sourceSizeChanged(m_sourceSize); } }
void QQuickAnimatedImage::load() { Q_D(QQuickAnimatedImage); if (d->url.isEmpty()) { if (d->progress != 0) { d->progress = 0; emit progressChanged(d->progress); } d->setImage(QImage()); d->status = Null; emit statusChanged(d->status); if (sourceSize() != d->oldSourceSize) { d->oldSourceSize = sourceSize(); emit sourceSizeChanged(); } if (isPlaying() != d->oldPlaying) emit playingChanged(); } else { QString lf = QQmlFile::urlToLocalFileOrQrc(d->url); if (!lf.isEmpty()) { d->_movie = new QMovie(lf); movieRequestFinished(); } else { if (d->status != Loading) { d->status = Loading; emit statusChanged(d->status); } if (d->progress != 0) { d->progress = 0; emit progressChanged(d->progress); } QNetworkRequest req(d->url); req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); d->reply = qmlEngine(this)->networkAccessManager()->get(req); QObject::connect(d->reply, SIGNAL(finished()), this, SLOT(movieRequestFinished())); QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(requestProgress(qint64,qint64))); } } }
void QQuickBorderImage::load() { Q_D(QQuickBorderImage); 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(); } pixmapChange(); return; } else { 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 {
void QDeclarativeBorderImage::requestFinished() { Q_D(QDeclarativeBorderImage); QSize impsize = d->pix.implicitSize(); if (d->pix.isError()) { d->status = Error; qmlInfo(this) << d->pix.error(); } else { d->status = Ready; } setImplicitWidth(impsize.width()); setImplicitHeight(impsize.height()); if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height()) emit sourceSizeChanged(); d->progress = 1.0; emit statusChanged(d->status); emit progressChanged(1.0); update(); }
void QQuickImageBase::load() { Q_D(QQuickImageBase); if (d->url.isEmpty()) { d->pix.clear(this); if (d->progress != 0.0) { d->progress = 0.0; emit progressChanged(d->progress); } pixmapChange(); d->status = Null; emit statusChanged(d->status); if (sourceSize() != d->oldSourceSize) { d->oldSourceSize = sourceSize(); emit sourceSizeChanged(); } if (autoTransform() != d->oldAutoTransform) { d->oldAutoTransform = autoTransform(); emitAutoTransformBaseChanged(); } update(); } else { QQuickPixmap::Options options; if (d->async) options |= QQuickPixmap::Asynchronous; if (d->cache) options |= QQuickPixmap::Cache; d->pix.clear(this); const qreal targetDevicePixelRatio = (window() ? window()->effectiveDevicePixelRatio() : qApp->devicePixelRatio()); d->devicePixelRatio = 1.0; QUrl loadUrl = d->url; // QQuickImageProvider and SVG can generate a high resolution image when // sourceSize is set. If sourceSize is not set then the provider default size // will be used, as usual. bool setDevicePixelRatio = false; if (d->sourcesize.isValid()) { if (loadUrl.scheme() == QStringLiteral("image")) { setDevicePixelRatio = true; } else { QString stringUrl = loadUrl.path(QUrl::PrettyDecoded); if (stringUrl.endsWith(QLatin1String("svg")) || stringUrl.endsWith(QLatin1String("svgz"))) { setDevicePixelRatio = true; } } if (setDevicePixelRatio) d->devicePixelRatio = targetDevicePixelRatio; } if (!setDevicePixelRatio) { // (possible) local file: loadUrl and d->devicePixelRatio will be modified if // an "@2x" file is found. resolve2xLocalFile(d->url, targetDevicePixelRatio, &loadUrl, &d->devicePixelRatio); } d->pix.load(qmlEngine(this), loadUrl, d->sourcesize * d->devicePixelRatio, options, d->autoTransform); 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) { thisRequestProgress = QQuickImageBase::staticMetaObject.indexOfSlot("requestProgress(qint64,qint64)"); thisRequestFinished = QQuickImageBase::staticMetaObject.indexOfSlot("requestFinished()"); } d->pix.connectFinished(this, thisRequestFinished); d->pix.connectDownloadProgress(this, thisRequestProgress); update(); //pixmap may have invalidated texture, updatePaintNode needs to be called before the next repaint } else { requestFinished(); } } }
void QQuickAnimatedImage::movieRequestFinished() { Q_D(QQuickAnimatedImage); if (d->reply) { d->redirectCount++; if (d->redirectCount < ANIMATEDIMAGE_MAXIMUM_REDIRECT_RECURSION) { QVariant redirect = d->reply->attribute(QNetworkRequest::RedirectionTargetAttribute); if (redirect.isValid()) { QUrl url = d->reply->url().resolved(redirect.toUrl()); d->reply->deleteLater(); setSource(url); return; } } d->redirectCount=0; d->_movie = new QMovie(d->reply); } if (!d->_movie->isValid()) { qmlInfo(this) << "Error Reading Animated Image File " << d->url.toString(); delete d->_movie; d->_movie = 0; d->setImage(QImage()); if (d->progress != 0) { d->progress = 0; emit progressChanged(d->progress); } d->status = Error; emit statusChanged(d->status); if (sourceSize() != d->oldSourceSize) { d->oldSourceSize = sourceSize(); emit sourceSizeChanged(); } if (isPlaying() != d->oldPlaying) emit playingChanged(); return; } connect(d->_movie, SIGNAL(stateChanged(QMovie::MovieState)), this, SLOT(playingStatusChanged())); connect(d->_movie, SIGNAL(frameChanged(int)), this, SLOT(movieUpdate())); d->_movie->setCacheMode(QMovie::CacheAll); d->status = Ready; emit statusChanged(d->status); if (d->progress != 1.0) { d->progress = 1.0; emit progressChanged(d->progress); } bool pausedAtStart = d->paused; if (d->playing) { d->_movie->start(); } if (pausedAtStart) d->_movie->setPaused(true); if (d->paused || !d->playing) { d->_movie->jumpToFrame(d->preset_currentframe); d->preset_currentframe = 0; } d->setImage(d->_movie->currentPixmap().toImage()); if (isPlaying() != d->oldPlaying) emit playingChanged(); if (sourceSize() != d->oldSourceSize) { d->oldSourceSize = sourceSize(); emit sourceSizeChanged(); } }