diff options
author | Owen Taylor <otaylor@redhat.com> | 2002-08-06 03:43:16 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2002-08-06 03:43:16 +0000 |
commit | 9629e9e1ffa2f76989c877a2c2e4c0324716100d (patch) | |
tree | febf99a1e4bc4601aed073b4ac5d41fe02036c46 /pango/pangoxft-font.c | |
parent | 4b1d623ea4e751b2038588c894a19c0589840f4b (diff) | |
download | pango-9629e9e1ffa2f76989c877a2c2e4c0324716100d.tar.gz |
Patch from Keith Packard:
Mon Aug 5 23:12:13 2002 Owen Taylor <otaylor@redhat.com>
Patch from Keith Packard:
* pango/pangoxft-private.h (struct _PangoXftFont): Add
some comments.
* pango/pangoxft-private.h pango/pangoxft-font.c
pango/pangoxft-fontmap.c: Identify coverage by a
pair of filename and index within the filename instead
of just a filename, to handle TrueType Collection (TTC)
fonts.
* pango/pangoxft-fontmap.c (pango_xft_make_pattern):
Remove some leftover comments.
Diffstat (limited to 'pango/pangoxft-font.c')
-rw-r--r-- | pango/pangoxft-font.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/pango/pangoxft-font.c b/pango/pangoxft-font.c index f24e385e..c82ba44e 100644 --- a/pango/pangoxft-font.c +++ b/pango/pangoxft-font.c @@ -551,7 +551,7 @@ pango_xft_font_get_coverage (PangoFont *font, PangoLanguage *language) { PangoXftFont *xfont = (PangoXftFont *)font; - FcChar8 *filename = NULL; + PangoXftCoverageKey key; PangoCoverage *coverage; Display *display; FcChar32 map[FC_CHARSET_MAP_SIZE]; @@ -561,15 +561,33 @@ pango_xft_font_get_coverage (PangoFont *font, _pango_xft_font_map_get_info (xfont->fontmap, &display, NULL); - FcPatternGetString (xfont->font_pattern, FC_FILE, 0, &filename); + /* + * Assume that coverage information is identified by + * a filename/index pair; there shouldn't be any reason + * this isn't true, but it's not specified anywhere + */ + if (FcPatternGetString (xfont->font_pattern, FC_FILE, 0, (FcChar8 **) &key.filename) != FcResultMatch) + return NULL; + + if (FcPatternGetInteger (xfont->font_pattern, FC_INDEX, 0, &key.id) != FcResultMatch) + return NULL; - coverage = _pango_xft_font_map_get_coverage (xfont->fontmap, (char *) filename); + coverage = _pango_xft_font_map_get_coverage (xfont->fontmap, &key); if (coverage) return pango_coverage_ref (coverage); - FcPatternGetCharSet (xfont->font_pattern, FC_CHARSET, 0, &charset); + /* + * Pull the coverage out of the pattern, this + * doesn't require loading the font + */ + if (FcPatternGetCharSet (xfont->font_pattern, FC_CHARSET, 0, &charset) != FcResultMatch) + return NULL; + /* + * Convert an Fc CharSet into a pango coverage structure. Sure + * would be nice to just use the Fc structure in place... + */ coverage = pango_coverage_new (); for (ucs4 = FcCharSetFirstPage (charset, map, &pos); ucs4 != FC_CHARSET_DONE; @@ -592,7 +610,7 @@ pango_xft_font_get_coverage (PangoFont *font, } } - _pango_xft_font_map_set_coverage (xfont->fontmap, filename, coverage); + _pango_xft_font_map_set_coverage (xfont->fontmap, &key, coverage); return coverage; } @@ -906,4 +924,3 @@ pango_xft_font_has_char (PangoFont *font, return XftCharExists (NULL, xft_font, wc); } - |