diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2022-06-01 22:55:34 +0200 |
---|---|---|
committer | Axel Spoerl <axel.spoerl@qt.io> | 2023-02-16 11:19:37 +0100 |
commit | 9e0c55cf423d2f521a2152020f76c8abab2f33c5 (patch) | |
tree | d35b9a8bb940f3b6fab7a9fd8f2fd8326fe6b9c1 /src | |
parent | c53fd87cf50e51e338d2f8e54f494a8dbab8d712 (diff) | |
download | qtwebengine-9e0c55cf423d2f521a2152020f76c8abab2f33c5.tar.gz |
Support DecorationRole for icons in QPdfDocument::pageModel
...and begin rendering thumbnails in the widget-based example by adding
a QListView in IconMode.
Change-Id: Ia0f446e48ce868e27cd7d64a3712a7db1b1e618b
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/pdf/qpdfdocument.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp index a6aed4bfe..695b30c59 100644 --- a/src/pdf/qpdfdocument.cpp +++ b/src/pdf/qpdfdocument.cpp @@ -15,6 +15,7 @@ #include <QLoggingCategory> #include <QMetaEnum> #include <QMutex> +#include <QPixmap> #include <QVector2D> #include <QtCore/private/qtools_p.h> @@ -56,6 +57,7 @@ public: { if (!index.isValid()) return QVariant(); + switch (QPdfDocument::PageModelRole(role)) { case QPdfDocument::PageModelRole::Label: return document()->pageLabel(index.row()); @@ -64,6 +66,14 @@ public: case QPdfDocument::PageModelRole::NRoles: break; } + + switch (role) { + case Qt::DecorationRole: + return pageThumbnail(index.row()); + case Qt::DisplayRole: + return document()->pageLabel(index.row()); + } + return QVariant(); } @@ -73,8 +83,24 @@ public: private: QPdfDocument *document() const { return static_cast<QPdfDocument *>(parent()); } + QPixmap pageThumbnail(int page) const + { + auto it = m_thumbnails.constFind(page); + if (it == m_thumbnails.constEnd()) { + auto doc = document(); + auto size = doc->pagePointSize(page); + size.scale(128, 128, Qt::KeepAspectRatio); + // TODO use QPdfPageRenderer for threading? + auto image = document()->render(page, size.toSize()); + QPixmap ret = QPixmap::fromImage(image); + m_thumbnails.insert(page, ret); + return ret; + } + return it.value(); + } QHash<int, QByteArray> m_roleNames; + mutable QHash<int, QPixmap> m_thumbnails; }; QPdfDocumentPrivate::QPdfDocumentPrivate() |