From 67c1c30645ec67e3abf387d1093cb7cc69ff21e8 Mon Sep 17 00:00:00 2001 From: Anurag Thakur Date: Wed, 23 Aug 2023 21:56:19 +0530 Subject: [PATCH] Load all glyphs when creating face --- include/freetype/freetype.h | 1 + src/base/ftobjs.c | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index 75f87bca6..cbca9d2be 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -1276,6 +1276,7 @@ FT_BEGIN_HEADER FT_ListRec sizes_list; FT_Generic autohint; /* face-specific auto-hinter data */ + FT_GlyphSlot* garray; void* extensions; /* unused */ FT_Face_Internal internal; diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 43681a2af..472bb681c 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -914,7 +914,7 @@ /* The validity test for `glyph_index' is performed by the */ /* font drivers. */ - slot = face->glyph; + slot = face->garray[face->glyph->glyph_index]; ft_glyphslot_clear( slot ); driver = face->driver; @@ -2782,6 +2782,29 @@ // FT_Outline_Decompose here } + + face->garray = (FT_GlyphSlot*)malloc( + face->driver->clazz->slot_object_size * face->num_glyphs ); + error = FT_Set_Char_Size( face, 0, 160 * 64, 300, 300 ); + int glyph_index = FT_Get_Char_Index( face, 'A' ); + // error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_HINTING ); + + for ( int gindex = 0; gindex < face->num_glyphs; gindex++ ) + { + driver = face->driver; + FT_Driver_Class clazz = driver->clazz; + memory = driver->root.memory; + + FT_ALLOC(face->garray[gindex], clazz->slot_object_size); + face->garray[gindex]->face = face; + ft_glyphslot_init(face->garray[gindex]); + face->garray[gindex]->next = face->garray[gindex]; + face->glyph = face->garray[gindex]; + + FT_Load_Glyph(face, glyph_index, FT_LOAD_NO_HINTING); + } + + } /* some checks */