diff options
Diffstat (limited to 'src/pdf')
-rw-r--r-- | src/pdf/qpdfdocument.cpp | 25 | ||||
-rw-r--r-- | src/pdf/qpdfdocument.h | 2 | ||||
-rw-r--r-- | src/pdf/qpdfdocument_p.h | 2 |
3 files changed, 27 insertions, 2 deletions
diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp index b48bbda..4d7990d 100644 --- a/src/pdf/qpdfdocument.cpp +++ b/src/pdf/qpdfdocument.cpp @@ -57,6 +57,7 @@ void QPdfDocumentPrivate::clear() avail = 0; loadComplete = false; + reportedAvailablePages.clear(); asyncBuffer.close(); asyncBuffer.setData(QByteArray()); @@ -169,8 +170,11 @@ void QPdfDocumentPrivate::tryLoadDocument() updateLastError(); if (lastError == QPdfDocument::IncorrectPasswordError) emit q->passwordRequired(); - else if (doc) + else if (doc) { emit q->documentLoadStarted(); + reportedAvailablePages.resize(FPDF_GetPageCount(doc)); + reportedAvailablePages.fill(false); + } } void QPdfDocumentPrivate::checkComplete() @@ -187,8 +191,14 @@ void QPdfDocumentPrivate::checkComplete() loadComplete = true; for (int i = 0, count = FPDF_GetPageCount(doc); i < count; ++i) - if (!FPDFAvail_IsPageAvail(avail, i, this)) + if (FPDFAvail_IsPageAvail(avail, i, this)) { + if (!reportedAvailablePages.at(i)) { + reportedAvailablePages[i] = true; + emit q->pageAvailable(i); + } + } else { loadComplete = false; + } if (loadComplete) emit q->documentLoadFinished(); } @@ -285,6 +295,14 @@ QSizeF QPdfDocument::pageSize(int page) const return result; } +bool QPdfDocument::canRender(int page) const +{ + QMutexLocker lock(pdfMutex()); + if (!d->doc) + return false; + return d->reportedAvailablePages.at(page); +} + QImage QPdfDocument::render(int page, const QSizeF &pageSize) { if (!d->doc) @@ -292,6 +310,9 @@ QImage QPdfDocument::render(int page, const QSizeF &pageSize) QMutexLocker lock(pdfMutex()); + if (!FPDFAvail_IsPageAvail(d->avail, page, d.data())) + return QImage(); + FPDF_PAGE pdfPage = FPDF_LoadPage(d->doc, page); if (!pdfPage) return QImage(); diff --git a/src/pdf/qpdfdocument.h b/src/pdf/qpdfdocument.h index 6459f39..c846333 100644 --- a/src/pdf/qpdfdocument.h +++ b/src/pdf/qpdfdocument.h @@ -44,11 +44,13 @@ public: QSizeF pageSize(int page) const; + bool canRender(int page) const; QImage render(int page, const QSizeF &pageSize); Q_SIGNALS: void passwordRequired(); void documentLoadStarted(); + void pageAvailable(int page); void documentLoadFinished(); void pageCountChanged(); diff --git a/src/pdf/qpdfdocument_p.h b/src/pdf/qpdfdocument_p.h index 7850c65..2e19fb0 100644 --- a/src/pdf/qpdfdocument_p.h +++ b/src/pdf/qpdfdocument_p.h @@ -9,6 +9,7 @@ #include <qbuffer.h> #include <qnetworkreply.h> #include <qpointer.h> +#include <qbitarray.h> QT_BEGIN_NAMESPACE @@ -23,6 +24,7 @@ public: FPDF_AVAIL avail; FPDF_DOCUMENT doc; bool loadComplete; + QBitArray reportedAvailablePages; QPointer<QIODevice> device; QScopedPointer<QIODevice> ownDevice; |