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 } 67