From 6e7a2c4ce32ddfb0e58a74fcba8c4e46e46d32a4 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 26 Dec 2008 15:34:50 -0500 Subject: [PATCH] [twin] Fix monospace for narrow glyphs --- src/cairo-font-face-twin.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/cairo-font-face-twin.c b/src/cairo-font-face-twin.c index 3b9f969c3..991951e09 100644 --- a/src/cairo-font-face-twin.c +++ b/src/cairo-font-face-twin.c @@ -443,10 +443,14 @@ twin_scaled_font_render_glyph (cairo_scaled_font_t *scaled_font, /* Save glyph space, we need it when stroking */ cairo_save (cr); - /* left margin + pen width, pen width */ - cairo_translate (cr, props->penx * 1.5, -props->peny * .5); + /* center the pen */ + cairo_translate (cr, props->penx * .5, -props->peny * .5); - cairo_scale (cr, props->stretch, 1); + /* small-caps */ + if (props->face_props->smallcaps && glyph >= 'a' && glyph <= 'z') { + glyph += 'A' - 'a'; + cairo_scale (cr, 1, 28. / 42); + } /* slant */ if (props->face_props->slant != CAIRO_FONT_SLANT_NORMAL) { @@ -454,11 +458,6 @@ twin_scaled_font_render_glyph (cairo_scaled_font_t *scaled_font, cairo_transform (cr, &shear); } - if (props->face_props->smallcaps && glyph >= 'a' && glyph <= 'z') { - glyph += 'A' - 'a'; - cairo_scale (cr, 1, 28. / 42); - } - b = _cairo_twin_outlines + _cairo_twin_charmap[unlikely (glyph >= ARRAY_LENGTH (_cairo_twin_charmap)) ? 0 : glyph]; g = twin_glyph_draw(b); @@ -468,10 +467,16 @@ twin_scaled_font_render_glyph (cairo_scaled_font_t *scaled_font, /* monospace */ if (props->face_props->monospace) { double monow = F(24); - cairo_scale (cr, (monow+props->penx) / (gw+props->penx), 1); + cairo_scale (cr, (monow+3*props->penx) / (gw+3*props->penx), 1); gw = monow; } + /* left margin */ + cairo_translate (cr, props->penx, 0); + + /* stretch */ + cairo_scale (cr, props->stretch, 1); + _twin_compute_snap (cr, scaled_font, &info, b); /* advance width */