summaryrefslogtreecommitdiffstats
path: root/src/gui/image/qiconloader.cpp
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@qt.io>2020-08-11 22:40:47 +0200
committerMorten Johan Sørvig <morten.sorvig@qt.io>2020-08-29 10:03:10 +0200
commit648610259528b6cc7ef14704af8b15bb835cce95 (patch)
treeaef8ed0ed5659e8f65762282a6d6e4d05bf572cb /src/gui/image/qiconloader.cpp
parent319462559f6a93f36aeb2c32e2f04896221cf90f (diff)
QIconLoader: port to use new virtual functions
Add override functions and move the implementation out of virtual_hook(). Task-number: QTBUG-85885 Change-Id: I35ed81a3483dd85d49474b78572d5302b0e5b608 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/gui/image/qiconloader.cpp')
-rw-r--r--src/gui/image/qiconloader.cpp79
1 files changed, 35 insertions, 44 deletions
diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp
index 9b91becf97..250e695574 100644
--- a/src/gui/image/qiconloader.cpp
+++ b/src/gui/image/qiconloader.cpp
@@ -834,55 +834,46 @@ QString QIconLoaderEngine::key() const
return QLatin1String("QIconLoaderEngine");
}
-void QIconLoaderEngine::virtual_hook(int id, void *data)
+QString QIconLoaderEngine::iconName()
{
ensureLoaded();
+ return m_info.iconName;
+}
- switch (id) {
- case QIconEngine::AvailableSizesHook:
- {
- QIconEngine::AvailableSizesArgument &arg
- = *reinterpret_cast<QIconEngine::AvailableSizesArgument*>(data);
- const int N = m_info.entries.size();
- QList<QSize> sizes;
- sizes.reserve(N);
-
- // Gets all sizes from the DirectoryInfo entries
- for (int i = 0; i < N; ++i) {
- const QIconLoaderEngineEntry *entry = m_info.entries.at(i);
- if (entry->dir.type == QIconDirInfo::Fallback) {
- sizes.append(QIcon(entry->filename).availableSizes());
- } else {
- int size = entry->dir.size;
- sizes.append(QSize(size, size));
- }
- }
- arg.sizes.swap(sizes); // commit
- }
- break;
- case QIconEngine::IconNameHook:
- {
- QString &name = *reinterpret_cast<QString*>(data);
- name = m_info.iconName;
- }
- break;
- case QIconEngine::IsNullHook:
- {
- *reinterpret_cast<bool*>(data) = m_info.entries.isEmpty();
- }
- break;
- case QIconEngine::ScaledPixmapHook:
- {
- QIconEngine::ScaledPixmapArgument &arg = *reinterpret_cast<QIconEngine::ScaledPixmapArgument*>(data);
- // QIcon::pixmap() multiplies size by the device pixel ratio.
- const int integerScale = qCeil(arg.scale);
- QIconLoaderEngineEntry *entry = entryForSize(m_info, arg.size / integerScale, integerScale);
- arg.pixmap = entry ? entry->pixmap(arg.size, arg.mode, arg.state) : QPixmap();
+bool QIconLoaderEngine::isNull()
+{
+ ensureLoaded();
+ return m_info.entries.isEmpty();
+}
+
+QPixmap QIconLoaderEngine::scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale)
+{
+ ensureLoaded();
+ const int integerScale = qCeil(scale);
+ QIconLoaderEngineEntry *entry = entryForSize(m_info, size / integerScale, integerScale);
+ return entry ? entry->pixmap(size, mode, state) : QPixmap();
+}
+
+QList<QSize> QIconLoaderEngine::availableSizes(QIcon::Mode mode, QIcon::State state)
+{
+ Q_UNUSED(mode);
+ Q_UNUSED(state);
+ ensureLoaded();
+ const int N = m_info.entries.size();
+ QList<QSize> sizes;
+ sizes.reserve(N);
+
+ // Gets all sizes from the DirectoryInfo entries
+ for (int i = 0; i < N; ++i) {
+ const QIconLoaderEngineEntry *entry = m_info.entries.at(i);
+ if (entry->dir.type == QIconDirInfo::Fallback) {
+ sizes.append(QIcon(entry->filename).availableSizes());
+ } else {
+ int size = entry->dir.size;
+ sizes.append(QSize(size, size));
}
- break;
- default:
- QIconEngine::virtual_hook(id, data);
}
+ return sizes;
}
QT_END_NAMESPACE