#include <u.h> | |
#include <libc.h> | |
#include <draw.h> | |
Point | |
stringsubfont(Image *b, Point p, Image *color, Subfont *f, char *cs) | |
{ | |
int w, width; | |
uchar *s; | |
Rune c; | |
Fontchar *i; | |
s = (uchar*)cs; | |
for(; c=*s; p.x+=width){ | |
width = 0; | |
if(c < Runeself) | |
s++; | |
else{ | |
w = chartorune(&c, (char*)s); | |
if(w == 0){ | |
s++; | |
continue; | |
} | |
s += w; | |
} | |
if(c >= f->n) | |
continue; | |
i = f->info+c; | |
width = i->width; | |
draw(b, Rect(p.x+i->left, p.y+i->top, p.x+i->left+(i[1].x-i[0].x), p.y+i->bottom), | |
color, f->bits, Pt(i->x, i->top)); | |
} | |
return p; | |
} | |
Point | |
strsubfontwidth(Subfont *f, char *cs) | |
{ | |
Rune c; | |
Point p; | |
uchar *s; | |
Fontchar *i; | |
int w, width; | |
p = Pt(0, f->height); | |
s = (uchar*)cs; | |
for(; c=*s; p.x+=width){ | |
width = 0; | |
if(c < Runeself) | |
s++; | |
else{ | |
w = chartorune(&c, (char*)s); | |
if(w == 0){ | |
s++; | |
continue; | |
} | |
s += w; | |
} | |
if(c >= f->n) | |
continue; | |
i = f->info+c; | |
width = i->width; | |
} | |
return p; | |
} |