xref: /inferno-os/libdraw/line.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1 #include "lib9.h"
2 #include "draw.h"
3 
4 void
line(Image * dst,Point p0,Point p1,int end0,int end1,int radius,Image * src,Point sp)5 line(Image *dst, Point p0, Point p1, int end0, int end1, int radius, Image *src, Point sp)
6 {
7 	lineop(dst, p0, p1, end0, end1, radius, src, sp, SoverD);
8 }
9 
10 void
lineop(Image * dst,Point p0,Point p1,int end0,int end1,int radius,Image * src,Point sp,Drawop op)11 lineop(Image *dst, Point p0, Point p1, int end0, int end1, int radius, Image *src, Point sp, Drawop op)
12 {
13 	uchar *a;
14 
15 	_setdrawop(dst->display, op);
16 
17 	a = bufimage(dst->display, 1+4+2*4+2*4+4+4+4+4+2*4);
18 	if(a == 0){
19 		_drawprint(2, "image line: %r\n");
20 		return;
21 	}
22 	a[0] = 'L';
23 	BPLONG(a+1, dst->id);
24 	BPLONG(a+5, p0.x);
25 	BPLONG(a+9, p0.y);
26 	BPLONG(a+13, p1.x);
27 	BPLONG(a+17, p1.y);
28 	BPLONG(a+21, end0);
29 	BPLONG(a+25, end1);
30 	BPLONG(a+29, radius);
31 	BPLONG(a+33, src->id);
32 	BPLONG(a+37, sp.x);
33 	BPLONG(a+41, sp.y);
34 }
35