Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/X11/Xregion.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /************************************************************************ | |
2 | |
3 Copyright 1987, 1998 The Open Group | |
4 | |
5 Permission to use, copy, modify, distribute, and sell this software and its | |
6 documentation for any purpose is hereby granted without fee, provided that | |
7 the above copyright notice appear in all copies and that both that | |
8 copyright notice and this permission notice appear in supporting | |
9 documentation. | |
10 | |
11 The above copyright notice and this permission notice shall be included in | |
12 all copies or substantial portions of the Software. | |
13 | |
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
20 | |
21 Except as contained in this notice, the name of The Open Group shall not be | |
22 used in advertising or otherwise to promote the sale, use or other dealings | |
23 in this Software without prior written authorization from The Open Group. | |
24 | |
25 | |
26 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. | |
27 | |
28 All Rights Reserved | |
29 | |
30 Permission to use, copy, modify, and distribute this software and its | |
31 documentation for any purpose and without fee is hereby granted, | |
32 provided that the above copyright notice appear in all copies and that | |
33 both that copyright notice and this permission notice appear in | |
34 supporting documentation, and that the name of Digital not be | |
35 used in advertising or publicity pertaining to distribution of the | |
36 software without specific, written prior permission. | |
37 | |
38 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | |
39 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL | |
40 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | |
41 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
42 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |
43 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |
44 SOFTWARE. | |
45 | |
46 ************************************************************************/ | |
47 | |
48 #ifndef _X11_XREGION_H_ | |
49 #define _X11_XREGION_H_ | |
50 | |
51 typedef struct { | |
52 short x1, x2, y1, y2; | |
53 } Box, BOX, BoxRec, *BoxPtr; | |
54 | |
55 typedef struct { | |
56 short x, y, width, height; | |
57 }RECTANGLE, RectangleRec, *RectanglePtr; | |
58 | |
59 #define TRUE 1 | |
60 #define FALSE 0 | |
61 #define MAXSHORT 32767 | |
62 #define MINSHORT -MAXSHORT | |
63 #ifndef MAX | |
64 #define MAX(a,b) (((a) > (b)) ? (a) : (b)) | |
65 #endif | |
66 #ifndef MIN | |
67 #define MIN(a,b) (((a) < (b)) ? (a) : (b)) | |
68 #endif | |
69 | |
70 | |
71 /* | |
72 * clip region | |
73 */ | |
74 | |
75 typedef struct _XRegion { | |
76 long size; | |
77 long numRects; | |
78 BOX *rects; | |
79 BOX extents; | |
80 } REGION; | |
81 | |
82 /* Xutil.h contains the declaration: | |
83 * typedef struct _XRegion *Region; | |
84 */ | |
85 | |
86 /* 1 if two BOXs overlap. | |
87 * 0 if two BOXs do not overlap. | |
88 * Remember, x2 and y2 are not in the region | |
89 */ | |
90 #define EXTENTCHECK(r1, r2) \ | |
91 ((r1)->x2 > (r2)->x1 && \ | |
92 (r1)->x1 < (r2)->x2 && \ | |
93 (r1)->y2 > (r2)->y1 && \ | |
94 (r1)->y1 < (r2)->y2) | |
95 | |
96 /* | |
97 * update region extents | |
98 */ | |
99 #define EXTENTS(r,idRect){\ | |
100 if((r)->x1 < (idRect)->extents.x1)\ | |
101 (idRect)->extents.x1 = (r)->x1;\ | |
102 if((r)->y1 < (idRect)->extents.y1)\ | |
103 (idRect)->extents.y1 = (r)->y1;\ | |
104 if((r)->x2 > (idRect)->extents.x2)\ | |
105 (idRect)->extents.x2 = (r)->x2;\ | |
106 if((r)->y2 > (idRect)->extents.y2)\ | |
107 (idRect)->extents.y2 = (r)->y2;\ | |
108 } | |
109 | |
110 /* | |
111 * Check to see if there is enough memory in the present region. | |
112 */ | |
113 #define MEMCHECK(reg, rect, firstrect){\ | |
114 if ((reg)->numRects >= ((reg)->size - 1)){\ | |
115 BoxPtr tmpRect = Xrealloc ((firstrect), \ | |
116 (2 * (sizeof(BOX)) * ((reg)->size))); \ | |
117 if (tmpRect == NULL) \ | |
118 return(0);\ | |
119 (firstrect) = tmpRect; \ | |
120 (reg)->size *= 2;\ | |
121 (rect) = &(firstrect)[(reg)->numRects];\ | |
122 }\ | |
123 } | |
124 | |
125 /* this routine checks to see if the previous rectangle is the same | |
126 * or subsumes the new rectangle to add. | |
127 */ | |
128 | |
129 #define CHECK_PREVIOUS(Reg, R, Rx1, Ry1, Rx2, Ry2)\ | |
130 (!(((Reg)->numRects > 0)&&\ | |
131 ((R-1)->y1 == (Ry1)) &&\ | |
132 ((R-1)->y2 == (Ry2)) &&\ | |
133 ((R-1)->x1 <= (Rx1)) &&\ | |
134 ((R-1)->x2 >= (Rx2)))) | |
135 | |
136 /* add a rectangle to the given Region */ | |
137 #define ADDRECT(reg, r, rx1, ry1, rx2, ry2){\ | |
138 if (((rx1) < (rx2)) && ((ry1) < (ry2)) &&\ | |
139 CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){\ | |
140 (r)->x1 = (rx1);\ | |
141 (r)->y1 = (ry1);\ | |
142 (r)->x2 = (rx2);\ | |
143 (r)->y2 = (ry2);\ | |
144 EXTENTS((r), (reg));\ | |
145 (reg)->numRects++;\ | |
146 (r)++;\ | |
147 }\ | |
148 } | |
149 | |
150 | |
151 | |
152 /* add a rectangle to the given Region */ | |
153 #define ADDRECTNOX(reg, r, rx1, ry1, rx2, ry2){\ | |
154 if ((rx1 < rx2) && (ry1 < ry2) &&\ | |
155 CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){\ | |
156 (r)->x1 = (rx1);\ | |
157 (r)->y1 = (ry1);\ | |
158 (r)->x2 = (rx2);\ | |
159 (r)->y2 = (ry2);\ | |
160 (reg)->numRects++;\ | |
161 (r)++;\ | |
162 }\ | |
163 } | |
164 | |
165 #define EMPTY_REGION(pReg) pReg->numRects = 0 | |
166 | |
167 #define REGION_NOT_EMPTY(pReg) pReg->numRects | |
168 | |
169 #define INBOX(r, x, y) \ | |
170 ( ( ((r).x2 > x)) && \ | |
171 ( ((r).x1 <= x)) && \ | |
172 ( ((r).y2 > y)) && \ | |
173 ( ((r).y1 <= y)) ) | |
174 | |
175 /* | |
176 * number of points to buffer before sending them off | |
177 * to scanlines() : Must be an even number | |
178 */ | |
179 #define NUMPTSTOBUFFER 200 | |
180 | |
181 /* | |
182 * used to allocate buffers for points and link | |
183 * the buffers together | |
184 */ | |
185 typedef struct _POINTBLOCK { | |
186 XPoint pts[NUMPTSTOBUFFER]; | |
187 struct _POINTBLOCK *next; | |
188 } POINTBLOCK; | |
189 | |
190 #endif /* _X11_XREGION_H_ */ |