37#include <freetype/freetype.h>
39#include "IGUIEnvironment.h"
41#include "IVideoDriver.h"
42#include "IrrlichtDevice.h"
58 static std::map<io::path, SGUITTFace*>
faces;
122 void preload(u32 char_index, FT_Face face,
CGUITTFont *parent, u32 font_size,
const FT_Int32 loadFlags);
128 video::IImage*
createGlyphImage(
const FT_Bitmap& bits, video::IVideoDriver* driver)
const;
169 bool flgmip =
driver->getTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS);
170 driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS,
false);
171 bool flgcpy =
driver->getTextureCreationFlag(video::ETCF_ALLOW_MEMORY_COPY);
172 driver->setTextureCreationFlag(video::ETCF_ALLOW_MEMORY_COPY,
true);
177 case FT_PIXEL_MODE_MONO:
180 case FT_PIXEL_MODE_GRAY:
187 driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, flgmip);
188 driver->setTextureCreationFlag(video::ETCF_ALLOW_MEMORY_COPY, flgcpy);
206 video::ECOLOR_FORMAT format =
texture->getColorFormat();
207 core::dimension2du size =
texture->getOriginalSize();
208 video::IImage* pageholder =
driver->createImageFromData(format, size, ptr,
true,
false);
254 bool transparency =
true, u32 shadow = 0, u32
shadow_alpha = 255);
296 void setFontHinting(
const bool enable,
const bool enable_auto_hinting =
true);
299 virtual void draw(
const core::stringw& text,
const core::rect<s32>& position,
300 video::SColor color,
bool hcenter=
false,
bool vcenter=
false,
301 const core::rect<s32>* clip=0)
override;
304 bool hcenter=
false,
bool vcenter=
false,
305 const core::rect<s32>* clip=0);
308 virtual core::dimension2du
getDimension(
const wchar_t* text)
const override;
320 virtual core::vector2di
getKerning(
const wchar_t thisLetter,
const wchar_t previousLetter)
const override;
365 core::dimension2d<u32>
getDimension(
const std::u32string& text)
const;
372 bool load(
SGUITTFace *face,
const u32
size,
const bool antialias,
const bool transparency);
378 load_flags = FT_LOAD_DEFAULT | FT_LOAD_RENDER;
387 core::vector2di
getKerning(
const char32_t thisLetter,
const char32_t previousLetter)
const;
Definition enriched_string.h:29
Class representing a TrueType font.
Definition CGUITTFont.h:244
s32 getAscender() const
Definition CGUITTFont.h:351
video::ITexture * getPageTextureByIndex(const u32 &page_index) const
This function is for debugging mostly.
Definition CGUITTFont.cpp:915
s32 GlobalKerningHeight
Definition CGUITTFont.h:399
u32 shadow_offset
Definition CGUITTFont.h:401
void reset_images()
Definition CGUITTFont.cpp:353
video::IVideoDriver * getDriver() const
Definition CGUITTFont.h:349
u32 getHeightFromCharacter(char32_t c) const
Definition CGUITTFont.cpp:720
void setMonochrome(const bool flag)
Tells the font to use monochrome rendering.
Definition CGUITTFont.cpp:449
static CGUITTFont * createTTFont(IGUIEnvironment *env, SGUITTFace *face, u32 size, bool antialias=true, bool transparency=true, u32 shadow=0, u32 shadow_alpha=255)
Creates a new TrueType font and returns a pointer to it.
Definition CGUITTFont.cpp:268
void setBatchLoadSize(u32 batch_size)
Sets the amount of glyphs to batch load.
Definition CGUITTFont.h:260
virtual void draw(const core::stringw &text, const core::rect< s32 > &position, video::SColor color, bool hcenter=false, bool vcenter=false, const core::rect< s32 > *clip=0) override
Draws some text and clips it to the specified rectangle if wanted.
Definition CGUITTFont.cpp:462
bool isTransparent() const
Check the font's transparency.
Definition CGUITTFont.h:269
bool load(SGUITTFace *face, const u32 size, const bool antialias, const bool transparency)
Definition CGUITTFont.cpp:306
core::array< CGUITTGlyphPage * > Glyph_Pages
Definition CGUITTFont.h:395
void update_load_flags()
Definition CGUITTFont.h:375
bool useAutoHinting() const
Check if the font auto-hinting is enabled.
Definition CGUITTFont.h:273
video::IImage * createTextureFromChar(const char32_t &ch)
Create corresponding character's software image copy from the font, so you can use this data just lik...
Definition CGUITTFont.cpp:880
core::dimension2du max_page_texture_size
Definition CGUITTFont.h:360
bool useHinting() const
Check if the font hinting is enabled.
Definition CGUITTFont.h:276
FT_Face tt_face
Definition CGUITTFont.h:391
core::array< SGUITTGlyph > Glyphs
Definition CGUITTFont.h:396
u32 getGlyphIndexByChar(char32_t c) const
Definition CGUITTFont.cpp:740
void setFallback(gui::IGUIFont *font)
Set font that should be used for glyphs not present in ours.
Definition CGUITTFont.h:338
void update_glyph_pages() const
Definition CGUITTFont.cpp:368
FT_Int32 load_flags
Definition CGUITTFont.h:393
FT_Size_Metrics font_metrics
Definition CGUITTFont.h:392
u32 getFontSize() const
Get the font size.
Definition CGUITTFont.h:266
CGUITTFont(IGUIEnvironment *env)
Constructor.
Definition CGUITTFont.cpp:289
u32 batch_load_size
Definition CGUITTFont.h:359
s32 GlobalKerningWidth
Definition CGUITTFont.h:398
u32 shadow_alpha
Definition CGUITTFont.h:402
void setFontHinting(const bool enable, const bool enable_auto_hinting=true)
Enables or disables font hinting.
Definition CGUITTFont.cpp:455
virtual core::dimension2du getDimension(const wchar_t *text) const override
Returns the dimension of a text string.
Definition CGUITTFont.cpp:635
u32 getLastGlyphPageIndex() const
Get the last glyph page's index.
Definition CGUITTFont.h:335
gui::IGUIFont * fallback
Definition CGUITTFont.h:404
CGUITTGlyphPage * getLastGlyphPage() const
Get the last glyph page if there's still available slots.
Definition CGUITTFont.cpp:377
std::u32string Invisible
Definition CGUITTFont.h:400
bool useMonochrome() const
Check if the font is being loaded as a monochrome font.
Definition CGUITTFont.h:280
bool use_auto_hinting
Definition CGUITTFont.h:357
u32 getWidthFromCharacter(char32_t c) const
Definition CGUITTFont.cpp:701
virtual s32 getCharacterFromPos(const wchar_t *text, s32 pixel_x) const override
Calculates the index of the character in the text which is on a specific position.
Definition CGUITTFont.cpp:783
bool use_transparency
Definition CGUITTFont.h:355
bool use_hinting
Definition CGUITTFont.h:356
virtual ~CGUITTFont()
Destructor.
Definition CGUITTFont.cpp:342
bool use_monochrome
Definition CGUITTFont.h:354
virtual void setKerningHeight(s32 kerning) override
Sets global kerning height for the font.
Definition CGUITTFont.cpp:820
virtual void setKerningWidth(s32 kerning) override
Sets global kerning width for the font.
Definition CGUITTFont.cpp:815
std::u32string convertWCharToU32String(const wchar_t *const) const
Definition CGUITTFont.cpp:923
void setMaxPageTextureSize(const core::dimension2du &texture_size)
Sets the maximum texture size for a page of glyphs.
Definition CGUITTFont.h:263
video::IVideoDriver * Driver
Definition CGUITTFont.h:389
std::optional< io::path > filename
Definition CGUITTFont.h:390
CGUITTGlyphPage * createGlyphPage(const u8 pixel_mode)
Create a new glyph page texture.
Definition CGUITTFont.cpp:391
void setTransparency(const bool flag)
Tells the font to allow transparency when rendering.
Definition CGUITTFont.cpp:443
u32 size
Definition CGUITTFont.h:358
virtual void setInvisibleCharacters(const wchar_t *s) override
Define which characters should not be drawn by the font.
Definition CGUITTFont.cpp:875
virtual core::vector2di getKerning(const wchar_t thisLetter, const wchar_t previousLetter) const override
Returns the distance between letters.
Definition CGUITTFont.cpp:825
Holds a sheet of glyphs.
Definition CGUITTFont.h:149
bool dirty
Definition CGUITTFont.h:230
core::array< core::recti > render_source_rects
Definition CGUITTFont.h:233
u32 used_slots
Definition CGUITTFont.h:229
void pushGlyphToBePaged(const SGUITTGlyph *glyph)
Add the glyph to a list of glyphs to be paged.
Definition CGUITTFont.h:195
io::path name
Definition CGUITTFont.h:239
u32 available_slots
Definition CGUITTFont.h:228
video::IVideoDriver * driver
Definition CGUITTFont.h:238
core::array< video::SColor > render_colors
Definition CGUITTFont.h:234
core::array< const SGUITTGlyph * > glyph_to_be_paged
Definition CGUITTFont.h:237
bool createPageTexture(const u8 &pixel_mode, const core::dimension2du &texture_size)
Create the actual page texture,.
Definition CGUITTFont.h:164
core::array< core::vector2di > render_positions
Definition CGUITTFont.h:232
~CGUITTGlyphPage()
Definition CGUITTFont.h:152
video::ITexture * texture
Definition CGUITTFont.h:227
CGUITTGlyphPage(video::IVideoDriver *Driver, const io::path &texture_name)
Definition CGUITTFont.h:151
void updateTexture()
Updates the texture atlas with new glyphs.
Definition CGUITTFont.h:201
Definition clientmap.h:30
Definition CGUITTFont.h:55
~SGUITTFace()
Definition CGUITTFont.cpp:72
void dropFilename()
Definition CGUITTFont.cpp:119
static FT_Library getFreeTypeLibrary()
Definition CGUITTFont.cpp:55
static SGUITTFace * createFace(std::string &&buffer)
Definition CGUITTFont.cpp:84
static SGUITTFace * loadFace(const io::path &filename)
Definition CGUITTFont.cpp:96
static std::size_t n_faces
Definition CGUITTFont.h:60
static FT_Library freetype_library
Definition CGUITTFont.h:59
static std::map< io::path, SGUITTFace * > faces
Definition CGUITTFont.h:58
std::string face_buffer
Must not be deallocated until we are done with the face!
Definition CGUITTFont.h:74
SGUITTFace(std::string &&buffer)
Definition CGUITTFont.cpp:66
FT_Face face
Definition CGUITTFont.h:72
std::optional< std::string > filename
Definition CGUITTFont.h:70
Structure representing a single TrueType glyph.
Definition CGUITTFont.h:86
void unload()
Unloads the glyph.
Definition CGUITTFont.cpp:255
video::IImage * surface
This is just the temporary image holder.
Definition CGUITTFont.h:144
core::recti source_rect
The source rectangle for the glyph.
Definition CGUITTFont.h:134
SGUITTGlyph()
Constructor.
Definition CGUITTFont.h:88
void preload(u32 char_index, FT_Face face, CGUITTFont *parent, u32 font_size, const FT_Int32 loadFlags)
Preload the glyph.
Definition CGUITTFont.cpp:207
video::IImage * createGlyphImage(const FT_Bitmap &bits, video::IVideoDriver *driver) const
Creates the IImage object from the FT_Bitmap.
Definition CGUITTFont.cpp:134
u32 glyph_page
The page the glyph is on.
Definition CGUITTFont.h:131
SGUITTGlyph(SGUITTGlyph &&other) noexcept
This class would be trivially copyable except for the reference count on surface.
Definition CGUITTFont.h:99
core::vector2di offset
The offset of glyph when drawn.
Definition CGUITTFont.h:137
bool isLoaded() const
If true, the glyph has been loaded.
Definition CGUITTFont.h:113
DISABLE_CLASS_COPY(SGUITTGlyph)
core::vector2di advance
Glyph advance information.
Definition CGUITTFont.h:140
~SGUITTGlyph()
Destructor.
Definition CGUITTFont.h:110