diff options
author | Owen Taylor <otaylor@redhat.com> | 2003-04-16 21:48:20 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2003-04-16 21:48:20 +0000 |
commit | bfcc49fb69f964898d6f10ada2c7c4d8169f077d (patch) | |
tree | 81b26b123c74cb5f98838b883cd014109f4c666c /pango | |
parent | 7a8933dbb5d3c3b342f565aef85f20112b447231 (diff) | |
download | pango-bfcc49fb69f964898d6f10ada2c7c4d8169f077d.tar.gz |
More careful handling of face->charmap; if is NULL, try to set a unicode
Wed Apr 16 03:46:42 2003 Owen Taylor <otaylor@redhat.com>
* 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)
Diffstat (limited to 'pango')
-rw-r--r-- | pango/opentype/pango-ot-info.c | 26 |
1 files changed, 24 insertions, 2 deletions
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 |