[twin] Fix monospace for narrow glyphs

This commit is contained in:
Behdad Esfahbod 2008-12-26 15:34:50 -05:00
parent e8e6ae1294
commit 6e7a2c4ce3

View file

@ -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 */