Luanti 5.11.0-dev
 
Loading...
Searching...
No Matches
fontengine.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2014 sapier <sapier at gmx dot net>
4
5#pragma once
6
7#include <map>
8#include <unordered_map>
9#include "irr_ptr.h"
11#include "util/basic_macros.h"
12#include "irrlichttypes.h"
13#include "irrString.h" // utf8_to_wide
15
16namespace irr {
17 namespace gui {
18 class IGUIEnvironment;
19 class IGUIFont;
20 }
21}
22
23#define FONT_SIZE_UNSPECIFIED 0xFFFFFFFF
24
25enum FontMode : u8 {
28 _FM_Fallback, // do not use directly
31};
32
33struct FontSpec {
34 FontSpec(unsigned int font_size, FontMode mode, bool bold, bool italic) :
35 size(font_size),
36 mode(mode),
37 bold(bold),
38 italic(italic) {}
39
40 u16 getHash() const
41 {
42 return (mode << 2) | (static_cast<u8>(bold) << 1) | static_cast<u8>(italic);
43 }
44
45 unsigned int size;
47 bool bold;
48 bool italic;
49};
50
52{
53public:
54
55 FontEngine(gui::IGUIEnvironment* env);
56
58
59 // Get best possible font specified by FontSpec
60 irr::gui::IGUIFont *getFont(FontSpec spec);
61
62 irr::gui::IGUIFont *getFont(unsigned int font_size=FONT_SIZE_UNSPECIFIED,
64 {
65 FontSpec spec(font_size, mode, m_default_bold, m_default_italic);
66 return getFont(spec);
67 }
68
70 unsigned int getTextHeight(const FontSpec &spec);
71
73 unsigned int getTextHeight(
74 unsigned int font_size=FONT_SIZE_UNSPECIFIED,
76 {
77 FontSpec spec(font_size, mode, m_default_bold, m_default_italic);
78 return getTextHeight(spec);
79 }
80
81 unsigned int getTextWidth(const std::wstring &text, const FontSpec &spec);
82
84 unsigned int getTextWidth(const std::wstring& text,
85 unsigned int font_size=FONT_SIZE_UNSPECIFIED,
87 {
88 FontSpec spec(font_size, mode, m_default_bold, m_default_italic);
89 return getTextWidth(text, spec);
90 }
91
92 unsigned int getTextWidth(const std::string &text, const FontSpec &spec)
93 {
94 return getTextWidth(utf8_to_wide(text), spec);
95 }
96
97 unsigned int getTextWidth(const std::string& text,
98 unsigned int font_size=FONT_SIZE_UNSPECIFIED,
100 {
101 FontSpec spec(font_size, mode, m_default_bold, m_default_italic);
102 return getTextWidth(utf8_to_wide(text), spec);
103 }
104
106 unsigned int getLineHeight(const FontSpec &spec);
107
108 unsigned int getLineHeight(unsigned int font_size=FONT_SIZE_UNSPECIFIED,
110 {
111 FontSpec spec(font_size, mode, m_default_bold, m_default_italic);
112 return getLineHeight(spec);
113 }
114
116 unsigned int getDefaultFontSize();
117
119 unsigned int getFontSize(FontMode mode);
120
122 void readSettings();
123
124 void setMediaFont(const std::string &name, const std::string &data);
125
126 void clearMediaFonts();
127
128private:
129 irr::gui::IGUIFont *getFont(FontSpec spec, bool may_fail);
130
132 void updateCache();
133
135 gui::IGUIFont *initFont(const FontSpec &spec);
136
138 void updateSkin();
139
140 void clearCache();
141
143 void refresh();
144
146 gui::IGUIEnvironment* m_env = nullptr;
147
149 std::recursive_mutex m_font_mutex;
150
152 std::map<unsigned int, irr::gui::IGUIFont*> m_font_cache[FM_MaxMode << 2];
153
155 std::unordered_map<std::string, irr_ptr<gui::SGUITTFace>> m_media_faces;
156
159
161 bool m_default_bold = false;
162 bool m_default_italic = false;
163
166
168};
169
Definition fontengine.h:52
static const FontMode m_currentMode
default font engine mode (fixed)
Definition fontengine.h:165
void updateCache()
update content of font cache in case of a setting change made it invalid
Definition fontengine.cpp:173
std::recursive_mutex m_font_mutex
mutex used to protect font init and cache
Definition fontengine.h:149
unsigned int getTextHeight(unsigned int font_size=FONT_SIZE_UNSPECIFIED, FontMode mode=FM_Unspecified)
get text width of a text for a specific font
Definition fontengine.h:73
irr::gui::IGUIFont * getFont(unsigned int font_size=FONT_SIZE_UNSPECIFIED, FontMode mode=FM_Unspecified)
Definition fontengine.h:62
gui::IGUIFont * initFont(const FontSpec &spec)
initialize a new TTF font
Definition fontengine.cpp:217
bool m_default_italic
Definition fontengine.h:162
unsigned int getTextHeight(const FontSpec &spec)
get text height for a specific font
Definition fontengine.cpp:117
~FontEngine()
Definition fontengine.cpp:55
gui::IGUIEnvironment * m_env
pointer to irrlicht gui environment
Definition fontengine.h:146
std::map< unsigned int, irr::gui::IGUIFont * > m_font_cache[FM_MaxMode<< 2]
internal storage for caching fonts of different size
Definition fontengine.h:152
bool m_default_bold
default bold and italic
Definition fontengine.h:161
void updateSkin()
update current minetest skin with font changes
Definition fontengine.cpp:165
unsigned int getFontSize(FontMode mode)
get font size for a specific mode
Definition fontengine.cpp:145
void clearMediaFonts()
Definition fontengine.cpp:210
FontEngine(gui::IGUIEnvironment *env)
Definition fontengine.cpp:38
unsigned int getTextWidth(const std::wstring &text, unsigned int font_size=FONT_SIZE_UNSPECIFIED, FontMode mode=FM_Unspecified)
get text width of a text for a specific font
Definition fontengine.h:84
void setMediaFont(const std::string &name, const std::string &data)
Definition fontengine.cpp:186
unsigned int getTextWidth(const std::wstring &text, const FontSpec &spec)
Definition fontengine.cpp:124
unsigned int getTextWidth(const std::string &text, unsigned int font_size=FONT_SIZE_UNSPECIFIED, FontMode mode=FM_Unspecified)
Definition fontengine.h:97
unsigned int m_default_size[FM_MaxMode]
default font size to use
Definition fontengine.h:158
irr::gui::IGUIFont * getFont(FontSpec spec)
Definition fontengine.cpp:76
void clearCache()
Definition fontengine.cpp:62
unsigned int getTextWidth(const std::string &text, const FontSpec &spec)
Definition fontengine.h:92
void readSettings()
update internal parameters from settings
Definition fontengine.cpp:153
DISABLE_CLASS_COPY(FontEngine)
std::unordered_map< std::string, irr_ptr< gui::SGUITTFace > > m_media_faces
media-provided faces, indexed by filename (without extension)
Definition fontengine.h:155
unsigned int getDefaultFontSize()
get default font size
Definition fontengine.cpp:140
unsigned int getLineHeight(unsigned int font_size=FONT_SIZE_UNSPECIFIED, FontMode mode=FM_Unspecified)
Definition fontengine.h:108
void refresh()
refresh after fonts have been changed
Definition fontengine.cpp:180
unsigned int getLineHeight(const FontSpec &spec)
get line height for a specific font (including empty room between lines)
Definition fontengine.cpp:132
FontMode
Definition fontengine.h:25
@ FM_Standard
Definition fontengine.h:26
@ FM_MaxMode
Definition fontengine.h:29
@ FM_Unspecified
Definition fontengine.h:30
@ FM_Mono
Definition fontengine.h:27
@ _FM_Fallback
Definition fontengine.h:28
FontEngine * g_fontengine
interface to access main font engine
Definition fontengine.cpp:19
#define FONT_SIZE_UNSPECIFIED
Definition fontengine.h:23
Definition clientmap.h:30
std::wstring utf8_to_wide(std::string_view input)
Definition string.cpp:87
Definition fontengine.h:33
bool italic
Definition fontengine.h:48
bool bold
Definition fontengine.h:47
FontSpec(unsigned int font_size, FontMode mode, bool bold, bool italic)
Definition fontengine.h:34
unsigned int size
Definition fontengine.h:45
u16 getHash() const
Definition fontengine.h:40
FontMode mode
Definition fontengine.h:46