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