forsyth20121205-174063a80cc13 years agoHistory
203 lines · 2.6 KB · C
RawDownload
#include "lib9.h"#include "draw.h" PointPt(int x, int y){	Point p; 	p.x = x;	p.y = y;	return p;} RectangleRect(int x, int y, int bx, int by){	Rectangle r; 	r.min.x = x;	r.min.y = y;	r.max.x = bx;	r.max.y = by;	return r;} RectangleRpt(Point min, Point max){	Rectangle r; 	r.min = min;	r.max = max;	return r;} Pointaddpt(Point a, Point b){	a.x += b.x;	a.y += b.y;	return a;} Pointsubpt(Point a, Point b){	a.x -= b.x;	a.y -= b.y;	return a;} Rectangleinsetrect(Rectangle r, int n){	r.min.x += n;	r.min.y += n;	r.max.x -= n;	r.max.y -= n;	return r;} Pointdivpt(Point a, int b){	a.x /= b;	a.y /= b;	return a;} Pointmulpt(Point a, int b){	a.x *= b;	a.y *= b;	return a;} Rectanglerectsubpt(Rectangle r, Point p){	r.min.x -= p.x;	r.min.y -= p.y;	r.max.x -= p.x;	r.max.y -= p.y;	return r;} Rectanglerectaddpt(Rectangle r, Point p){	r.min.x += p.x;	r.min.y += p.y;	r.max.x += p.x;	r.max.y += p.y;	return r;} inteqpt(Point p, Point q){	return p.x==q.x && p.y==q.y;} inteqrect(Rectangle r, Rectangle s){	return r.min.x==s.min.x && r.max.x==s.max.x &&	       r.min.y==s.min.y && r.max.y==s.max.y;} intrectXrect(Rectangle r, Rectangle s){	return r.min.x<s.max.x && s.min.x<r.max.x &&	       r.min.y<s.max.y && s.min.y<r.max.y;} intrectinrect(Rectangle r, Rectangle s){	return s.min.x<=r.min.x && r.max.x<=s.max.x && s.min.y<=r.min.y && r.max.y<=s.max.y;} intptinrect(Point p, Rectangle r){	return p.x>=r.min.x && p.x<r.max.x &&	       p.y>=r.min.y && p.y<r.max.y;} Rectanglecanonrect(Rectangle r){	int t;	if (r.max.x < r.min.x) {		t = r.min.x;		r.min.x = r.max.x;		r.max.x = t;	}	if (r.max.y < r.min.y) {		t = r.min.y;		r.min.y = r.max.y;		r.max.y = t;	}	return r;} voidcombinerect(Rectangle *r1, Rectangle r2){	if(r1->min.x > r2.min.x)		r1->min.x = r2.min.x;	if(r1->min.y > r2.min.y)		r1->min.y = r2.min.y;	if(r1->max.x < r2.max.x)		r1->max.x = r2.max.x;	if(r1->max.y < r2.max.y)		r1->max.y = r2.max.y;} ulongdrawld2chan[] = {	GREY1,	GREY2,	GREY4,	CMAP8,}; ulongsetalpha(ulong color, uchar alpha){	int red, green, blue; 	red = (color >> 3*8) & 0xFF;	green = (color >> 2*8) & 0xFF;	blue = (color >> 1*8) & 0xFF;	/* ignore incoming alpha */	red = (red * alpha)/255;	green = (green * alpha)/255;	blue = (blue * alpha)/255;	return (red<<3*8) | (green<<2*8) | (blue<<1*8) | (alpha<<0*8);} Point	ZP;Rectangle ZR;intRfmt(Fmt *f){	Rectangle r; 	r = va_arg(f->args, Rectangle);	return fmtprint(f, "%P %P", r.min, r.max);} intPfmt(Fmt *f){	Point p; 	p = va_arg(f->args, Point);	return fmtprint(f, "[%d %d]", p.x, p.y);}