mirror-chatterino2/src/singletons/Fonts.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

85 lines
1.6 KiB
C++
Raw Normal View History

#pragma once
2024-03-10 14:27:08 +01:00
#include "pajlada/settings/settinglistener.hpp"
#include <pajlada/signals/signal.hpp>
#include <QFont>
#include <QFontMetrics>
#include <unordered_map>
2024-03-10 14:27:08 +01:00
#include <vector>
2019-10-07 15:46:08 +02:00
namespace chatterino {
class Settings;
class Paths;
enum class FontStyle : uint8_t {
Tiny,
ChatSmall,
ChatMediumSmall,
ChatMedium,
ChatMediumBold,
ChatMediumItalic,
ChatLarge,
ChatVeryLarge,
UiMedium,
2019-09-01 13:06:56 +02:00
UiMediumBold,
UiTabs,
// don't remove this value
EndType,
// make sure to update these values accordingly!
ChatStart = ChatSmall,
ChatEnd = ChatVeryLarge,
};
2024-03-10 14:27:08 +01:00
class Fonts final
{
public:
2024-03-10 14:27:08 +01:00
explicit Fonts(Settings &settings);
// font data gets set in createFontData(...)
QFont getFont(FontStyle type, float scale);
QFontMetrics getFontMetrics(FontStyle type, float scale);
pajlada::Signals::NoArgSignal fontChanged;
private:
struct FontData {
FontData(const QFont &_font)
: font(_font)
, metrics(_font)
{
}
const QFont font;
const QFontMetrics metrics;
};
struct ChatFontData {
float scale;
bool italic;
QFont::Weight weight;
};
struct UiFontData {
float size;
const char *name;
bool italic;
QFont::Weight weight;
};
FontData &getOrCreateFontData(FontStyle type, float scale);
FontData createFontData(FontStyle type, float scale);
std::vector<std::unordered_map<float, FontData>> fontsByType_;
2024-03-10 14:27:08 +01:00
pajlada::SettingListener fontChangedListener;
};
2019-10-07 15:46:08 +02:00
} // namespace chatterino