7#include "glyph_metrics.hpp"
8#include "glyph_atlas_info.hpp"
9#include "font_weight.hpp"
10#include "font_variant.hpp"
11#include "font_metrics.hpp"
14#include "../unicode/unicode.hpp"
15#include "../i18n/i18n.hpp"
16#include "../graphic_path/graphic_path.hpp"
17#include "../utility/utility.hpp"
18#include "../container/container.hpp"
24hi_export_module(hikogui.font : font);
26hi_export
namespace hi::inline
v1 {
46 bool monospace =
false;
48 font_style style = font_style::normal;
49 bool condensed =
false;
51 float optical_size = 12.0;
73 virtual ~font() =
default;
74 font(font
const&) =
delete;
75 font& operator=(font
const&) =
delete;
76 font(font&&) =
delete;
77 font& operator=(font&&) =
delete;
83 [[nodiscard]]
virtual bool loaded() const noexcept = 0;
88 [[nodiscard]] glyph_id
find_glyph(
char32_t c) const noexcept
99 auto r = lean_vector<glyph_id>{};
104 r.push_back(glyph_id);
115 r.push_back(glyph_id);
183 void reserve(
size_t count)
noexcept
234 if (*glyph >= _glyph_atlas_table.size()) [[unlikely]] {
235 _glyph_atlas_table.resize(*glyph + 1);
238 hi_axiom_bounds(*glyph, _glyph_atlas_table);
239 return _glyph_atlas_table[*glyph];
244 return {weight, style};
247 [[nodiscard]]
friend std::string
to_string(font
const& rhs)
noexcept
250 "{} - {}: style={}{}{}{}{}{}, features={}",
253 rhs.monospace ?
'M' :
'_',
254 rhs.serif ?
'S' :
'_',
255 rhs.style == font_style::italic ?
'I' :
'_',
256 rhs.condensed ?
'C' :
'_',
263 mutable std::vector<glyph_atlas_info> _glyph_atlas_table;
270struct std::formatter<
hi::font, char> : formatter<std::string_view, char> {
271 auto format(hi::font
const& t,
auto& fc)
const
273 return formatter<string_view, char>::format(
to_string(t), fc);
Defined font_char_map type.
The HikoGUI namespace.
Definition array_generic.hpp:21
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
font_weight
Definition font_weight.hpp:21
@ regular
400: Normal / Regular
Definition font_weight.hpp:25
virtual glyph_metrics get_metrics(hi::glyph_id glyph_id) const =0
Load a glyph into a path.
virtual bool loaded() const noexcept=0
Return if the font is loaded.
virtual shape_run_result_type shape_run(iso_639 language, iso_15924 script, gstring run) const =0
Shape a run of graphemes.
font_metrics_em metrics
The metrics of a font.
Definition font_font.hpp:66
std::string features
A string representing the features of a font.
Definition font_font.hpp:62
std::string family_name
The family name as parsed from the font file.
Definition font_font.hpp:38
std::string sub_family_name
The sub-family name as parsed from the font file.
Definition font_font.hpp:44
virtual graphic_path get_path(hi::glyph_id glyph_id) const =0
Load a glyph into a path.
virtual float get_advance(hi::glyph_id glyph_id) const =0
Get the advance for a glyph.
glyph_id find_glyph(char32_t c) const noexcept
Get the glyph for a code-point.
Definition font_font.hpp:88
lean_vector< glyph_id > find_glyph(grapheme g) const
Get the glyphs for a grapheme.
Definition font_font.hpp:96
font_char_map char_map
A optimized character map.
Definition font_font.hpp:57
std::vector< hi::font_id > fallback_chain
List of fonts to use as a fallback for this font.
Definition font_font.hpp:70
Definition font_font.hpp:154
std::vector< size_t > glyph_count
The number of glyphs used by each grapheme.
Definition font_font.hpp:161
std::vector< point2 > glyph_positions
Position of each glyph, relative to the grapheme.
Definition font_font.hpp:175
std::vector< float > advances
The horizontal advance of each grapheme.
Definition font_font.hpp:157
std::vector< glyph_id > glyphs
The glyphs representing all the graphemes.
Definition font_font.hpp:169
void scale_and_offset(float s) noexcept
Scale and position the result of the run.
Definition font_font.hpp:197
std::vector< aarectangle > glyph_rectangles
The bounding rectangle for each glyph, relative to glyph_position.
Definition font_font.hpp:181
A font variant is one of 16 different fonts that can be part of a family.
Definition font_variant.hpp:27
Definition glyph_atlas_info.hpp:16
The identifier of a glyph in a font-file.
Definition glyph_id.hpp:22
Definition glyph_metrics.hpp:20
ISO-639 language code.
Definition iso_639.hpp:29
A grapheme-cluster, what a user thinks a character is.
Definition grapheme.hpp:168
constexpr std::u32string decomposed(unicode_normalize_config config=unicode_normalize_config::NFD()) const noexcept
Get a list of code-point normalized to NFD.
Definition grapheme.hpp:472
constexpr std::u32string composed() const noexcept
Get a list of code-point normalized to NFC.
Definition grapheme.hpp:460