1*7dd7cddfSDavid du Colombier #include <u.h>
2*7dd7cddfSDavid du Colombier #include <libc.h>
3*7dd7cddfSDavid du Colombier #include <draw.h>
4*7dd7cddfSDavid du Colombier
5*7dd7cddfSDavid du Colombier Point
stringsubfont(Image * b,Point p,Image * color,Subfont * f,char * cs)6*7dd7cddfSDavid du Colombier stringsubfont(Image *b, Point p, Image *color, Subfont *f, char *cs)
7*7dd7cddfSDavid du Colombier {
8*7dd7cddfSDavid du Colombier int w, width;
9*7dd7cddfSDavid du Colombier uchar *s;
10*7dd7cddfSDavid du Colombier Rune c;
11*7dd7cddfSDavid du Colombier Fontchar *i;
12*7dd7cddfSDavid du Colombier
13*7dd7cddfSDavid du Colombier s = (uchar*)cs;
14*7dd7cddfSDavid du Colombier for(; c=*s; p.x+=width){
15*7dd7cddfSDavid du Colombier width = 0;
16*7dd7cddfSDavid du Colombier if(c < Runeself)
17*7dd7cddfSDavid du Colombier s++;
18*7dd7cddfSDavid du Colombier else{
19*7dd7cddfSDavid du Colombier w = chartorune(&c, (char*)s);
20*7dd7cddfSDavid du Colombier if(w == 0){
21*7dd7cddfSDavid du Colombier s++;
22*7dd7cddfSDavid du Colombier continue;
23*7dd7cddfSDavid du Colombier }
24*7dd7cddfSDavid du Colombier s += w;
25*7dd7cddfSDavid du Colombier }
26*7dd7cddfSDavid du Colombier if(c >= f->n)
27*7dd7cddfSDavid du Colombier continue;
28*7dd7cddfSDavid du Colombier i = f->info+c;
29*7dd7cddfSDavid du Colombier width = i->width;
30*7dd7cddfSDavid du Colombier 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),
31*7dd7cddfSDavid du Colombier color, f->bits, Pt(i->x, i->top));
32*7dd7cddfSDavid du Colombier }
33*7dd7cddfSDavid du Colombier return p;
34*7dd7cddfSDavid du Colombier }
35*7dd7cddfSDavid du Colombier
36*7dd7cddfSDavid du Colombier Point
strsubfontwidth(Subfont * f,char * cs)37*7dd7cddfSDavid du Colombier strsubfontwidth(Subfont *f, char *cs)
38*7dd7cddfSDavid du Colombier {
39*7dd7cddfSDavid du Colombier Rune c;
40*7dd7cddfSDavid du Colombier Point p;
41*7dd7cddfSDavid du Colombier uchar *s;
42*7dd7cddfSDavid du Colombier Fontchar *i;
43*7dd7cddfSDavid du Colombier int w, width;
44*7dd7cddfSDavid du Colombier
45*7dd7cddfSDavid du Colombier p = Pt(0, f->height);
46*7dd7cddfSDavid du Colombier s = (uchar*)cs;
47*7dd7cddfSDavid du Colombier for(; c=*s; p.x+=width){
48*7dd7cddfSDavid du Colombier width = 0;
49*7dd7cddfSDavid du Colombier if(c < Runeself)
50*7dd7cddfSDavid du Colombier s++;
51*7dd7cddfSDavid du Colombier else{
52*7dd7cddfSDavid du Colombier w = chartorune(&c, (char*)s);
53*7dd7cddfSDavid du Colombier if(w == 0){
54*7dd7cddfSDavid du Colombier s++;
55*7dd7cddfSDavid du Colombier continue;
56*7dd7cddfSDavid du Colombier }
57*7dd7cddfSDavid du Colombier s += w;
58*7dd7cddfSDavid du Colombier }
59*7dd7cddfSDavid du Colombier if(c >= f->n)
60*7dd7cddfSDavid du Colombier continue;
61*7dd7cddfSDavid du Colombier i = f->info+c;
62*7dd7cddfSDavid du Colombier width = i->width;
63*7dd7cddfSDavid du Colombier }
64*7dd7cddfSDavid du Colombier return p;
65*7dd7cddfSDavid du Colombier }
66