QIconEngine: move away from virtual_hook usage

Upgrade existing functions to be virtual functions:
  - virtual QString iconName()
  - virtual bool isNull()
  - virtual QPixmap scaledPixmap(...)
  - virtual QList<QSize> availableSizes(...)

Make all of them non-const and remove the const_casts in
the implementation. Keep the default implementation
which calls virtual_hook(), for compatibility.

Note: availableSizes was already virtual, but now loses
the “const”. Port two overrides in the platform themes.

Keep virutal_hook() around for future expansion.

Task-number: QTBUG-85885
Change-Id: I76d0c9f75bfd6ca870c669047d4ef18b82c692e5
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Morten Johan Sørvig 2020-08-11 22:35:55 +02:00
parent fc4a73aa54
commit 462b36c3de
5 changed files with 15 additions and 17 deletions

View File

@ -876,10 +876,9 @@ QPixmap QIcon::pixmap(const QSize &size, qreal devicePixelRatio, Mode mode, Stat
}
// Try get a pixmap that is big enough to be displayed at device pixel resolution.
QIconEngine::ScaledPixmapArgument scalePixmapArg = { size * devicePixelRatio, mode, state, devicePixelRatio, QPixmap() };
d->engine->virtual_hook(QIconEngine::ScaledPixmapHook, reinterpret_cast<void*>(&scalePixmapArg));
scalePixmapArg.pixmap.setDevicePixelRatio(d->pixmapDevicePixelRatio(devicePixelRatio, size, scalePixmapArg.pixmap.size()));
return scalePixmapArg.pixmap;
QPixmap pixmap = d->engine->scaledPixmap(size * devicePixelRatio, mode, state, devicePixelRatio);
pixmap.setDevicePixelRatio(d->pixmapDevicePixelRatio(devicePixelRatio, size, pixmap.size()));
return pixmap;
}
/*!

View File

@ -342,12 +342,12 @@ void QIconEngine::virtual_hook(int id, void *data)
\include qiconengine-virtualhookhelper.qdocinc
*/
QList<QSize> QIconEngine::availableSizes(QIcon::Mode mode, QIcon::State state) const
QList<QSize> QIconEngine::availableSizes(QIcon::Mode mode, QIcon::State state)
{
AvailableSizesArgument arg;
arg.mode = mode;
arg.state = state;
const_cast<QIconEngine *>(this)->virtual_hook(QIconEngine::AvailableSizesHook, reinterpret_cast<void*>(&arg));
this->virtual_hook(QIconEngine::AvailableSizesHook, reinterpret_cast<void*>(&arg));
return arg.sizes;
}
@ -358,10 +358,10 @@ QList<QSize> QIconEngine::availableSizes(QIcon::Mode mode, QIcon::State state) c
\include qiconengine-virtualhookhelper.qdocinc
*/
QString QIconEngine::iconName() const
QString QIconEngine::iconName()
{
QString name;
const_cast<QIconEngine *>(this)->virtual_hook(QIconEngine::IconNameHook, reinterpret_cast<void*>(&name));
virtual_hook(QIconEngine::IconNameHook, reinterpret_cast<void*>(&name));
return name;
}
@ -372,10 +372,10 @@ QString QIconEngine::iconName() const
\include qiconengine-virtualhookhelper.qdocinc
*/
bool QIconEngine::isNull() const
bool QIconEngine::isNull()
{
bool isNull = false;
const_cast<QIconEngine *>(this)->virtual_hook(QIconEngine::IsNullHook, &isNull);
virtual_hook(QIconEngine::IsNullHook, &isNull);
return isNull;
}

View File

@ -74,11 +74,11 @@ public:
};
virtual QList<QSize> availableSizes(QIcon::Mode mode = QIcon::Normal,
QIcon::State state = QIcon::Off) const;
QIcon::State state = QIcon::Off);
virtual QString iconName() const;
bool isNull() const; // ### Qt6 make virtual
QPixmap scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale); // ### Qt6 make virtual
virtual QString iconName();
virtual bool isNull();
virtual QPixmap scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale);
struct ScaledPixmapArgument
{
@ -89,7 +89,6 @@ public:
QPixmap pixmap;
};
// ### Qt6: move content to proper virtual functions
virtual void virtual_hook(int id, void *data);
protected:

View File

@ -477,7 +477,7 @@ public:
return QAbstractFileIconEngine::toSizeList(sizes, sizes + sizeof(sizes) / sizeof(sizes[0]));
}
QList<QSize> availableSizes(QIcon::Mode = QIcon::Normal, QIcon::State = QIcon::Off) const override
QList<QSize> availableSizes(QIcon::Mode = QIcon::Normal, QIcon::State = QIcon::Off) override
{ return QCocoaFileIconEngine::availableIconSizes(); }
protected:

View File

@ -888,7 +888,7 @@ public:
explicit QWindowsFileIconEngine(const QFileInfo &info, QPlatformTheme::IconOptions opts) :
QAbstractFileIconEngine(info, opts) {}
QList<QSize> availableSizes(QIcon::Mode = QIcon::Normal, QIcon::State = QIcon::Off) const override
QList<QSize> availableSizes(QIcon::Mode = QIcon::Normal, QIcon::State = QIcon::Off) override
{ return QWindowsTheme::instance()->availableFileIconSizes(); }
protected: