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