Showing the changes to libmemdraw/string.c (1 of 382 files). Show all
Unified · Split
| @@ -0,0 +1,68 @@ | |||
| 1 | #include <u.h> | ||
| 2 | #include <libc.h> | ||
| 3 | #include <draw.h> | ||
| 4 | #include <memdraw.h> | ||
| 5 | #include <memlayer.h> | ||
| 6 | |||
| 7 | Point | ||
| 8 | memimagestring(Memimage *b, Point p, Memimage *color, Point cp, Memsubfont *f, char *cs) | ||
| 9 | { | ||
| 10 | int w, width; | ||
| 11 | uchar *s; | ||
| 12 | Rune c; | ||
| 13 | Fontchar *i; | ||
| 14 | |||
| 15 | s = (uchar*)cs; | ||
| 16 | for(; c=*s; p.x+=width, cp.x+=width){ | ||
| 17 | width = 0; | ||
| 18 | if(c < Runeself) | ||
| 19 | s++; | ||
| 20 | else{ | ||
| 21 | w = chartorune(&c, (char*)s); | ||
| 22 | if(w == 0){ | ||
| 23 | s++; | ||
| 24 | continue; | ||
| 25 | } | ||
| 26 | s += w; | ||
| 27 | } | ||
| 28 | if(c >= f->n) | ||
| 29 | continue; | ||
| 30 | // i = f->info+c; | ||
| 31 | i = &(f->info[c]); | ||
| 32 | width = i->width; | ||
| 33 | 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), | ||
| 34 | color, cp, f->bits, Pt(i->x, i->top), SoverD); | ||
| 35 | } | ||
| 36 | return p; | ||
| 37 | } | ||
| 38 | |||
| 39 | Point | ||
| 40 | memsubfontwidth(Memsubfont *f, char *cs) | ||
| 41 | { | ||
| 42 | Rune c; | ||
| 43 | Point p; | ||
| 44 | uchar *s; | ||
| 45 | Fontchar *i; | ||
| 46 | int w, width; | ||
| 47 | |||
| 48 | p = Pt(0, f->height); | ||
| 49 | s = (uchar*)cs; | ||
| 50 | for(; c=*s; p.x+=width){ | ||
| 51 | width = 0; | ||
| 52 | if(c < Runeself) | ||
| 53 | s++; | ||
| 54 | else{ | ||
| 55 | w = chartorune(&c, (char*)s); | ||
| 56 | if(w == 0){ | ||
| 57 | s++; | ||
| 58 | continue; | ||
| 59 | } | ||
| 60 | s += w; | ||
| 61 | } | ||
| 62 | if(c >= f->n) | ||
| 63 | continue; | ||
| 64 | i = f->info+c; | ||
| 65 | width = i->width; | ||
| 66 | } | ||
| 67 | return p; | ||
| 68 | } | ||