mirror-chatterino2/src/singletons/fontmanager.cpp

110 lines
3 KiB
C++
Raw Normal View History

2017-12-31 00:50:07 +01:00
#include "singletons/fontmanager.hpp"
2017-04-12 17:46:44 +02:00
#include <QDebug>
#include <QtGlobal>
#ifdef Q_OS_WIN32
2018-01-17 14:14:31 +01:00
#define DEFAULT_FONT_FAMILY "Segoe UI"
#define DEFAULT_FONT_SIZE 10
#else
2018-01-17 14:14:31 +01:00
#ifdef Q_OS_MACOS
#define DEFAULT_FONT_FAMILY "Helvetica Neue"
#define DEFAULT_FONT_SIZE 12
#else
#define DEFAULT_FONT_FAMILY "Arial"
#define DEFAULT_FONT_SIZE 11
#endif
#endif
2017-04-12 17:46:44 +02:00
2017-04-14 17:52:22 +02:00
namespace chatterino {
2017-12-31 22:58:35 +01:00
namespace singletons {
2017-04-12 17:46:44 +02:00
FontManager::FontManager()
: currentFontFamily("/appearance/currentFontFamily", DEFAULT_FONT_FAMILY)
, currentFontSize("/appearance/currentFontSize", DEFAULT_FONT_SIZE)
// , currentFont(this->currentFontFamily.getValue().c_str(), currentFontSize.getValue())
2017-04-12 17:46:44 +02:00
{
this->currentFontFamily.connect([this](const std::string &newValue, auto) {
this->incGeneration();
// this->currentFont.setFamily(newValue.c_str());
2018-01-17 14:14:31 +01:00
this->currentFontByScale.clear();
this->fontChanged.invoke();
});
this->currentFontSize.connect([this](const int &newValue, auto) {
this->incGeneration();
// this->currentFont.setSize(newValue);
2018-01-17 14:14:31 +01:00
this->currentFontByScale.clear();
this->fontChanged.invoke();
});
2017-04-12 17:46:44 +02:00
}
2017-12-31 00:50:07 +01:00
FontManager &FontManager::getInstance()
{
static FontManager instance;
return instance;
}
2018-01-19 14:48:17 +01:00
QFont &FontManager::getFont(FontManager::Type type, float scale)
2017-04-12 17:46:44 +02:00
{
// return this->currentFont.getFont(type);
2018-01-17 14:14:31 +01:00
return this->getCurrentFont(scale).getFont(type);
2017-04-12 17:46:44 +02:00
}
2018-01-19 14:48:17 +01:00
QFontMetrics &FontManager::getFontMetrics(FontManager::Type type, float scale)
2017-04-12 17:46:44 +02:00
{
// return this->currentFont.getFontMetrics(type);
2018-01-17 14:14:31 +01:00
return this->getCurrentFont(scale).getFontMetrics(type);
}
2018-01-19 14:48:17 +01:00
FontManager::FontData &FontManager::Font::getFontData(FontManager::Type type)
{
switch (type) {
2018-01-17 14:14:31 +01:00
case Tiny:
return this->tiny;
case Small:
return this->small;
case MediumSmall:
return this->mediumSmall;
case Medium:
return this->medium;
case MediumBold:
return this->mediumBold;
case MediumItalic:
return this->mediumItalic;
case Large:
return this->large;
case VeryLarge:
return this->veryLarge;
default:
qDebug() << "Unknown font type:" << type << ", defaulting to medium";
return this->medium;
}
}
QFont &FontManager::Font::getFont(Type type)
{
return this->getFontData(type).font;
}
QFontMetrics &FontManager::Font::getFontMetrics(Type type)
{
return this->getFontData(type).metrics;
2017-04-12 17:46:44 +02:00
}
2018-01-17 14:14:31 +01:00
FontManager::Font &FontManager::getCurrentFont(float scale)
{
2018-01-17 14:14:31 +01:00
for (auto it = this->currentFontByScale.begin(); it != this->currentFontByScale.end(); it++) {
if (it->first == scale) {
return it->second;
}
}
2018-01-17 14:14:31 +01:00
this->currentFontByScale.push_back(
std::make_pair(scale, Font(this->currentFontFamily.getValue().c_str(),
this->currentFontSize.getValue() * scale)));
2018-01-17 14:14:31 +01:00
return this->currentFontByScale.back().second;
}
2018-01-17 14:14:31 +01:00
} // namespace singletons
} // namespace chatterino