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>bb10
parent
319462559f
commit
6486102595
|
|
@ -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);
|
||||
bool QIconLoaderEngine::isNull()
|
||||
{
|
||||
ensureLoaded();
|
||||
return m_info.entries.isEmpty();
|
||||
}
|
||||
|
||||
// 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
|
||||
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;
|
||||
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();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
QIconEngine::virtual_hook(id, data);
|
||||
}
|
||||
return sizes;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -132,13 +132,17 @@ public:
|
|||
bool read(QDataStream &in) override;
|
||||
bool write(QDataStream &out) const override;
|
||||
|
||||
QString iconName() override;
|
||||
bool isNull() override;
|
||||
QPixmap scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale) override;
|
||||
QList<QSize> availableSizes(QIcon::Mode mode, QIcon::State state) override;
|
||||
|
||||
Q_GUI_EXPORT static QIconLoaderEngineEntry *entryForSize(const QThemeIconInfo &info, const QSize &size, int scale = 1);
|
||||
|
||||
private:
|
||||
QString key() const override;
|
||||
bool hasIcon() const;
|
||||
void ensureLoaded();
|
||||
void virtual_hook(int id, void *data) override;
|
||||
|
||||
QIconLoaderEngine(const QIconLoaderEngine &other);
|
||||
QThemeIconInfo m_info;
|
||||
|
|
|
|||
Loading…
Reference in New Issue