xref: /plan9/sys/src/libdraw/draw.c (revision ac57dd0bdfb9d49ce3ebb32937bb07f2cec3da6c)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier 
5*ac57dd0bSDavid du Colombier void
_setdrawop(Display * d,Drawop op)6*ac57dd0bSDavid du Colombier _setdrawop(Display *d, Drawop op)
77dd7cddfSDavid du Colombier {
87dd7cddfSDavid du Colombier 	uchar *a;
97dd7cddfSDavid du Colombier 
10*ac57dd0bSDavid du Colombier 	if(op != SoverD){
11*ac57dd0bSDavid du Colombier 		a = bufimage(d, 1+1);
12*ac57dd0bSDavid du Colombier 		if(a == 0)
13*ac57dd0bSDavid du Colombier 			return;
14*ac57dd0bSDavid du Colombier 		a[0] = 'O';
15*ac57dd0bSDavid du Colombier 		a[1] = op;
16*ac57dd0bSDavid du Colombier 	}
17*ac57dd0bSDavid du Colombier }
18*ac57dd0bSDavid du Colombier 
19*ac57dd0bSDavid du Colombier static void
draw1(Image * dst,Rectangle * r,Image * src,Point * p0,Image * mask,Point * p1,Drawop op)20*ac57dd0bSDavid du Colombier draw1(Image *dst, Rectangle *r, Image *src, Point *p0, Image *mask, Point *p1, Drawop op)
21*ac57dd0bSDavid du Colombier {
22*ac57dd0bSDavid du Colombier 	uchar *a;
23*ac57dd0bSDavid du Colombier 
24*ac57dd0bSDavid du Colombier 	_setdrawop(dst->display, op);
25*ac57dd0bSDavid du Colombier 
26*ac57dd0bSDavid du Colombier 	a = bufimage(dst->display, 1+4+4+4+4*4+2*4+2*4);
2759cc4ca5SDavid du Colombier 	if(a == 0)
287dd7cddfSDavid du Colombier 		return;
297dd7cddfSDavid du Colombier 	if(src == nil)
307dd7cddfSDavid du Colombier 		src = dst->display->black;
317dd7cddfSDavid du Colombier 	if(mask == nil)
329a747e4fSDavid du Colombier 		mask = dst->display->opaque;
337dd7cddfSDavid du Colombier 	a[0] = 'd';
347dd7cddfSDavid du Colombier 	BPLONG(a+1, dst->id);
357dd7cddfSDavid du Colombier 	BPLONG(a+5, src->id);
367dd7cddfSDavid du Colombier 	BPLONG(a+9, mask->id);
377dd7cddfSDavid du Colombier 	BPLONG(a+13, r->min.x);
387dd7cddfSDavid du Colombier 	BPLONG(a+17, r->min.y);
397dd7cddfSDavid du Colombier 	BPLONG(a+21, r->max.x);
407dd7cddfSDavid du Colombier 	BPLONG(a+25, r->max.y);
417dd7cddfSDavid du Colombier 	BPLONG(a+29, p0->x);
427dd7cddfSDavid du Colombier 	BPLONG(a+33, p0->y);
437dd7cddfSDavid du Colombier 	BPLONG(a+37, p1->x);
447dd7cddfSDavid du Colombier 	BPLONG(a+41, p1->y);
457dd7cddfSDavid du Colombier }
467dd7cddfSDavid du Colombier 
477dd7cddfSDavid du Colombier void
draw(Image * dst,Rectangle r,Image * src,Image * mask,Point p1)487dd7cddfSDavid du Colombier draw(Image *dst, Rectangle r, Image *src, Image *mask, Point p1)
497dd7cddfSDavid du Colombier {
50*ac57dd0bSDavid du Colombier 	draw1(dst, &r, src, &p1, mask, &p1, SoverD);
51*ac57dd0bSDavid du Colombier }
52*ac57dd0bSDavid du Colombier 
53*ac57dd0bSDavid du Colombier void
drawop(Image * dst,Rectangle r,Image * src,Image * mask,Point p1,Drawop op)54*ac57dd0bSDavid du Colombier drawop(Image *dst, Rectangle r, Image *src, Image *mask, Point p1, Drawop op)
55*ac57dd0bSDavid du Colombier {
56*ac57dd0bSDavid du Colombier 	draw1(dst, &r, src, &p1, mask, &p1, op);
577dd7cddfSDavid du Colombier }
587dd7cddfSDavid du Colombier 
597dd7cddfSDavid du Colombier void
gendraw(Image * dst,Rectangle r,Image * src,Point p0,Image * mask,Point p1)607dd7cddfSDavid du Colombier gendraw(Image *dst, Rectangle r, Image *src, Point p0, Image *mask, Point p1)
617dd7cddfSDavid du Colombier {
62*ac57dd0bSDavid du Colombier 	draw1(dst, &r, src, &p0, mask, &p1, SoverD);
63*ac57dd0bSDavid du Colombier }
64*ac57dd0bSDavid du Colombier 
65*ac57dd0bSDavid du Colombier void
gendrawop(Image * dst,Rectangle r,Image * src,Point p0,Image * mask,Point p1,Drawop op)66*ac57dd0bSDavid du Colombier gendrawop(Image *dst, Rectangle r, Image *src, Point p0, Image *mask, Point p1, Drawop op)
67*ac57dd0bSDavid du Colombier {
68*ac57dd0bSDavid du Colombier 	draw1(dst, &r, src, &p0, mask, &p1, op);
697dd7cddfSDavid du Colombier }
70