summaryrefslogtreecommitdiff
path: root/pango/opentype
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2003-04-16 21:48:29 +0000
committerOwen Taylor <otaylor@src.gnome.org>2003-04-16 21:48:29 +0000
commit2a4a8b86b8d3b690ce2f42a7f2c1e810df792521 (patch)
tree69778135f52212123f9f4c27df5bdb947e620a6b /pango/opentype
parent7b05778821db2911af17eaafb848a616eb773c37 (diff)
downloadpango-2a4a8b86b8d3b690ce2f42a7f2c1e810df792521.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/opentype')
-rw-r--r--pango/opentype/pango-ot-info.c26
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