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)
This commit is contained in:
Owen Taylor 2003-04-16 21:48:29 +00:00 committed by Owen Taylor
parent 587b3940f3
commit f91deef2c9
1 changed files with 24 additions and 2 deletions

View File

@ -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,8 +203,12 @@ 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)
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