QmlDesigner: Enable modes/states with icon font

Add functionality to use modes and states when generating a QIcon
from a font in StyleHelper

Task-number: QDS-2558
Change-Id: I764e8434a645d0984c6104cd1868fd5b0091d225
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Henning Gruendl
2020-07-13 17:17:39 +02:00
committed by Henning Gründl
parent 1fb1e829ee
commit f726b0d90b
2 changed files with 65 additions and 0 deletions

View File

@@ -546,6 +546,41 @@ QLinearGradient StyleHelper::statusBarGradient(const QRect &statusBarRect)
return grad;
}
QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QList<IconFontHelper> &parameters)
{
QFontDatabase a;
QTC_ASSERT(a.hasFamily(fontName), {});
if (!a.hasFamily(fontName))
return {};
QIcon icon;
for (const IconFontHelper &p : parameters) {
const int maxDpr = qRound(qApp->devicePixelRatio());
for (int dpr = 1; dpr <= maxDpr; dpr++) {
QPixmap pixmap(p.size() * dpr);
pixmap.setDevicePixelRatio(dpr);
pixmap.fill(Qt::transparent);
QFont font(fontName);
font.setPixelSize(p.size().height());
QPainter painter(&pixmap);
painter.save();
painter.setPen(p.color());
painter.setFont(font);
painter.drawText(QRectF(QPoint(0, 0), p.size()), p.iconSymbol());
painter.restore();
icon.addPixmap(pixmap, p.mode(), p.state());
}
}
return icon;
}
QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize, QColor color)
{
QFontDatabase a;

View File

@@ -93,6 +93,36 @@ public:
static void tintImage(QImage &img, const QColor &tintColor);
static QLinearGradient statusBarGradient(const QRect &statusBarRect);
class IconFontHelper
{
public:
IconFontHelper(const QString &iconSymbol,
const QColor &color,
const QSize &size,
QIcon::Mode mode = QIcon::Normal,
QIcon::State state = QIcon::Off)
: m_iconSymbol(iconSymbol)
, m_color(color)
, m_size(size)
, m_mode(mode)
, m_state(state)
{}
QString iconSymbol() const { return m_iconSymbol; }
QColor color() const { return m_color; }
QSize size() const { return m_size; }
QIcon::Mode mode() const { return m_mode; }
QIcon::State state() const { return m_state; }
private:
QString m_iconSymbol;
QColor m_color;
QSize m_size;
QIcon::Mode m_mode;
QIcon::State m_state;
};
static QIcon getIconFromIconFont(const QString &fontName, const QList<IconFontHelper> &parameters);
static QIcon getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize, QColor color);
static QIcon getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize);