Files
noggit-red/src/noggit/ui/font_awesome.cpp
2020-10-15 14:31:22 +03:00

90 lines
2.5 KiB
C++

// This file is part of Noggit3, licensed under GNU General Public License (version 3).
#include <QtCore/QString>
#include <QtGui/QIconEngine>
#include <QtGui/QFontDatabase>
#include <QtGui/QPainter>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QWidget>
#include <noggit/ui/font_awesome.hpp>
#include <noggit/Log.h>
namespace noggit
{
namespace ui
{
font_awesome_icon_engine::font_awesome_icon_engine (const QString& text)
: QIconEngine()
,_text (text)
{}
font_awesome_icon_engine* font_awesome_icon_engine::clone() const
{
return new font_awesome_icon_engine(_text);
}
void font_awesome_icon_engine::paint ( QPainter* painter
, QRect const& rect
, QIcon::Mode mode
, QIcon::State state
)
{
painter->save();
{
QWidget* temp_btn = new QWidget();
painter->setPen ( (state == QIcon::On || mode == QIcon::Active)
? temp_btn->palette().color(QPalette::WindowText)
: temp_btn->palette().color(QPalette::AlternateBase)
);
delete temp_btn;
if (!_fonts.count (rect.height()))
{
auto id (QFontDatabase::addApplicationFont (":/fonts/fa-solid-900.ttf"));
if (id == -1)
{
throw std::runtime_error ("Unable to load FontAwesome.");
}
QFont font (QFontDatabase::applicationFontFamilies (id).at (0));
font.setPixelSize (rect.height());
_fonts[rect.height()] = font;
}
painter->setFont (_fonts.at (rect.height()));
painter->drawText
(rect, _text, QTextOption (Qt::AlignCenter | Qt::AlignVCenter));
}
painter->restore();
}
QPixmap font_awesome_icon_engine::pixmap ( QSize const& size
, QIcon::Mode mode
, QIcon::State state
)
{
QPixmap pm (size);
pm.fill (Qt::transparent);
{
QPainter p (&pm);
paint (&p, QRect(QPoint(0, 0), size), mode, state);
}
return pm;
}
std::map<int, QFont> font_awesome_icon_engine::_fonts = {};
font_awesome_icon::font_awesome_icon (font_awesome::icons const& icon)
: QIcon (new font_awesome_icon_engine (QString (QChar (icon))))
{}
}
}