26#ifndef TGUI_BACKEND_FONT_FREETYPE_HPP
27#define TGUI_BACKEND_FONT_FREETYPE_HPP
29#include <TGUI/Backend/Font/BackendFont.hpp>
30#include <unordered_map>
34using FT_Library =
struct FT_LibraryRec_*;
35using FT_Face =
struct FT_FaceRec_*;
36using FT_Stroker =
struct FT_StrokerRec_*;
63 bool loadFromMemory(std::unique_ptr<std::uint8_t[]> data, std::size_t sizeInBytes)
override;
74 bool hasGlyph(
char32_t codePoint)
const override;
90 FontGlyph getGlyph(
char32_t codePoint,
unsigned int characterSize,
bool bold,
float outlineThickness = 0)
override;
107 float getKerning(
char32_t first,
char32_t second,
unsigned int characterSize,
bool bold)
override;
184 std::shared_ptr<BackendTexture>
getTexture(
unsigned int characterSize,
unsigned int& textureVersion)
override;
216 void setFontScale(
float scale)
override;
234 Glyph loadGlyph(
char32_t codePoint,
unsigned int characterSize,
bool bold,
float outlineThickness);
239 Glyph getInternalGlyph(
char32_t codePoint,
unsigned int characterSize,
bool bold,
float outlineThickness);
244 UIntRect findAvailableGlyphRect(
unsigned int width,
unsigned int height);
249 bool setCurrentSize(
unsigned int characterSize);
261 Row(
unsigned int rowTop,
unsigned int rowHeight) :
width(0),
top(rowTop),
height(rowHeight) {}
268 FT_Library m_library =
nullptr;
269 FT_Face m_face =
nullptr;
270 FT_Stroker m_stroker =
nullptr;
272 std::unordered_map<unsigned int, float> m_cachedLineSpacing;
273 std::unordered_map<unsigned int, float> m_cachedFontHeights;
274 std::unordered_map<unsigned int, float> m_cachedAscents;
275 std::unordered_map<unsigned int, float> m_cachedDescents;
277 std::unordered_map<std::uint64_t, Glyph> m_glyphs;
279 std::vector<Row> m_rows;
281 std::unique_ptr<std::uint8_t[]> m_fileContents;
282 std::unique_ptr<std::uint8_t[]> m_pixels;
283 std::shared_ptr<BackendTexture> m_texture;
284 unsigned int m_textureSize = 0;
285 unsigned int m_textureVersion = 0;
Font implementations that uses FreeType directly to load glyphs.
Definition: BackendFontFreeType.hpp:46
float getUnderlineThickness(unsigned int characterSize) override
Get the thickness of the underline.
float getUnderlinePosition(unsigned int characterSize) override
Get the position of the underline.
float getAscent(unsigned int characterSize) override
Returns the maximum height of a glyph above the baseline.
float getKerning(char32_t first, char32_t second, unsigned int characterSize, bool bold) override
Returns the kerning offset of two glyphs.
~BackendFontFreetype() override
Destructor that cleans up the FreeType resources.
std::shared_ptr< BackendTexture > getTexture(unsigned int characterSize, unsigned int &textureVersion) override
Returns the texture that is used to store glyphs of the given character size.
unsigned int m_nextRow
Y position of the next new row in the texture (first 2 rows contain pixels for underlining)
Definition: BackendFontFreeType.hpp:278
FontGlyph getGlyph(char32_t codePoint, unsigned int characterSize, bool bold, float outlineThickness=0) override
Retrieve a glyph of the font.
Vector2u getTextureSize(unsigned int characterSize) override
Returns the size of the texture that is used to store glyphs of the given character size.
void setSmooth(bool smooth) override
Enable or disable the smooth filter.
float getFontHeight(unsigned int characterSize) override
Returns the height required to render a line of text.
float getDescent(unsigned int characterSize) override
Returns the maximum height of a glyph below the baseline.
bool loadFromMemory(std::unique_ptr< std::uint8_t[]> data, std::size_t sizeInBytes) override
Loads a font from memory.
bool hasGlyph(char32_t codePoint) const override
Returns whether a font contains a certain glyph.
float getLineSpacing(unsigned int characterSize) override
Returns the line spacing.
Base class for font implementations that depend on the backend.
Definition: BackendFont.hpp:43
virtual bool loadFromMemory(std::unique_ptr< std::uint8_t[]> data, std::size_t sizeInBytes)=0
Loads a font from memory.
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:36
Definition: BackendFontFreeType.hpp:223
float rsbDelta
Right offset after forced autohint. Internally used by getKerning()
Definition: BackendFontFreeType.hpp:226
float lsbDelta
Left offset after forced autohint. Internally used by getKerning()
Definition: BackendFontFreeType.hpp:225
UIntRect textureRect
Texture coordinates of the glyph inside the font's texture.
Definition: BackendFontFreeType.hpp:228
float advance
Offset to move horizontally to the next character.
Definition: BackendFontFreeType.hpp:224
FloatRect bounds
Bounding rectangle of the glyph, in coordinates relative to the baseline.
Definition: BackendFontFreeType.hpp:227
Definition: BackendFontFreeType.hpp:260
unsigned int height
Height of the row.
Definition: BackendFontFreeType.hpp:265
unsigned int width
Current width of the row.
Definition: BackendFontFreeType.hpp:263
unsigned int top
Y position of the row into the texture.
Definition: BackendFontFreeType.hpp:264
Information about a glyph in the font.
Definition: Font.hpp:47