OpenTTD Source: src/fontcache.h Source File

OpenTTD Source 14.0-beta1

fontcache.h
Go to the documentation of this file.
1 /*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10 #ifndef FONTCACHE_H
11 #define FONTCACHE_H
12
13 #include "string_type.h"
14 #include "spritecache.h"
15
17 typedef uint32_t GlyphID;
18 static const GlyphID SPRITE_GLYPH = 1U << 30;
19
21 class FontCache {
22 protected:
23 static FontCache *caches[FS_END];
24 FontCache *parent;
25 const FontSize fs;
26 int height;
27 int ascender;
28 int descender;
29 int units_per_em;
30
31 public:
32 FontCache(FontSize fs);
33 virtual ~FontCache();
34
35 static void InitializeFontCaches();
36
37 static int GetDefaultFontHeight(FontSize fs);
38
43 inline FontSize GetSize() const { return this->fs; }
44
49 inline int GetHeight() const { return this->height; }
50
55 inline int GetAscender() const { return this->ascender; }
56
61 inline int GetDescender() const{ return this->descender; }
62
67 inline int GetUnitsPerEM() const { return this->units_per_em; }
68
73 virtual int GetFontSize() const { return this->height; }
74
80 virtual void SetUnicodeGlyph(char32_t key, SpriteID sprite) = 0;
81
83 virtual void InitializeUnicodeGlyphMap() = 0;
84
86 virtual void ClearFontCache() = 0;
87
93 virtual const Sprite *GetGlyph(GlyphID key) = 0;
94
100 virtual uint GetGlyphWidth(GlyphID key) = 0;
101
106 virtual bool GetDrawGlyphShadow() = 0;
107
114 virtual GlyphID MapCharToGlyph(char32_t key, bool fallback = true) = 0;
115
122 virtual const void *GetFontTable(uint32_t tag, size_t &length) = 0;
123
128 virtual const void *GetOSHandle()
129 {
130 return nullptr;
131 }
132
137 virtual std::string GetFontName() = 0;
138
144 static inline FontCache *Get(FontSize fs)
145 {
146 assert(fs < FS_END);
147 return FontCache::caches[fs];
148 }
149
150 static std::string GetName(FontSize fs);
151
155 inline bool HasParent()
156 {
157 return this->parent != nullptr;
158 }
159
163 virtual bool IsBuiltInFont() = 0;
164 };
165
167 inline void SetUnicodeGlyph(FontSize size, char32_t key, SpriteID sprite)
168 {
169 FontCache::Get(size)->SetUnicodeGlyph(key, sprite);
170 }
171
173 inline void InitializeUnicodeGlyphMap()
174 {
175 for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
176 FontCache::Get(fs)->InitializeUnicodeGlyphMap();
177 }
178 }
179
180 inline void ClearFontCache()
181 {
182 for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
183 FontCache::Get(fs)->ClearFontCache();
184 }
185 }
186
188 inline const Sprite *GetGlyph(FontSize size, char32_t key)
189 {
190 FontCache *fc = FontCache::Get(size);
191 return fc->GetGlyph(fc->MapCharToGlyph(key));
192 }
193
195 inline uint GetGlyphWidth(FontSize size, char32_t key)
196 {
197 FontCache *fc = FontCache::Get(size);
198 return fc->GetGlyphWidth(fc->MapCharToGlyph(key));
199 }
200
201 inline bool GetDrawGlyphShadow(FontSize size)
202 {
203 return FontCache::Get(size)->GetDrawGlyphShadow();
204 }
205
207 struct FontCacheSubSetting {
208 std::string font;
209 uint size;
210 bool aa;
211
212 const void *os_handle = nullptr;
213 };
214
216 struct FontCacheSettings {
217 FontCacheSubSetting small;
218 FontCacheSubSetting medium;
219 FontCacheSubSetting large;
220 FontCacheSubSetting mono;
221 bool prefer_sprite;
222 bool global_aa;
223 };
224
225 extern FontCacheSettings _fcsettings;
226
232 inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs)
233 {
234 switch (fs) {
235 default: NOT_REACHED();
236 case FS_SMALL: return &_fcsettings.small;
237 case FS_NORMAL: return &_fcsettings.medium;
238 case FS_LARGE: return &_fcsettings.large;
239 case FS_MONO: return &_fcsettings.mono;
240 }
241 }
242
243 void InitFontCache(bool monospace);
244 void UninitFontCache();
245 bool HasAntialiasedFonts();
246
247 bool GetFontAAState(FontSize size, bool check_blitter = true);
248 void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa);
249
250 #endif /* FONTCACHE_H */
UninitFontCache
void UninitFontCache()
Free everything allocated w.r.t.
Definition: fontcache.cpp:224
SetUnicodeGlyph
void SetUnicodeGlyph(FontSize size, char32_t key, SpriteID sprite)
Map a SpriteID to the font size and key.
Definition: fontcache.h:167
FontCache::GetSize
FontSize GetSize() const
Get the FontSize of the font.
Definition: fontcache.h:43
GetGlyph
const Sprite * GetGlyph(FontSize size, char32_t key)
Get the Sprite for a glyph.
Definition: fontcache.h:188
FontCacheSubSetting
Settings for a single font.
Definition: fontcache.h:207
FontCache::SetUnicodeGlyph
virtual void SetUnicodeGlyph(char32_t key, SpriteID sprite)=0
Map a SpriteID to the key.
FontCache::GetDescender
int GetDescender() const
Get the descender value of the font.
Definition: fontcache.h:61
FontCache::GetHeight
int GetHeight() const
Get the height of the font.
Definition: fontcache.h:49
InitializeUnicodeGlyphMap
void InitializeUnicodeGlyphMap()
Initialize the glyph map.
Definition: fontcache.h:173
FS_BEGIN
@ FS_BEGIN
First font.
Definition: gfx_type.h:209
FontCache::height
int height
The height of the font.
Definition: fontcache.h:26
FontCacheSubSetting::aa
bool aa
Whether to do anti aliasing or not.
Definition: fontcache.h:210
FS_LARGE
@ FS_LARGE
Index of the large font in the font tables.
Definition: gfx_type.h:205
FontCache::GetAscender
int GetAscender() const
Get the ascender value of the font.
Definition: fontcache.h:55
FontCacheSubSetting::size
uint size
The (requested) size of the font.
Definition: fontcache.h:209
FontCache::GetDrawGlyphShadow
virtual bool GetDrawGlyphShadow()=0
Do we need to draw a glyph shadow?
FontCache::IsBuiltInFont
virtual bool IsBuiltInFont()=0
Is this a built-in sprite font?
FontCache::units_per_em
int units_per_em
The units per EM value of the font.
Definition: fontcache.h:29
FontCacheSettings
Settings for the four different fonts.
Definition: fontcache.h:216
FontCache::HasParent
bool HasParent()
Check whether the font cache has a parent.
Definition: fontcache.h:155
FS_NORMAL
@ FS_NORMAL
Index of the normal font in the font tables.
Definition: gfx_type.h:203
FontCacheSubSetting::font
std::string font
The name of the font, or path to the font.
Definition: fontcache.h:208
FS_SMALL
@ FS_SMALL
Index of the small font in the font tables.
Definition: gfx_type.h:204
GetGlyphWidth
uint GetGlyphWidth(FontSize size, char32_t key)
Get the width of a glyph.
Definition: fontcache.h:195
FontCacheSettings::large
FontCacheSubSetting large
The largest font; mostly used for newspapers.
Definition: fontcache.h:219
FontCacheSettings::prefer_sprite
bool prefer_sprite
Whether to prefer the built-in sprite font over resizable fonts.
Definition: fontcache.h:221
InitFontCache
void InitFontCache(bool monospace)
(Re)initialize the font cache related things, i.e.
Definition: fontcache.cpp:197
FontCache::~FontCache
virtual ~FontCache()
Clean everything up.
Definition: fontcache.cpp:45
FontCacheSettings::medium
FontCacheSubSetting medium
The normal font size.
Definition: fontcache.h:218
HasAntialiasedFonts
bool HasAntialiasedFonts()
Should any of the active fonts be anti-aliased?
Definition: fontcache.cpp:240
GetFontCacheSubSetting
FontCacheSubSetting * GetFontCacheSubSetting(FontSize fs)
Get the settings of a given font size.
Definition: fontcache.h:232
GlyphID
uint32_t GlyphID
Glyphs are characters from a font.
Definition: fontcache.h:17
FontCache::GetUnitsPerEM
int GetUnitsPerEM() const
Get the units per EM value of the font.
Definition: fontcache.h:67
FontCache::fs
const FontSize fs
The size of the font.
Definition: fontcache.h:25
FontCache::GetOSHandle
virtual const void * GetOSHandle()
Get the native OS font handle, if there is one.
Definition: fontcache.h:128
FontCache::GetFontTable
virtual const void * GetFontTable(uint32_t tag, size_t &length)=0
Read a font table from the font.
string_type.h
FontCache::GetGlyphWidth
virtual uint GetGlyphWidth(GlyphID key)=0
Get the width of the glyph with the given key.
SpriteID
uint32_t SpriteID
The number of a sprite, without mapping bits and colourtables.
Definition: gfx_type.h:17
FontCache::GetName
static std::string GetName(FontSize fs)
Get the font name of a given font size.
Definition: fontcache.cpp:62
FontCache::descender
int descender
The descender value of the font.
Definition: fontcache.h:28
spritecache.h
FontCache::MapCharToGlyph
virtual GlyphID MapCharToGlyph(char32_t key, bool fallback=true)=0
Map a character into a glyph.
FontCache::caches
static FontCache * caches[FS_END]
All the font caches.
Definition: fontcache.h:23
FontCache::GetFontName
virtual std::string GetFontName()=0
Get the name of this font.
FontCache
Font cache for basic fonts.
Definition: fontcache.h:21
FontCache::GetGlyph
virtual const Sprite * GetGlyph(GlyphID key)=0
Get the glyph (sprite) of the given key.
FontCache::parent
FontCache * parent
The parent of this font cache.
Definition: fontcache.h:24
FontCacheSettings::mono
FontCacheSubSetting mono
The mono space font used for license/readme viewers.
Definition: fontcache.h:220
FontCache::GetFontSize
virtual int GetFontSize() const
Get the nominal font size of the font.
Definition: fontcache.h:73
FontCache::ascender
int ascender
The ascender value of the font.
Definition: fontcache.h:27
FontCacheSubSetting::os_handle
const void * os_handle
Optional native OS font info. Only valid during font search.
Definition: fontcache.h:212
FS_MONO
@ FS_MONO
Index of the monospaced font in the font tables.
Definition: gfx_type.h:206
FontCache::ClearFontCache
virtual void ClearFontCache()=0
Clear the font cache.
FontSize
FontSize
Available font sizes.
Definition: gfx_type.h:202
FontCacheSettings::global_aa
bool global_aa
Whether to anti alias all font sizes.
Definition: fontcache.h:222
FontCacheSettings::small
FontCacheSubSetting small
The smallest font; mostly used for zoomed out view.
Definition: fontcache.h:217
Sprite
Data structure describing a sprite.
Definition: spritecache.h:17
FontCache::FontCache
FontCache(FontSize fs)
Create a new font cache.
Definition: fontcache.cpp:35
FontCache::InitializeUnicodeGlyphMap
virtual void InitializeUnicodeGlyphMap()=0
Initialize the glyph map.
FontCache::Get
static FontCache * Get(FontSize fs)
Get the font cache of a given font size.
Definition: fontcache.h:144