7#include "glyph_metrics.hpp"
8#include "glyph_atlas_info.hpp"
9#include "glyph_ids.hpp"
10#include "font_weight.hpp"
11#include "font_variant.hpp"
12#include "font_metrics.hpp"
14#include "../unicode/module.hpp"
15#include "../i18n/module.hpp"
16#include "../graphic_path/module.hpp"
17#include "../utility/module.hpp"
18#include "../container/module.hpp"
24namespace hi::inline
v1 {
44 bool monospace =
false;
47 bool condensed =
false;
49 float optical_size = 12.0;
73 virtual ~font() =
default;
75 font& operator=(
font const&) =
delete;
83 [[nodiscard]]
virtual bool loaded() const noexcept = 0;
88 [[nodiscard]]
glyph_id find_glyph(
char32_t c) const noexcept
90 return char_map.find(c);
156 void reserve(
size_t count)
noexcept
158 grapheme_advances.
reserve(count);
161 glyph_positions.
reserve(count);
162 glyph_bounding_rectangles.
reserve(count);
165 void scale(
float s)
noexcept
168 for (
auto& tmp : grapheme_advances) {
171 for (
auto& tmp : glyph_positions) {
174 for (
auto& tmp : glyph_bounding_rectangles) {
203 if (index >= _single_glyph_atlas_table.size()) [[unlikely]] {
204 _single_glyph_atlas_table.resize(index + 1);
206 return _single_glyph_atlas_table[index];
209 return _multi_glyph_atlas_table[glyphs];
215 return {weight, italic};
221 "{} - {}: style={}{}{}{}{}{}, features={}",
224 rhs.monospace ?
'M' :
'_',
225 rhs.serif ?
'S' :
'_',
226 rhs.italic ?
'I' :
'_',
227 rhs.condensed ?
'C' :
'_',
235 mutable hash_map<glyph_ids, glyph_atlas_info> _multi_glyph_atlas_table;
240template<
typename CharT>
241struct std::formatter<
hi::font, CharT> : formatter<std::string_view, CharT> {
242 auto format(hi::font
const& t,
auto& fc)
244 return formatter<string_view, CharT>::format(
to_string(t), fc);
Defined font_char_map type.
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
DOXYGEN BUG.
Definition algorithm.hpp:13
font_weight
Definition font_weight.hpp:16
geometry/margins.hpp
Definition cache.hpp:11
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.
hi::font_metrics metrics
The metrics of a font.
Definition font.hpp:66
std::string features
A string representing the features of a font.
Definition font.hpp:60
std::string family_name
The family name as parsed from the font file.
Definition font.hpp:36
std::string sub_family_name
The sub-family name as parsed from the font file.
Definition font.hpp:42
std::vector< hi::font * > fallback_chain
List of fonts to use as a fallback for this font.
Definition font.hpp:70
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.
lean_vector< glyph_id > find_glyph(grapheme g) const
Get the glyphs for a grapheme.
font_char_map char_map
A optimized character map.
Definition font.hpp:55
std::vector< aarectangle > glyph_bounding_rectangles
The bounding rectangle for each glyph.
Definition font.hpp:154
std::vector< float > grapheme_advances
Position of each grapheme.
Definition font.hpp:129
std::vector< size_t > glyph_count
The number of glyphs used by each grapheme.
Definition font.hpp:133
std::vector< point2 > glyph_positions
Position of each glyph.
Definition font.hpp:145
std::vector< glyph_id > glyphs
The glyphs representing all the graphemes.
Definition font.hpp:141
A font variant is one of 16 different fonts that can be part of a family.
Definition font_variant.hpp:16
Definition glyph_atlas_info.hpp:12
A set of glyph-ids of a font which composites into a single glyph.
Definition glyph_ids.hpp:135
constexpr bool has_num_glyphs() const noexcept
Check if this object contains a number of glyphs.
Definition glyph_ids.hpp:255
Definition glyph_metrics.hpp:16
A path is a vector graphics object.
Definition graphic_path.hpp:26
ISO-15924 script code.
Definition iso_15924.hpp:17
ISO-639 language code.
Definition iso_639.hpp:23
A grapheme-cluster, what a user thinks a character is.
Definition grapheme.hpp:44
Definition tagged_id.hpp:17