rsc | ed7c8e8 | 2003-09-30 17:47:42 +0000 | [diff] [blame] | 1 | #include <u.h> |
| 2 | #include <libc.h> |
| 3 | #include <draw.h> |
| 4 | |
| 5 | Point |
| 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 |
| 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 | } |