aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Gruendl <henning.gruendl@qt.io>2020-07-13 17:17:39 +0200
committerHenning Gründl <henning.gruendl@qt.io>2020-08-03 12:54:51 +0000
commitf726b0d90ba5c586425e4e8e5c08421e97997720 (patch)
tree0df45ca45a8d05ee51cc87cb268414215da01f9e
parent1fb1e829eea0e877f7e907c807203e81b45fef21 (diff)
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>
-rw-r--r--src/libs/utils/stylehelper.cpp35
-rw-r--r--src/libs/utils/stylehelper.h30
2 files changed, 65 insertions, 0 deletions
diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp
index 6f8868cc7b..4b317116c4 100644
--- a/src/libs/utils/stylehelper.cpp
+++ b/src/libs/utils/stylehelper.cpp
@@ -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;
diff --git a/src/libs/utils/stylehelper.h b/src/libs/utils/stylehelper.h
index 09f3253435..a1a24a8d5b 100644
--- a/src/libs/utils/stylehelper.h
+++ b/src/libs/utils/stylehelper.h
@@ -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);