plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

stringsubfont.c (960B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <draw.h>
      4 
      5 Point
      6 stringsubfont(Image *b, Point p, Image *color, Subfont *f, char *cs)
      7 {
      8 	int w, width;
      9 	uchar *s;
     10 	Rune c;
     11 	Fontchar *i;
     12 
     13 	s = (uchar*)cs;
     14 	for(; c=*s; p.x+=width){
     15 		width = 0;
     16 		if(c < Runeself)
     17 			s++;
     18 		else{
     19 			w = chartorune(&c, (char*)s);
     20 			if(w == 0){
     21 				s++;
     22 				continue;
     23 			}
     24 			s += w;
     25 		}
     26 		if(c >= f->n)
     27 			continue;
     28 		i = f->info+c;
     29 		width = i->width;
     30 		draw(b, Rect(p.x+i->left, p.y+i->top, p.x+i->left+(i[1].x-i[0].x), p.y+i->bottom),
     31 			color, f->bits, Pt(i->x, i->top));
     32 	}
     33 	return p;
     34 }
     35 
     36 Point
     37 strsubfontwidth(Subfont *f, char *cs)
     38 {
     39 	Rune c;
     40 	Point p;
     41 	uchar *s;
     42 	Fontchar *i;
     43 	int w, width;
     44 
     45 	p = Pt(0, f->height);
     46 	s = (uchar*)cs;
     47 	for(; c=*s; p.x+=width){
     48 		width = 0;
     49 		if(c < Runeself)
     50 			s++;
     51 		else{
     52 			w = chartorune(&c, (char*)s);
     53 			if(w == 0){
     54 				s++;
     55 				continue;
     56 			}
     57 			s += w;
     58 		}
     59 		if(c >= f->n)
     60 			continue;
     61 		i = f->info+c;
     62 		width = i->width;
     63 	}
     64 	return p;
     65 }