forked from qt-creator/qt-creator
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:
committed by
Henning Gründl
parent
1fb1e829ee
commit
f726b0d90b
@@ -546,6 +546,41 @@ QLinearGradient StyleHelper::statusBarGradient(const QRect &statusBarRect)
|
||||
return grad;
|
||||
}
|
||||
|
||||
QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QList<IconFontHelper> ¶meters)
|
||||
{
|
||||
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;
|
||||
|
@@ -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> ¶meters);
|
||||
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);
|
||||
|
||||
|
Reference in New Issue
Block a user