Qt ForkAwesome 0.0.4
Library that bundles ForkAwesome for use within Qt applications
renderer.cpp
Go to the documentation of this file.
1#include "./renderer.h"
2
3#include "resources/config.h"
4
5#include <QFontDatabase>
6#include <QGuiApplication>
7#include <QPainter>
8
10namespace QtForkAwesome {
11
13
14struct Renderer::InternalData {
15 explicit InternalData(int id);
16 static constexpr int invalidId = -1;
17
18 int id;
19 QStringList fontFamilies;
20};
21
22Renderer::InternalData::InternalData(int id)
23 : id(id)
24 , fontFamilies(id != invalidId ? QFontDatabase::applicationFontFamilies(id) : QStringList())
25{
26}
27
29
40Renderer::Renderer(const QString &fontFileName)
41 : m_d(std::make_unique<InternalData>(
42 QFontDatabase::addApplicationFont(fontFileName.isEmpty() ? QStringLiteral(":/" META_FONT_FILE_NAME) : fontFileName)))
43{
44}
45
49Renderer::Renderer(const QByteArray &fontData)
50 : m_d(std::make_unique<InternalData>(QFontDatabase::addApplicationFont(fontData)))
51{
52}
53
58{
59 if (QCoreApplication::instance() && m_d->id != InternalData::invalidId) {
60 QFontDatabase::removeApplicationFont(m_d->id);
61 }
62}
63
67Renderer::operator bool() const
68{
69 return !m_d->fontFamilies.empty();
70}
71
75void QtForkAwesome::Renderer::render(QChar character, QPainter *painter, const QRect &rect, const QColor &color) const
76{
77 if (!*this) {
78 return;
79 }
80 auto font = QFont(m_d->fontFamilies.front());
81 font.setPixelSize(rect.height());
82 painter->save();
83 painter->setFont(font);
84 painter->setPen(color);
85 painter->drawText(rect, QString(character), QTextOption(Qt::AlignCenter));
86 painter->restore();
87}
88
92QPixmap QtForkAwesome::Renderer::pixmap(QChar icon, const QSize &size, const QColor &color) const
93{
94 const auto scaleFactor =
95#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
96 !QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? 1.0 :
97#endif
98 qGuiApp->devicePixelRatio();
99 const auto scaledSize = QSize(size * scaleFactor);
100 auto pm = QPixmap(scaledSize);
101 pm.fill(QColor(Qt::transparent));
102 auto painter = QPainter(&pm);
103 render(icon, &painter, QRect(QPoint(), scaledSize), color);
104 pm.setDevicePixelRatio(scaleFactor);
105 return pm;
106}
107
111QPixmap Renderer::pixmap(Icon icon, const QSize &size, const QColor &color) const
112{
113 return pixmap(QChar(static_cast<IconBaseType>(icon)), size, color);
114}
115
116} // namespace QtForkAwesome
Renderer(const QString &fontFileName=QString())
Constructs a new renderer with the given fontFileName.
Definition: renderer.cpp:40
~Renderer()
Destructs the renderer.
Definition: renderer.cpp:57
QPixmap pixmap(QChar icon, const QSize &size, const QColor &color) const
Renders the specified character as pixmap of the specified size.
Definition: renderer.cpp:92
void render(QChar character, QPainter *painter, const QRect &rect, const QColor &color) const
Renders the specified icon using the specified painter.
Definition: renderer.cpp:75
Contains classes provided by the QtForkAwesome library.
Definition: renderer.h:19
Icon
The Icon enum specifies a ForkAwesome icon for calling QtForkAwesome::Renderer::render().
Definition: icon.h:11
std::remove_reference_t< decltype(QChar().unicode())> IconBaseType
Definition: iconfwd.h:10