diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-02-21 11:38:27 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-02-21 11:40:49 +0100 |
commit | d9349a299f66fb154ad24f410451872a7ca253fb (patch) | |
tree | 2e8258ef3679707a2a9245c85bc8490251b3e256 /src/pdf/quick/qquickpdfdocument.cpp | |
parent | 50bc8b124705c33c5e27f035b1eab756e14247ba (diff) | |
parent | c0aa9d794378846e4cc0b6fe94f2765bc31cefdd (diff) |
Merge remote-tracking branch 'origin/wip/qtpdf' into 5.15v5.15.0-beta1
The feature set is mostly in place (except for some known shortcomings)
and we need the merge to build it on iOS.
Task-number: QTBUG-69519
Change-Id: Ib1ac82a9a7e0830d98d1c4327a1b15d4d7f4d4c1
Diffstat (limited to 'src/pdf/quick/qquickpdfdocument.cpp')
-rw-r--r-- | src/pdf/quick/qquickpdfdocument.cpp | 105 |
1 files changed, 87 insertions, 18 deletions
diff --git a/src/pdf/quick/qquickpdfdocument.cpp b/src/pdf/quick/qquickpdfdocument.cpp index 73b3d4537..3d5f0fa10 100644 --- a/src/pdf/quick/qquickpdfdocument.cpp +++ b/src/pdf/quick/qquickpdfdocument.cpp @@ -43,14 +43,14 @@ QT_BEGIN_NAMESPACE /*! - \qmltype Document + \qmltype PdfDocument \instantiates QQuickPdfDocument \inqmlmodule QtQuick.Pdf \ingroup pdf \brief A representation of a PDF document. \since 5.15 - A Document provides access to PDF document meta-information. + PdfDocument provides access to PDF document meta-information. It is not necessary for rendering, as it is enough to use an \l Image with source set to the URL of the PDF. */ @@ -78,7 +78,7 @@ void QQuickPdfDocument::componentComplete() } /*! - \qmlproperty url Document::source + \qmlproperty url PdfDocument::source This property holds a URL pointing to the PDF file to be loaded. @@ -90,12 +90,16 @@ void QQuickPdfDocument::setSource(QUrl source) return; m_source = source; + m_maxPageWidthHeight = QSizeF(); emit sourceChanged(); - m_doc.load(source.path()); + if (source.scheme() == QLatin1String("qrc")) + m_doc.load(QLatin1Char(':') + source.path()); + else + m_doc.load(source.path()); } /*! - \qmlproperty string Document::error + \qmlproperty string PdfDocument::error This property holds a translated string representation of the current error, if any. @@ -130,7 +134,7 @@ QString QQuickPdfDocument::error() const } /*! - \qmlproperty bool Document::password + \qmlproperty bool PdfDocument::password This property holds the document password. If the passwordRequired() signal is emitted, the UI should prompt the user and then set this @@ -146,13 +150,13 @@ void QQuickPdfDocument::setPassword(const QString &password) } /*! - \qmlproperty int Document::pageCount + \qmlproperty int PdfDocument::pageCount This property holds the number of pages the PDF contains. */ /*! - \qmlsignal Document::passwordRequired() + \qmlsignal PdfDocument::passwordRequired() This signal is emitted when the PDF requires a password in order to open. The UI in a typical PDF viewer should prompt the user for the password @@ -160,7 +164,7 @@ void QQuickPdfDocument::setPassword(const QString &password) */ /*! - \qmlmethod size Document::pagePointSize(int page) + \qmlmethod size PdfDocument::pagePointSize(int page) Returns the size of the given \a page in points. */ @@ -169,60 +173,125 @@ QSizeF QQuickPdfDocument::pagePointSize(int page) const return m_doc.pageSize(page); } +qreal QQuickPdfDocument::maxPageWidth() const +{ + const_cast<QQuickPdfDocument *>(this)->updateMaxPageSize(); + return m_maxPageWidthHeight.width(); +} + +qreal QQuickPdfDocument::maxPageHeight() const +{ + const_cast<QQuickPdfDocument *>(this)->updateMaxPageSize(); + return m_maxPageWidthHeight.height(); +} + +/*! + \internal + \qmlmethod size PdfDocument::heightSumBeforePage(int page) + + Returns the sum of the heights, in points, of all sets of \a facingPages + pages from 0 to the given \a page, exclusive. + + That is, if the pages were laid out end-to-end in adjacent sets of + \a facingPages, what would be the distance in points from the top of the + first page to the top of the given page. +*/ +// Workaround for lack of something analogous to ListView.positionViewAtIndex() in TableView +qreal QQuickPdfDocument::heightSumBeforePage(int page, qreal spacing, int facingPages) const +{ + qreal ret = 0; + for (int i = 0; i < page; i+= facingPages) { + if (i + facingPages > page) + break; + qreal facingPagesHeight = 0; + for (int j = i; j < i + facingPages; ++j) + facingPagesHeight = qMax(facingPagesHeight, pagePointSize(j).height()); + ret += facingPagesHeight + spacing; + } + return ret; +} + +void QQuickPdfDocument::updateMaxPageSize() +{ + if (m_maxPageWidthHeight.isValid()) + return; + qreal w = 0; + qreal h = 0; + const int count = pageCount(); + for (int i = 0; i < count; ++i) { + auto size = pagePointSize(i); + w = qMax(w, size.width()); + h = qMax(w, size.height()); + } + m_maxPageWidthHeight = QSizeF(w, h); +} + +/*! + \qmlproperty real PdfDocument::maxPageWidth + + This property holds the width of the widest page in the document, in points. +*/ + +/*! + \qmlproperty real PdfDocument::maxPageHeight + + This property holds the height of the tallest page in the document, in points. +*/ + /*! - \qmlproperty string Document::title + \qmlproperty string PdfDocument::title This property holds the document's title. A typical viewer UI can bind this to the \c Window.title property. */ /*! - \qmlproperty string Document::author + \qmlproperty string PdfDocument::author This property holds the name of the person who created the document. */ /*! - \qmlproperty string Document::subject + \qmlproperty string PdfDocument::subject This property holds the subject of the document. */ /*! - \qmlproperty string Document::keywords + \qmlproperty string PdfDocument::keywords This property holds the keywords associated with the document. */ /*! - \qmlproperty string Document::creator + \qmlproperty string PdfDocument::creator If the document was converted to PDF from another format, this property holds the name of the software that created the original document. */ /*! - \qmlproperty string Document::producer + \qmlproperty string PdfDocument::producer If the document was converted to PDF from another format, this property holds the name of the software that converted it to PDF. */ /*! - \qmlproperty string Document::creationDate + \qmlproperty string PdfDocument::creationDate This property holds the date and time the document was created. */ /*! - \qmlproperty string Document::modificationDate + \qmlproperty string PdfDocument::modificationDate This property holds the date and time the document was most recently modified. */ /*! - \qmlproperty enum Document::status + \qmlproperty enum PdfDocument::status This property tells the current status of the document. The possible values are: |