fontsrv: enlarge drawing buffer for subfonts on macOS

Double the width returned by CTFontGetBoundingBox when drawing.
Add box drawing characters for determining the line height.
Call freememimage(1) for the character memimage.

Fixes #18.
Fixes #120.
Fixes #146.
This commit is contained in:
Xiao-Yong Jin 2018-03-14 22:45:33 -05:00 committed by David du Colombier
parent a5b24c22a8
commit 96dc233091

View file

@ -104,6 +104,7 @@ static char *lines[] = {
"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz",
"g", "g",
"┌┬┐├┼┤└┴┘│─",
"ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει.", "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει.",
"私はガラスを食べられます。それは私を傷つけません。", "私はガラスを食べられます。それは私を傷つけません。",
"Aš galiu valgyti stiklą ir jis manęs nežeidžia", "Aš galiu valgyti stiklą ir jis manęs nežeidžia",
@ -234,7 +235,7 @@ mksubfont(XFont *f, char *name, int lo, int hi, int size, int antialias)
bbox = CTFontGetBoundingBox(font); bbox = CTFontGetBoundingBox(font);
x = (int)(bbox.size.width + 0.99999999); x = (int)(bbox.size.width*2 + 0.99999999);
fontheight(f, size, &height, &ascent); fontheight(f, size, &height, &ascent);
y = height; y = height;
@ -343,6 +344,7 @@ mksubfont(XFont *f, char *name, int lo, int hi, int size, int antialias)
m1 = allocmemimage(Rect(0, 0, x, y), antialias ? GREY8 : GREY1); m1 = allocmemimage(Rect(0, 0, x, y), antialias ? GREY8 : GREY1);
memimagedraw(m1, m1->r, m, m->r.min, memopaque, ZP, S); memimagedraw(m1, m1->r, m, m->r.min, memopaque, ZP, S);
freememimage(m); freememimage(m);
freememimage(mc);
sf->name = nil; sf->name = nil;
sf->n = hi+1 - lo; sf->n = hi+1 - lo;