summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2022-06-01 22:55:34 +0200
committerAxel Spoerl <axel.spoerl@qt.io>2023-02-16 11:19:37 +0100
commit9e0c55cf423d2f521a2152020f76c8abab2f33c5 (patch)
treed35b9a8bb940f3b6fab7a9fd8f2fd8326fe6b9c1 /src
parentc53fd87cf50e51e338d2f8e54f494a8dbab8d712 (diff)
downloadqtwebengine-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.cpp26
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()