xref: /inferno-os/libdraw/ellipse.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth #include "draw.h"
3*37da2899SCharles.Forsyth 
4*37da2899SCharles.Forsyth static
5*37da2899SCharles.Forsyth void
doellipse(int cmd,Image * dst,Point * c,int xr,int yr,int thick,Image * src,Point * sp,int alpha,int phi,Drawop op)6*37da2899SCharles.Forsyth doellipse(int cmd, Image *dst, Point *c, int xr, int yr, int thick, Image *src, Point *sp, int alpha, int phi, Drawop op)
7*37da2899SCharles.Forsyth {
8*37da2899SCharles.Forsyth 	uchar *a;
9*37da2899SCharles.Forsyth 
10*37da2899SCharles.Forsyth 	_setdrawop(dst->display, op);
11*37da2899SCharles.Forsyth 
12*37da2899SCharles.Forsyth 	a = bufimage(dst->display, 1+4+4+2*4+4+4+4+2*4+2*4);
13*37da2899SCharles.Forsyth 	if(a == 0){
14*37da2899SCharles.Forsyth 		_drawprint(2, "image ellipse: %r\n");
15*37da2899SCharles.Forsyth 		return;
16*37da2899SCharles.Forsyth 	}
17*37da2899SCharles.Forsyth 	a[0] = cmd;
18*37da2899SCharles.Forsyth 	BPLONG(a+1, dst->id);
19*37da2899SCharles.Forsyth 	BPLONG(a+5, src->id);
20*37da2899SCharles.Forsyth 	BPLONG(a+9, c->x);
21*37da2899SCharles.Forsyth 	BPLONG(a+13, c->y);
22*37da2899SCharles.Forsyth 	BPLONG(a+17, xr);
23*37da2899SCharles.Forsyth 	BPLONG(a+21, yr);
24*37da2899SCharles.Forsyth 	BPLONG(a+25, thick);
25*37da2899SCharles.Forsyth 	BPLONG(a+29, sp->x);
26*37da2899SCharles.Forsyth 	BPLONG(a+33, sp->y);
27*37da2899SCharles.Forsyth 	BPLONG(a+37, alpha);
28*37da2899SCharles.Forsyth 	BPLONG(a+41, phi);
29*37da2899SCharles.Forsyth }
30*37da2899SCharles.Forsyth 
31*37da2899SCharles.Forsyth void
ellipse(Image * dst,Point c,int a,int b,int thick,Image * src,Point sp)32*37da2899SCharles.Forsyth ellipse(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp)
33*37da2899SCharles.Forsyth {
34*37da2899SCharles.Forsyth 	doellipse('e', dst, &c, a, b, thick, src, &sp, 0, 0, SoverD);
35*37da2899SCharles.Forsyth }
36*37da2899SCharles.Forsyth 
37*37da2899SCharles.Forsyth void
ellipseop(Image * dst,Point c,int a,int b,int thick,Image * src,Point sp,Drawop op)38*37da2899SCharles.Forsyth ellipseop(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp, Drawop op)
39*37da2899SCharles.Forsyth {
40*37da2899SCharles.Forsyth 	doellipse('e', dst, &c, a, b, thick, src, &sp, 0, 0, op);
41*37da2899SCharles.Forsyth }
42*37da2899SCharles.Forsyth 
43*37da2899SCharles.Forsyth void
fillellipse(Image * dst,Point c,int a,int b,Image * src,Point sp)44*37da2899SCharles.Forsyth fillellipse(Image *dst, Point c, int a, int b, Image *src, Point sp)
45*37da2899SCharles.Forsyth {
46*37da2899SCharles.Forsyth 	doellipse('E', dst, &c, a, b, 0, src, &sp, 0, 0, SoverD);
47*37da2899SCharles.Forsyth }
48*37da2899SCharles.Forsyth 
49*37da2899SCharles.Forsyth void
fillellipseop(Image * dst,Point c,int a,int b,Image * src,Point sp,Drawop op)50*37da2899SCharles.Forsyth fillellipseop(Image *dst, Point c, int a, int b, Image *src, Point sp, Drawop op)
51*37da2899SCharles.Forsyth {
52*37da2899SCharles.Forsyth 	doellipse('E', dst, &c, a, b, 0, src, &sp, 0, 0, op);
53*37da2899SCharles.Forsyth }
54*37da2899SCharles.Forsyth 
55*37da2899SCharles.Forsyth void
arc(Image * dst,Point c,int a,int b,int thick,Image * src,Point sp,int alpha,int phi)56*37da2899SCharles.Forsyth arc(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp, int alpha, int phi)
57*37da2899SCharles.Forsyth {
58*37da2899SCharles.Forsyth 	alpha |= 1<<31;
59*37da2899SCharles.Forsyth 	doellipse('e', dst, &c, a, b, thick, src, &sp, alpha, phi, SoverD);
60*37da2899SCharles.Forsyth }
61*37da2899SCharles.Forsyth 
62*37da2899SCharles.Forsyth void
arcop(Image * dst,Point c,int a,int b,int thick,Image * src,Point sp,int alpha,int phi,Drawop op)63*37da2899SCharles.Forsyth arcop(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp, int alpha, int phi, Drawop op)
64*37da2899SCharles.Forsyth {
65*37da2899SCharles.Forsyth 	alpha |= 1<<31;
66*37da2899SCharles.Forsyth 	doellipse('e', dst, &c, a, b, thick, src, &sp, alpha, phi, op);
67*37da2899SCharles.Forsyth }
68*37da2899SCharles.Forsyth 
69*37da2899SCharles.Forsyth void
fillarc(Image * dst,Point c,int a,int b,Image * src,Point sp,int alpha,int phi)70*37da2899SCharles.Forsyth fillarc(Image *dst, Point c, int a, int b, Image *src, Point sp, int alpha, int phi)
71*37da2899SCharles.Forsyth {
72*37da2899SCharles.Forsyth 	alpha |= 1<<31;
73*37da2899SCharles.Forsyth 	doellipse('E', dst, &c, a, b, 0, src, &sp, alpha, phi, SoverD);
74*37da2899SCharles.Forsyth }
75*37da2899SCharles.Forsyth 
76*37da2899SCharles.Forsyth void
fillarcop(Image * dst,Point c,int a,int b,Image * src,Point sp,int alpha,int phi,Drawop op)77*37da2899SCharles.Forsyth fillarcop(Image *dst, Point c, int a, int b, Image *src, Point sp, int alpha, int phi, Drawop op)
78*37da2899SCharles.Forsyth {
79*37da2899SCharles.Forsyth 	alpha |= 1<<31;
80*37da2899SCharles.Forsyth 	doellipse('E', dst, &c, a, b, 0, src, &sp, alpha, phi, op);
81*37da2899SCharles.Forsyth }
82