plan9port

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

draw.c (1319B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <draw.h>
      4 
      5 void
      6 _setdrawop(Display *d, Drawop op)
      7 {
      8 	uchar *a;
      9 
     10 	if(op != SoverD){
     11 		a = bufimage(d, 1+1);
     12 		if(a == 0)
     13 			return;
     14 		a[0] = 'O';
     15 		a[1] = op;
     16 	}
     17 }
     18 
     19 static void
     20 draw1(Image *dst, Rectangle *r, Image *src, Point *p0, Image *mask, Point *p1, Drawop op)
     21 {
     22 	uchar *a;
     23 
     24 	_setdrawop(dst->display, op);
     25 
     26 	a = bufimage(dst->display, 1+4+4+4+4*4+2*4+2*4);
     27 	if(a == 0)
     28 		return;
     29 	if(src == nil)
     30 		src = dst->display->black;
     31 	if(mask == nil)
     32 		mask = dst->display->opaque;
     33 	a[0] = 'd';
     34 	BPLONG(a+1, dst->id);
     35 	BPLONG(a+5, src->id);
     36 	BPLONG(a+9, mask->id);
     37 	BPLONG(a+13, r->min.x);
     38 	BPLONG(a+17, r->min.y);
     39 	BPLONG(a+21, r->max.x);
     40 	BPLONG(a+25, r->max.y);
     41 	BPLONG(a+29, p0->x);
     42 	BPLONG(a+33, p0->y);
     43 	BPLONG(a+37, p1->x);
     44 	BPLONG(a+41, p1->y);
     45 }
     46 
     47 void
     48 draw(Image *dst, Rectangle r, Image *src, Image *mask, Point p1)
     49 {
     50 	draw1(dst, &r, src, &p1, mask, &p1, SoverD);
     51 }
     52 
     53 void
     54 drawop(Image *dst, Rectangle r, Image *src, Image *mask, Point p1, Drawop op)
     55 {
     56 	draw1(dst, &r, src, &p1, mask, &p1, op);
     57 }
     58 
     59 void
     60 gendraw(Image *dst, Rectangle r, Image *src, Point p0, Image *mask, Point p1)
     61 {
     62 	draw1(dst, &r, src, &p0, mask, &p1, SoverD);
     63 }
     64 
     65 void
     66 gendrawop(Image *dst, Rectangle r, Image *src, Point p0, Image *mask, Point p1, Drawop op)
     67 {
     68 	draw1(dst, &r, src, &p0, mask, &p1, op);
     69 }