54void QQuickPdfPageImage::setDocument(QQuickPdfDocument *document)
56 Q_D(QQuickPdfPageImage);
57 if (d->doc == document)
61 disconnect(d->doc->document(), &QPdfDocument::statusChanged,
this, &QQuickPdfPageImage::documentStatusChanged);
64 connect(document->document(), &QPdfDocument::statusChanged,
this, &QQuickPdfPageImage::documentStatusChanged);
65 if (document->document()->status() == QPdfDocument::Status::Ready)
66 setSource(document->resolvedSource());
68 emit documentChanged();
77void QQuickPdfPageImage::load()
79 Q_D(QQuickPdfPageImage);
81 if (!d->doc || !d->doc->carrierFile()) {
83 qmlWarning(
this) <<
"document property not set: falling back to inefficient loading of " << url;
84 QQuickImageBase::load();
88 if (url != d->doc->resolvedSource()) {
89 url = d->doc->resolvedSource();
90 qmlWarning(
this) <<
"document and source properties in conflict: preferring document source " << url;
92 auto carrierFile = d->doc->carrierFile();
93 static int thisRequestProgress = -1;
94 static int thisRequestFinished = -1;
95 if (thisRequestProgress == -1) {
97 QQuickImageBase::staticMetaObject.indexOfSlot(
"requestProgress(qint64,qint64)");
99 QQuickImageBase::staticMetaObject.indexOfSlot(
"requestFinished()");
101 static QMetaMethod requestFinishedSlot = staticMetaObject.method(thisRequestFinished);
103 d->pendingPix->loadImageFromDevice(qmlEngine(
this), carrierFile, url,
104 d->sourceClipRect.toRect(), d->sourcesize * d->devicePixelRatio,
105 QQuickImageProviderOptions(), d->currentFrame, d->frameCount);
107 qCDebug(qLcImg) <<
"loading page" << d->currentFrame <<
"of" << d->frameCount
108 <<
"from" << carrierFile->fileName() <<
"status" << d->pendingPix->status();
110 switch (d->pendingPix->status()) {
111 case QQuickPixmap::Ready:
112 requestFinishedSlot.invoke(
this);
115 case QQuickPixmap::Loading:
116 d->pendingPix->connectFinished(
this, thisRequestFinished);
117 d->pendingPix->connectDownloadProgress(
this, thisRequestProgress);
118 if (d->progress != 0.0) {
120 emit progressChanged(d->progress);
122 if (d->status != Loading) {
124 emit statusChanged(d->status);
128 qCDebug(qLcImg) <<
"unexpected status" << d->pendingPix->status();