Showing the changes to libmemdraw/string.c (1 of 9462 files). Show all
Unified · Split
| @@ -0,0 +1,66 @@ | |||
| 1 | #include "lib9.h" | ||
| 2 | #include "draw.h" | ||
| 3 | #include "memdraw.h" | ||
| 4 | #include "memlayer.h" | ||
| 5 | |||
| 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; | ||
| 13 | |||
| 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 | } | ||
| 36 | |||
| 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; | ||
| 45 | |||
| 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 | } | ||