diff options
author | Morten Johan Sørvig <morten.sorvig@qt.io> | 2020-08-11 22:40:47 +0200 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@qt.io> | 2020-08-29 10:03:10 +0200 |
commit | 648610259528b6cc7ef14704af8b15bb835cce95 (patch) | |
tree | aef8ed0ed5659e8f65762282a6d6e4d05bf572cb /src/gui/image/qiconloader.cpp | |
parent | 319462559f6a93f36aeb2c32e2f04896221cf90f (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.cpp | 79 |
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 |