diff options
Diffstat (limited to 'sys/libfont/test.c')
-rw-r--r-- | sys/libfont/test.c | 30 |
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); |