Chatterino
Fonts.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 #include "common/Singleton.hpp"
5 
6 #include <QFont>
7 #include <QFontDatabase>
8 #include <QFontMetrics>
9 #include <boost/noncopyable.hpp>
10 #include <pajlada/signals/signal.hpp>
11 
12 #include <array>
13 #include <unordered_map>
14 
15 namespace chatterino {
16 
17 class Settings;
18 class Paths;
19 
20 enum class FontStyle : uint8_t {
21  Tiny,
22  ChatSmall,
24  ChatMedium,
27  ChatLarge,
29 
30  UiMedium,
32  UiTabs,
33 
34  // don't remove this value
35  EndType,
36 
37  // make sure to update these values accordingly!
40 };
41 
42 class Fonts final : public Singleton
43 {
44 public:
45  Fonts();
46 
47  virtual void initialize(Settings &settings, Paths &paths) override;
48 
49  // font data gets set in createFontData(...)
50 
51  QFont getFont(FontStyle type, float scale);
52  QFontMetrics getFontMetrics(FontStyle type, float scale);
53 
56 
57  pajlada::Signals::NoArgSignal fontChanged;
58  static Fonts *instance;
59 
60 private:
61  struct FontData {
62  FontData(const QFont &_font)
63  : font(_font)
64  , metrics(_font)
65  {
66  }
67 
68  const QFont font;
69  const QFontMetrics metrics;
70  };
71 
72  struct ChatFontData {
73  float scale;
74  bool italic;
75  QFont::Weight weight;
76  };
77 
78  struct UiFontData {
79  float size;
80  const char *name;
81  bool italic;
82  QFont::Weight weight;
83  };
84 
85  FontData &getOrCreateFontData(FontStyle type, float scale);
86  FontData createFontData(FontStyle type, float scale);
87 
88  std::vector<std::unordered_map<float, FontData>> fontsByType_;
89 };
90 
91 Fonts *getFonts();
92 
93 } // namespace chatterino
Definition: Singleton.hpp:10
Definition: Fonts.hpp:42
static Fonts * instance
Definition: Fonts.hpp:58
Definition: Application.cpp:48
QStringSetting chatFontFamily
Definition: Fonts.hpp:54
IntSetting chatFontSize
Definition: Fonts.hpp:55
Settings which are availlable for reading and writing on the gui thread.
Definition: Settings.hpp:78
Definition: Paths.hpp:8
FontStyle
Definition: Fonts.hpp:20
Fonts * getFonts()
Definition: Fonts.cpp:176
QString name
Definition: Credentials.cpp:94
pajlada::Signals::NoArgSignal fontChanged
Definition: Fonts.hpp:57