summaryrefslogtreecommitdiff
path: root/src/cairo-font-face-twin.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2008-12-24 16:32:25 -0500
committerBehdad Esfahbod <behdad@behdad.org>2008-12-24 16:32:25 -0500
commit1116febb40cb5e5f7eafe97999d1143347819b3f (patch)
tree3486027fc007348a73746e591b809f7762922e7b /src/cairo-font-face-twin.c
parent6767673961401c7ab7b92eb8dfbb345efb560741 (diff)
downloadcairo-1116febb40cb5e5f7eafe97999d1143347819b3f.tar.gz
[twin] Implement small-caps
Diffstat (limited to 'src/cairo-font-face-twin.c')
-rw-r--r--src/cairo-font-face-twin.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/cairo-font-face-twin.c b/src/cairo-font-face-twin.c
index b4a271785..f911005e1 100644
--- a/src/cairo-font-face-twin.c
+++ b/src/cairo-font-face-twin.c
@@ -298,11 +298,6 @@ twin_scaled_font_render_glyph (cairo_scaled_font_t *scaled_font,
int n_snap_y;
} info = {FALSE};
- b = _cairo_twin_outlines +
- _cairo_twin_charmap[unlikely (glyph >= ARRAY_LENGTH (_cairo_twin_charmap)) ? 0 : glyph];
- g = twin_glyph_draw(b);
- w = twin_glyph_right(b);
-
cairo_set_tolerance (cr, 0.01);
/* Prepare face */
@@ -330,8 +325,8 @@ twin_scaled_font_render_glyph (cairo_scaled_font_t *scaled_font,
/* lock pen matrix */
cairo_save (cr);
- /* left margin */
- cairo_translate (cr, lw, 0);
+ /* left margin + pen width */
+ cairo_translate (cr, lw * 1.5, 0);
/* slant */
if (props->slant != CAIRO_FONT_SLANT_NORMAL) {
@@ -339,22 +334,32 @@ twin_scaled_font_render_glyph (cairo_scaled_font_t *scaled_font,
cairo_transform (cr, &shear);
}
+ if (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);
+ w = twin_glyph_right(b);
gw = FX(w);
+ /* monospace */
if (props->monospace) {
double monow = FX(24);
cairo_scale (cr, (monow+lw) / (gw+lw), 1);
gw = monow;
}
- cairo_translate (cr, lw * .5, 0); /* for pen width */
-
- metrics->x_advance = gw + lw;
- metrics->x_advance += 2 * lw /* XXX 2*x.margin */;
+ /* advance width */
+ metrics->x_advance = gw + lw * 3; /* pen width + margin */
metrics->x_advance *= stretch;
if (info.snap)
metrics->x_advance = SNAPI (SNAPX (metrics->x_advance));
+
+ /* glyph shape */
for (;;) {
switch (*g++) {
case 'M':