xref: /plan9/sys/src/libdraw/ellipse.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier static
67dd7cddfSDavid du Colombier void
77dd7cddfSDavid du Colombier doellipse(int cmd, Image *dst, Point *c, int xr, int yr, int thick, Image *src, Point *sp, int alpha, int phi)
87dd7cddfSDavid du Colombier {
97dd7cddfSDavid du Colombier 	uchar *a;
107dd7cddfSDavid du Colombier 
117dd7cddfSDavid du Colombier 	a = bufimage(dst->display, 1+4+4+2*4+4+4+4+2*4+2*4);
127dd7cddfSDavid du Colombier 	if(a == 0){
13*9a747e4fSDavid du Colombier 		fprint(2, "image ellipse: %r\n");
147dd7cddfSDavid du Colombier 		return;
157dd7cddfSDavid du Colombier 	}
167dd7cddfSDavid du Colombier 	a[0] = cmd;
177dd7cddfSDavid du Colombier 	BPLONG(a+1, dst->id);
187dd7cddfSDavid du Colombier 	BPLONG(a+5, src->id);
197dd7cddfSDavid du Colombier 	BPLONG(a+9, c->x);
207dd7cddfSDavid du Colombier 	BPLONG(a+13, c->y);
217dd7cddfSDavid du Colombier 	BPLONG(a+17, xr);
227dd7cddfSDavid du Colombier 	BPLONG(a+21, yr);
237dd7cddfSDavid du Colombier 	BPLONG(a+25, thick);
247dd7cddfSDavid du Colombier 	BPLONG(a+29, sp->x);
257dd7cddfSDavid du Colombier 	BPLONG(a+33, sp->y);
267dd7cddfSDavid du Colombier 	BPLONG(a+37, alpha);
277dd7cddfSDavid du Colombier 	BPLONG(a+41, phi);
287dd7cddfSDavid du Colombier }
297dd7cddfSDavid du Colombier 
307dd7cddfSDavid du Colombier void
317dd7cddfSDavid du Colombier ellipse(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp)
327dd7cddfSDavid du Colombier {
337dd7cddfSDavid du Colombier 	doellipse('e', dst, &c, a, b, thick, src, &sp, 0, 0);
347dd7cddfSDavid du Colombier }
357dd7cddfSDavid du Colombier 
367dd7cddfSDavid du Colombier void
377dd7cddfSDavid du Colombier fillellipse(Image *dst, Point c, int a, int b, Image *src, Point sp)
387dd7cddfSDavid du Colombier {
397dd7cddfSDavid du Colombier 	doellipse('E', dst, &c, a, b, 0, src, &sp, 0, 0);
407dd7cddfSDavid du Colombier }
417dd7cddfSDavid du Colombier 
427dd7cddfSDavid du Colombier void
437dd7cddfSDavid du Colombier arc(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp, int alpha, int phi)
447dd7cddfSDavid du Colombier {
457dd7cddfSDavid du Colombier 	alpha |= 1<<31;
467dd7cddfSDavid du Colombier 	doellipse('e', dst, &c, a, b, thick, src, &sp, alpha, phi);
477dd7cddfSDavid du Colombier }
487dd7cddfSDavid du Colombier 
497dd7cddfSDavid du Colombier void
507dd7cddfSDavid du Colombier fillarc(Image *dst, Point c, int a, int b, Image *src, Point sp, int alpha, int phi)
517dd7cddfSDavid du Colombier {
527dd7cddfSDavid du Colombier 	alpha |= 1<<31;
537dd7cddfSDavid du Colombier 	doellipse('E', dst, &c, a, b, 0, src, &sp, alpha, phi);
547dd7cddfSDavid du Colombier }
55