Blame


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