QmlDesigner: Extend icon font support

* Use ADS::IconProvider to make use of font icons
* Add support for IconProvider in FloatingWidgetTitlebar
* Add support for named font icon entities in QmlDesigner::Theme
* Add level of indirection to Constants.qml to be able to parse it
  from inside C++
* Add color and HighDPI support in stylehelper
* Update RichTextEditor
* Update icon font and related constants

Task-number: QDS-1913
Change-Id: I7212f4dfe480dbb340fd042f59c69b8f5ca7a8e4
Reviewed-by: Aleksei German <aleksei.german@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Henning Gruendl
2020-04-20 09:34:38 +02:00
committed by Thomas Hartmann
parent c2de17b280
commit a35a9e72d9
17 changed files with 380 additions and 158 deletions

View File

@@ -28,6 +28,8 @@
#include "theme/theme.h"
#include "hostosinfo.h"
#include <utils/qtcassert.h>
#include <QPixmapCache>
#include <QPainter>
#include <QApplication>
@@ -543,26 +545,35 @@ QLinearGradient StyleHelper::statusBarGradient(const QRect &statusBarRect)
return grad;
}
QPixmap StyleHelper::getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize)
QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize, QColor color)
{
QFontDatabase a;
Q_ASSERT(a.hasFamily(fontName));
QTC_ASSERT(a.hasFamily(fontName), {});
if (a.hasFamily(fontName)) {
QPixmap icon(iconSize, iconSize);
icon.fill(Qt::transparent);
QPainter painter(&icon);
QFont font(fontName);
font.setPixelSize(fontSize);
QColor penColor = QApplication::palette("QWidget").color(QPalette::Normal, QPalette::ButtonText);
painter.save();
painter.setPen(penColor);
painter.setFont(font);
painter.drawText(QRectF(0, 0, iconSize, iconSize), iconSymbol);
QIcon icon;
QSize size(iconSize, iconSize);
painter.restore();
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;
}
@@ -570,6 +581,12 @@ QPixmap StyleHelper::getIconFromIconFont(const QString &fontName, const QString
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()