summaryrefslogtreecommitdiff
path: root/pango/pangofc-fontmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r--pango/pangofc-fontmap.c77
1 files changed, 45 insertions, 32 deletions
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
index 9dad20b9..efbf284c 100644
--- a/pango/pangofc-fontmap.c
+++ b/pango/pangofc-fontmap.c
@@ -683,10 +683,12 @@ pango_fc_make_pattern (const PangoFontDescription *description)
}
static PangoFont *
-pango_fc_font_map_new_font (PangoFontMap *fontmap,
- const PangoMatrix *pango_matrix,
- FcPattern *match)
+pango_fc_font_map_new_font (PangoFontMap *fontmap,
+ PangoContext *context,
+ FcPattern *match,
+ gboolean cache)
{
+ PangoFcFontMapClass *class;
PangoFcFontMap *fcfontmap = (PangoFcFontMap *)fontmap;
PangoFcFontMapPrivate *priv = fcfontmap->priv;
FcPattern *pattern;
@@ -703,7 +705,7 @@ pango_fc_font_map_new_font (PangoFontMap *fontmap,
return NULL;
/* Look up cache */
- if (!pango_matrix)
+ if (cache)
{
fcfont = g_hash_table_lookup (priv->fonts, match);
@@ -711,30 +713,48 @@ pango_fc_font_map_new_font (PangoFontMap *fontmap,
return g_object_ref (fcfont);
}
- if (pango_matrix)
- {
- FcMatrix fc_matrix;
+ class = PANGO_FC_FONT_MAP_GET_CLASS (fontmap);
- /* FontConfig has the Y axis pointing up, Pango, down.
- */
- fc_matrix.xx = pango_matrix->xx;
- fc_matrix.xy = - pango_matrix->xy;
- fc_matrix.yx = - pango_matrix->yx;
- fc_matrix.yy = pango_matrix->yy;
-
- pattern = FcPatternDuplicate (match);
- FcPatternAddMatrix (pattern, FC_MATRIX, &fc_matrix);
+ if (class->create_font)
+ {
+ fcfont = PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->create_font (fcfontmap,
+ context,
+ match);
}
else
- pattern = match;
+ {
+ const PangoMatrix *pango_matrix;
- fcfont = PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->new_font (fcfontmap, pattern);
+ if (context)
+ pango_matrix = pango_context_get_matrix (context);
+ else
+ pango_matrix = NULL;
- if (!pango_matrix)
- pango_fc_font_map_add (fcfontmap, fcfont);
+ if (pango_matrix)
+ {
+ FcMatrix fc_matrix;
+
+ /* FontConfig has the Y axis pointing up, Pango, down.
+ */
+ fc_matrix.xx = pango_matrix->xx;
+ fc_matrix.xy = - pango_matrix->xy;
+ fc_matrix.yx = - pango_matrix->yx;
+ fc_matrix.yy = pango_matrix->yy;
+
+ pattern = FcPatternDuplicate (match);
+ FcPatternAddMatrix (pattern, FC_MATRIX, &fc_matrix);
+ }
+ else
+ pattern = match;
+
+ fcfont = PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->new_font (fcfontmap, pattern);
- if (pango_matrix)
- FcPatternDestroy (pattern);
+ if (pango_matrix)
+ FcPatternDestroy (pattern);
+ }
+
+ if (cache)
+ pango_fc_font_map_add (fcfontmap, fcfont);
fcfont->fontmap = g_object_ref (fcfontmap);
@@ -956,9 +976,8 @@ pango_fc_font_map_load_font (PangoFontMap *fontmap,
if (patterns->n_patterns > 0)
{
- return pango_fc_font_map_new_font (fontmap,
- context ? pango_context_get_matrix (context) : NULL,
- patterns->patterns[0]);
+ return pango_fc_font_map_new_font (fontmap, context,
+ patterns->patterns[0], FALSE);
}
return NULL;
@@ -1034,20 +1053,14 @@ pango_fc_font_map_load_fontset (PangoFontMap *fontmap,
if (!patterns->fontset || !cache)
{
PangoFontsetSimple *simple;
- const PangoMatrix *matrix;
simple = pango_fontset_simple_new (language);
result = PANGO_FONTSET (simple);
- if (context)
- matrix = pango_context_get_matrix (context);
- else
- matrix = NULL;
-
for (i = 0; i < patterns->n_patterns; i++)
{
PangoFont *font;
- font = pango_fc_font_map_new_font (fontmap, matrix, patterns->patterns[i]);
+ font = pango_fc_font_map_new_font (fontmap, context, patterns->patterns[i], cache);
if (font)
pango_fontset_simple_append (simple, font);
}