From bfcc49fb69f964898d6f10ada2c7c4d8169f077d Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Wed, 16 Apr 2003 21:48:20 +0000 Subject: More careful handling of face->charmap; if is NULL, try to set a unicode Wed Apr 16 03:46:42 2003 Owen Taylor * pango/opentype/pango-ot-info.c (synthesize_class_def): More careful handling of face->charmap; if is NULL, try to set a unicode charmap, if that doesn't succeed, return. (Hopefully fixes #106550) --- pango/opentype/pango-ot-info.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'pango/opentype') diff --git a/pango/opentype/pango-ot-info.c b/pango/opentype/pango-ot-info.c index 1c55f2e0..8827e657 100644 --- a/pango/opentype/pango-ot-info.c +++ b/pango/opentype/pango-ot-info.c @@ -175,6 +175,21 @@ get_glyph_class (gunichar charcode) } } +static gboolean +set_unicode_charmap (FT_Face face) +{ + int charmap; + + for (charmap = 0; charmap < face->num_charmaps; charmap++) + if (face->charmaps[charmap]->encoding == ft_encoding_unicode) + { + FT_Error error = FT_Set_Charmap(face, face->charmaps[charmap]); + return error == FT_Err_Ok; + } + + return FALSE; +} + /* Synthesize a GDEF table using the font's charmap and the * unicode property database. We'll fill in class definitions * for glyphs not in the charmap as we walk through the tables. @@ -188,9 +203,13 @@ synthesize_class_def (PangoOTInfo *info) FT_ULong charcode; FT_UInt glyph; int i, j; + FT_CharMap old_charmap; - if (info->face->charmap->encoding != ft_encoding_unicode) - return; + old_charmap = info->face->charmap; + + if (!old_charmap || !old_charmap->encoding != ft_encoding_unicode) + if (!set_unicode_charmap (info->face)) + return; glyph_infos = g_array_new (FALSE, FALSE, sizeof (GlyphInfo)); @@ -240,6 +259,9 @@ synthesize_class_def (PangoOTInfo *info) g_free (glyph_indices); g_free (classes); + + if (old_charmap && info->face->charmap != old_charmap) + FT_Set_Charmap (info->face, old_charmap); } TTO_GDEF -- cgit v1.2.1