summaryrefslogtreecommitdiff
path: root/pango/pangoxft-font.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-08-06 03:43:16 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-08-06 03:43:16 +0000
commit9629e9e1ffa2f76989c877a2c2e4c0324716100d (patch)
treefebf99a1e4bc4601aed073b4ac5d41fe02036c46 /pango/pangoxft-font.c
parent4b1d623ea4e751b2038588c894a19c0589840f4b (diff)
downloadpango-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.c29
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);
}
-