aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2020-04-24 19:44:37 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2020-04-27 13:27:26 +0000
commit5ac3f2958f005eb093c2f0b7fb366c5669bfb62e (patch)
treef9c1ee8e560282a70a3ac72dfaf9e6da3bb83feb /src/libs
parent4435a1997903bbc6d7a554de1daea9d25a21790f (diff)
Add StyleHelper functions for icon font
Change-Id: I783f3405dafbd51bf7433084709a2362ed2bd759 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/utils/stylehelper.cpp45
-rw-r--r--src/libs/utils/stylehelper.h3
2 files changed, 48 insertions, 0 deletions
diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp
index f91c24b52a..68d40accbc 100644
--- a/src/libs/utils/stylehelper.cpp
+++ b/src/libs/utils/stylehelper.cpp
@@ -28,6 +28,8 @@
#include "theme/theme.h"
#include "hostosinfo.h"
+#include <utils/qtcassert.h>
+
#include <QPixmapCache>
#include <QPainter>
#include <QApplication>
@@ -35,6 +37,7 @@
#include <QCommonStyle>
#include <QStyleOption>
#include <QWindow>
+#include <QFontDatabase>
#include <qmath.h>
// Clamps float color values within (0, 255)
@@ -542,6 +545,48 @@ QLinearGradient StyleHelper::statusBarGradient(const QRect &statusBarRect)
return grad;
}
+QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize, QColor color)
+{
+ QFontDatabase a;
+
+ QTC_ASSERT(a.hasFamily(fontName), {});
+
+ if (a.hasFamily(fontName)) {
+
+ QIcon icon;
+ QSize size(iconSize, iconSize);
+
+ const int maxDpr = qRound(qApp->devicePixelRatio());
+ for (int dpr = 1; dpr <= maxDpr; dpr++) {
+ QPixmap pixmap(size * dpr);
+ pixmap.setDevicePixelRatio(dpr);
+ pixmap.fill(Qt::transparent);
+
+ QFont font(fontName);
+ font.setPixelSize(fontSize * dpr);
+
+ QPainter painter(&pixmap);
+ painter.save();
+ painter.setPen(color);
+ painter.setFont(font);
+ painter.drawText(QRectF(QPoint(0, 0), size), iconSymbol);
+ painter.restore();
+
+ icon.addPixmap(pixmap);
+ }
+
+ return icon;
+ }
+
+ return {};
+}
+
+QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize)
+{
+ QColor penColor = QApplication::palette("QWidget").color(QPalette::Normal, QPalette::ButtonText);
+ return getIconFromIconFont(fontName, iconSymbol, fontSize, iconSize, penColor);
+}
+
QString StyleHelper::dpiSpecificImageFile(const QString &fileName)
{
// See QIcon::addFile()
diff --git a/src/libs/utils/stylehelper.h b/src/libs/utils/stylehelper.h
index 4bcec960ad..09f3253435 100644
--- a/src/libs/utils/stylehelper.h
+++ b/src/libs/utils/stylehelper.h
@@ -93,6 +93,9 @@ public:
static void tintImage(QImage &img, const QColor &tintColor);
static QLinearGradient statusBarGradient(const QRect &statusBarRect);
+ 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);
+
static QString dpiSpecificImageFile(const QString &fileName);
static QString imageFileWithResolution(const QString &fileName, int dpr);
static QList<int> availableImageResolutions(const QString &fileName);