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