diff options
author | rsc <devnull@localhost> | 2006-06-25 18:58:06 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2006-06-25 18:58:06 +0000 |
commit | 324891a5579d6f504201a6107369c64dab245a98 (patch) | |
tree | 3069429c14484b100d86dd5a3b1013565bf5db6c /src/libmemdraw/string.c | |
parent | 9361131304f39db29b1bec59d881e585035ec93c (diff) | |
download | plan9port-324891a5579d6f504201a6107369c64dab245a98.tar.gz plan9port-324891a5579d6f504201a6107369c64dab245a98.tar.bz2 plan9port-324891a5579d6f504201a6107369c64dab245a98.zip |
separate out
Diffstat (limited to 'src/libmemdraw/string.c')
-rw-r--r-- | src/libmemdraw/string.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/libmemdraw/string.c b/src/libmemdraw/string.c new file mode 100644 index 00000000..6ae19c01 --- /dev/null +++ b/src/libmemdraw/string.c @@ -0,0 +1,66 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> +#include <memdraw.h> + +Point +memimagestring(Memimage *b, Point p, Memimage *color, Point cp, Memsubfont *f, char *cs) +{ + int w, width; + uchar *s; + Rune c; + Fontchar *i; + + s = (uchar*)cs; + for(; c=*s; p.x+=width, cp.x+=width){ + width = 0; + if(c < Runeself) + s++; + else{ + w = chartorune(&c, (char*)s); + if(w == 0){ + s++; + continue; + } + s += w; + } + if(c >= f->n) + continue; + i = f->info+c; + width = i->width; + 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), + color, cp, f->bits, Pt(i->x, i->top), SoverD); + } + return p; +} + +Point +memsubfontwidth(Memsubfont *f, char *cs) +{ + Rune c; + Point p; + uchar *s; + Fontchar *i; + int w, width; + + p = Pt(0, f->height); + s = (uchar*)cs; + for(; c=*s; p.x+=width){ + width = 0; + if(c < Runeself) + s++; + else{ + w = chartorune(&c, (char*)s); + if(w == 0){ + s++; + continue; + } + s += w; + } + if(c >= f->n) + continue; + i = f->info+c; + width = i->width; + } + return p; +} |