diff options
author | Owen Taylor <otaylor@redhat.com> | 2005-03-15 23:00:28 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2005-03-15 23:00:28 +0000 |
commit | cc35f77a1b4e40ba85d583d0b0f301c288adb930 (patch) | |
tree | 2544826477ac2343fa2d121f6ef7438bb1fe770a /pango/pangocairo-fcfont.c | |
parent | c6fb33e1dde1721132273b038923e1d2da3abba3 (diff) | |
download | pango-cc35f77a1b4e40ba85d583d0b0f301c288adb930.tar.gz |
Include the effect of the CTM in the FC_PIXEL_SIZE we set in the
2005-03-15 Owen Taylor <otaylor@redhat.com>
* pango/pangofc-fontmap.c: Include the effect of the
CTM in the FC_PIXEL_SIZE we set in the FcPattern.
(Fixes problems with getting the wrong font when drawing
the same font at multiple scales. Reported by Keith
Packard.)
* pango/pangofc-fontmap.h pango/pangocairo-fcfontmap.c
pango/pangocairo-fc.h pango/pangocairo-fontfont.c: Add
the PangoFontDescription to create_font() ... we need it
to get the right pixel size to combine with the CTM.
* pango/pangofc-fontmap.c (pango_fc_fontmap_get_dpi):
Extract out the logic for finding the DPI from the
size-listing code.
(pango_fc_font_map_get_render_key): Handle mix of
absolute and not sizes correctly.
Diffstat (limited to 'pango/pangocairo-fcfont.c')
-rw-r--r-- | pango/pangocairo-fcfont.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/pango/pangocairo-fcfont.c b/pango/pangocairo-fcfont.c index ea335472..52da3a4a 100644 --- a/pango/pangocairo-fcfont.c +++ b/pango/pangocairo-fcfont.c @@ -321,15 +321,15 @@ _pango_cairo_fc_get_render_key (PangoCairoFcFontMap *cffontmap, } PangoFcFont * -_pango_cairo_fc_font_new (PangoCairoFcFontMap *cffontmap, - PangoContext *context, - FcPattern *pattern) +_pango_cairo_fc_font_new (PangoCairoFcFontMap *cffontmap, + PangoContext *context, + const PangoFontDescription *desc, + FcPattern *pattern) { PangoCairoFcFont *cffont; - FcResult result; const PangoMatrix *pango_ctm; FcMatrix *fc_matrix; - double pixel_size; + double size; g_return_val_if_fail (PANGO_IS_CAIRO_FC_FONT_MAP (cffontmap), NULL); g_return_val_if_fail (pattern != NULL, NULL); @@ -358,10 +358,13 @@ _pango_cairo_fc_font_new (PangoCairoFcFontMap *cffontmap, cairo_matrix_destroy (tmp_matrix); } - result = FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &pixel_size); - g_assert (result == FcResultMatch); + if (pango_font_description_get_size_is_absolute (desc)) + size = pango_font_description_get_size (desc); + else + size = cffontmap->dpi * pango_font_description_get_size (desc) / 72.; - cairo_matrix_scale (cffont->font_matrix, pixel_size, pixel_size); + cairo_matrix_scale (cffont->font_matrix, + size / PANGO_SCALE, size / PANGO_SCALE); cffont->total_matrix = cairo_matrix_create (); |