@@ -207,15 +207,13 @@ FT2Font::get_path(std::vector<double> &vertices, std::vector<unsigned char> &cod
207207}
208208
209209FT2Font::FT2Font (long hinting_factor_, std::vector<FT2Font *> &fallback_list,
210- FT2Font::WarnFunc warn, bool warn_if_used)
211- : ft_glyph_warn(warn), warn_if_used(warn_if_used), image({1 , 1 }), face(nullptr ),
210+ bool warn_if_used)
211+ : warn_if_used(warn_if_used), image({1 , 1 }), face(nullptr ), fallbacks(fallback_list ),
212212 hinting_factor(hinting_factor_),
213213 // set default kerning factor to 0, i.e., no kerning manipulation
214214 kerning_factor(0 )
215215{
216216 clear ();
217- // Set fallbacks
218- std::copy (fallback_list.begin (), fallback_list.end (), std::back_inserter (fallbacks));
219217}
220218
221219FT2Font::~FT2Font ()
@@ -234,7 +232,8 @@ void FT2Font::open(FT_Open_Args &open_args)
234232void FT2Font::close ()
235233{
236234 // This should be idempotent, in case a user manually calls close before the
237- // destructor does.
235+ // destructor does. Note for example, that PyFT2Font _does_ call this before the
236+ // base destructor to ensure internal pointers are cleared early enough.
238237
239238 for (auto & glyph : glyphs) {
240239 FT_Done_Glyph (glyph);
@@ -544,21 +543,19 @@ FT_UInt FT2Font::get_char_index(FT_ULong charcode, bool fallback = false)
544543 return FT_Get_Char_Index (ft_object->get_face (), charcode);
545544}
546545
547- void FT2Font::get_width_height ( long *width , long *height )
546+ std::tuple< long , long > FT2Font::get_width_height ( )
548547{
549- *width = advance;
550- *height = bbox.yMax - bbox.yMin ;
548+ return {advance, bbox.yMax - bbox.yMin };
551549}
552550
553551long FT2Font::get_descent ()
554552{
555553 return -bbox.yMin ;
556554}
557555
558- void FT2Font::get_bitmap_offset ( long *x , long *y )
556+ std::tuple< long , long > FT2Font::get_bitmap_offset ( )
559557{
560- *x = bbox.xMin ;
561- *y = 0 ;
558+ return {bbox.xMin , 0 };
562559}
563560
564561void FT2Font::draw_glyphs_to_bitmap (bool antialiased)
@@ -607,8 +604,11 @@ void FT2Font::draw_glyph_to_bitmap(
607604 draw_bitmap (im, &bitmap->bitmap , x + bitmap->left , y);
608605}
609606
610- void FT2Font::get_glyph_name (unsigned int glyph_number, std::string &buffer )
607+ std::string FT2Font::get_glyph_name (unsigned int glyph_number)
611608{
609+ std::string buffer;
610+ buffer.resize (128 );
611+
612612 if (!FT_HAS_GLYPH_NAMES (face)) {
613613 /* Note that this generated name must match the name that
614614 is generated by ttconv in ttfont_CharStrings_getname. */
@@ -625,6 +625,8 @@ void FT2Font::get_glyph_name(unsigned int glyph_number, std::string &buffer)
625625 buffer.resize (len);
626626 }
627627 }
628+
629+ return buffer;
628630}
629631
630632long FT2Font::get_name_index (char *name)
0 commit comments