2017-12-31 00:50:07 +01:00
|
|
|
#include "singletons/fontmanager.hpp"
|
2017-04-12 17:46:44 +02:00
|
|
|
|
2017-06-17 11:37:13 +02:00
|
|
|
#include <QDebug>
|
2018-01-07 20:54:44 +01:00
|
|
|
#include <QtGlobal>
|
|
|
|
|
|
|
|
#ifdef Q_OS_WIN32
|
2018-01-07 23:26:11 +01:00
|
|
|
#define DEFAULT_FONT_FAMILY "Segoe UI"
|
|
|
|
#define DEFAULT_FONT_SIZE 10
|
2018-01-07 20:54:44 +01:00
|
|
|
#else
|
2018-01-07 23:26:11 +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
|
2018-01-07 20:54:44 +01:00
|
|
|
#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()
|
2018-01-07 20:54:44 +01:00
|
|
|
: currentFontFamily("/appearance/currentFontFamily", DEFAULT_FONT_FAMILY)
|
|
|
|
, currentFontSize("/appearance/currentFontSize", DEFAULT_FONT_SIZE)
|
2017-12-23 21:18:13 +01:00
|
|
|
// , currentFont(this->currentFontFamily.getValue().c_str(), currentFontSize.getValue())
|
2017-04-12 17:46:44 +02:00
|
|
|
{
|
2017-12-17 03:37:46 +01:00
|
|
|
this->currentFontFamily.connect([this](const std::string &newValue, auto) {
|
2017-12-17 03:26:23 +01:00
|
|
|
this->incGeneration();
|
2017-12-23 21:18:13 +01:00
|
|
|
// this->currentFont.setFamily(newValue.c_str());
|
|
|
|
this->currentFontByDpi.clear();
|
2017-10-27 21:02:58 +02:00
|
|
|
this->fontChanged.invoke();
|
2017-06-17 11:37:13 +02:00
|
|
|
});
|
2017-12-17 03:37:46 +01:00
|
|
|
this->currentFontSize.connect([this](const int &newValue, auto) {
|
2017-12-17 03:26:23 +01:00
|
|
|
this->incGeneration();
|
2017-12-23 21:18:13 +01:00
|
|
|
// this->currentFont.setSize(newValue);
|
|
|
|
this->currentFontByDpi.clear();
|
2017-10-27 21:02:58 +02:00
|
|
|
this->fontChanged.invoke();
|
2017-06-17 11:37:13 +02:00
|
|
|
});
|
2017-04-12 17:46:44 +02:00
|
|
|
}
|
|
|
|
|
2017-12-31 00:50:07 +01:00
|
|
|
FontManager &FontManager::getInstance()
|
|
|
|
{
|
|
|
|
static FontManager instance;
|
|
|
|
|
|
|
|
return instance;
|
|
|
|
}
|
|
|
|
|
2017-12-23 21:18:13 +01:00
|
|
|
QFont &FontManager::getFont(Type type, float dpi)
|
2017-04-12 17:46:44 +02:00
|
|
|
{
|
2017-12-23 21:18:13 +01:00
|
|
|
// return this->currentFont.getFont(type);
|
|
|
|
return this->getCurrentFont(dpi).getFont(type);
|
2017-04-12 17:46:44 +02:00
|
|
|
}
|
|
|
|
|
2017-12-23 21:18:13 +01:00
|
|
|
QFontMetrics &FontManager::getFontMetrics(Type type, float dpi)
|
2017-04-12 17:46:44 +02:00
|
|
|
{
|
2017-12-23 21:18:13 +01:00
|
|
|
// return this->currentFont.getFontMetrics(type);
|
|
|
|
return this->getCurrentFont(dpi).getFontMetrics(type);
|
2017-06-17 11:37:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
FontManager::FontData &FontManager::Font::getFontData(Type type)
|
|
|
|
{
|
|
|
|
switch (type) {
|
|
|
|
case Small:
|
|
|
|
return this->small;
|
2017-12-23 22:17:38 +01:00
|
|
|
case MediumSmall:
|
|
|
|
return this->mediumSmall;
|
2017-06-17 11:37:13 +02:00
|
|
|
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
|
|
|
}
|
2017-06-07 10:09:24 +02:00
|
|
|
|
2017-12-23 21:18:13 +01:00
|
|
|
FontManager::Font &FontManager::getCurrentFont(float dpi)
|
|
|
|
{
|
|
|
|
for (auto it = this->currentFontByDpi.begin(); it != this->currentFontByDpi.end(); it++) {
|
|
|
|
if (it->first == dpi) {
|
|
|
|
return it->second;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this->currentFontByDpi.push_back(std::make_pair(
|
|
|
|
dpi,
|
|
|
|
Font(this->currentFontFamily.getValue().c_str(), this->currentFontSize.getValue() * dpi)));
|
|
|
|
|
|
|
|
return this->currentFontByDpi.back().second;
|
|
|
|
}
|
2017-06-07 10:09:24 +02:00
|
|
|
} // namespace chatterino
|
2017-12-31 22:58:35 +01:00
|
|
|
}
|