xref: /inferno-os/libdraw/rectclip.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth #include "draw.h"
3*37da2899SCharles.Forsyth 
4*37da2899SCharles.Forsyth int
rectclip(Rectangle * rp,Rectangle b)5*37da2899SCharles.Forsyth rectclip(Rectangle *rp, Rectangle b)		/* first by reference, second by value */
6*37da2899SCharles.Forsyth {
7*37da2899SCharles.Forsyth 	Rectangle *bp = &b;
8*37da2899SCharles.Forsyth 	/*
9*37da2899SCharles.Forsyth 	 * Expand rectXrect() in line for speed
10*37da2899SCharles.Forsyth 	 */
11*37da2899SCharles.Forsyth 	if((rp->min.x<bp->max.x && bp->min.x<rp->max.x &&
12*37da2899SCharles.Forsyth 	    rp->min.y<bp->max.y && bp->min.y<rp->max.y)==0)
13*37da2899SCharles.Forsyth 		return 0;
14*37da2899SCharles.Forsyth 	/* They must overlap */
15*37da2899SCharles.Forsyth 	if(rp->min.x < bp->min.x)
16*37da2899SCharles.Forsyth 		rp->min.x = bp->min.x;
17*37da2899SCharles.Forsyth 	if(rp->min.y < bp->min.y)
18*37da2899SCharles.Forsyth 		rp->min.y = bp->min.y;
19*37da2899SCharles.Forsyth 	if(rp->max.x > bp->max.x)
20*37da2899SCharles.Forsyth 		rp->max.x = bp->max.x;
21*37da2899SCharles.Forsyth 	if(rp->max.y > bp->max.y)
22*37da2899SCharles.Forsyth 		rp->max.y = bp->max.y;
23*37da2899SCharles.Forsyth 	return 1;
24*37da2899SCharles.Forsyth }
25