aboutsummaryrefslogtreecommitdiff
path: root/sys/libfont/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/libfont/test.c')
-rw-r--r--sys/libfont/test.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/sys/libfont/test.c b/sys/libfont/test.c
index b92a56f..569d7ad 100644
--- a/sys/libfont/test.c
+++ b/sys/libfont/test.c
@@ -15,11 +15,12 @@ int
main()
{
int i, err;
- float scale;
+ float x, dx, scale;
uchar *bitmap;
font·Info *info;
mmap·Reader fontfile;
- int x, y, as, ds, lg, ax, lsb, off, kern, r[2], c0[2], c1[2];
+ int off, y, ascent, descent, baseln;
+ int adv, lsb, r0[2], r1[2];
err = 0;
fontfile = mmap·open("/home/nolln/root/data/DejaVuSans.ttf");
@@ -34,22 +35,23 @@ main()
bitmap = calloc(W*H, sizeof(*bitmap));
scale = font·scaleheightto(info, L);
- font·vmetrics(info, &as, &ds, &lg);
- as *= scale;
- ds *= scale;
+ font·vmetrics(info, &ascent, &descent, &baseln);
+ ascent *= scale;
- x = 0;
+ x = 0.;
for (i = 0; i < strlen(phrase); i++) {
- font·code_hmetrics(info, phrase[i], &ax, &lsb);
- font·code_bitmapbox(info, phrase[i], scale, scale, c0, c0+1, c1, c1+1);
+ dx = x - (float)floor(x);
+ font·code_hmetrics(info, phrase[i], &adv, &lsb);
+ font·code_bitmapbox_subpixel(info, phrase[i], scale, scale, dx, 0, r0, r0+1, r1, r1+1);
- y = as + c0[1];
- off = x + lsb * scale + y * W;
- font·code_fillbitmap(info, bitmap+off, c1[0]-c0[0], c1[1]-c0[1], W, scale, scale, phrase[i]);
+ y = ascent + r0[1];
+ off = (int)floor(x) + (lsb * scale) + y * W;
- x += ax * scale;
- kern = font·code_kernadvance(info, phrase[i], phrase[i+1]);
- x += kern * scale;
+ font·code_fillbitmap_subpixel(info, bitmap+off, r1[0]-r0[0], r1[1]-r0[1], W, scale, scale, dx, 0, phrase[i]);
+
+ x += scale * adv;
+ if (phrase[i+1])
+ x += scale * font·code_kernadvance(info, phrase[i], phrase[i+1]);
}
stbi_write_png("out.png", W, H, 1, bitmap, W);