Blob


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