#ifndef lint
static	char sccsid[] = "@(#)pr_clip.c 9.2 88/01/19 Copyr 1983 Sun Micro";
#endif

/*
 * Copyright (c) 1983 by Sun Microsystems, Inc.
 */
#include <sys/types.h>
#ifdef REF
#include <ref/config.h>
#endif
#include <pixrect/pixrect.h>

#define	pr_clip1(pra,size,prb) {					\
	if ((pra)->pos.x<0) {						\
		(prb)->pos.x  -= (pra)->pos.x;				\
		(size)->x += (pra)->pos.x;				\
		(pra)->pos.x   = 0;					\
	}								\
	if ((pra)->pos.y<0) {						\
		(prb)->pos.y  -= (pra)->pos.y;				\
		(size)->y += (pra)->pos.y;				\
		(pra)->pos.y   = 0;					\
	}								\
	if ((pra)->pos.x + (size)->x > (pra)->pr->pr_size.x)		\
		(size)->x = (pra)->pr->pr_size.x - (pra)->pos.x;	\
	if ((pra)->pos.y + (size)->y > (pra)->pr->pr_size.y)		\
		(size)->y = (pra)->pr->pr_size.y - (pra)->pos.y;	\
}

#define	pr_clip2(pra,size) {						\
	if ((pra)->pos.x<0) {						\
		(size)->x += (pra)->pos.x;				\
		(pra)->pos.x = 0;					\
	}								\
	if ((pra)->pos.y<0) {						\
		(size)->y += (pra)->pos.y;				\
		(pra)->pos.y = 0;					\
	}								\
	if ((pra)->pos.x + (size)->x > (pra)->pr->pr_size.x)		\
		(size)->x = (pra)->pr->pr_size.x - (pra)->pos.x;	\
	if ((pra)->pos.y + (size)->y > (pra)->pr->pr_size.y)		\
		(size)->y = (pra)->pr->pr_size.y - (pra)->pos.y;	\
}

pr_clip(dstp, srcp)
	register struct pr_subregion *dstp;
	register struct pr_prpos *srcp;
{

	if (srcp->pr) {
		pr_clip1(dstp, &dstp->size, srcp);
		pr_clip1(srcp, &dstp->size, dstp);
	} else
		pr_clip2(dstp, &dstp->size);
}