95
95
#define REGION_END(reg) REGION_BOX(reg, (reg)->data->numRects - 1)
96
96
#define REGION_SZOF(n) (sizeof(RegDataRec) + ((n) * sizeof(BoxRec)))
98
/* Keith recommends weaning the region code of pScreen argument */
99
#define REG_pScreen screenInfo.screens[0]
101
#ifdef NEED_SCREEN_REGIONS
103
#define REGION_CREATE(_pScreen, _rect, _size) \
104
(*(REG_pScreen)->RegionCreate)(_rect, _size)
106
#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
107
(*(REG_pScreen)->RegionInit)(_pReg, _rect, _size)
109
#define REGION_COPY(_pScreen, dst, src) \
110
(*(REG_pScreen)->RegionCopy)(dst, src)
112
#define REGION_DESTROY(_pScreen, _pReg) \
113
(*(REG_pScreen)->RegionDestroy)(_pReg)
115
#define REGION_UNINIT(_pScreen, _pReg) \
116
(*(REG_pScreen)->RegionUninit)(_pReg)
118
#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \
119
(*(REG_pScreen)->Intersect)(newReg, reg1, reg2)
121
#define REGION_UNION(_pScreen, newReg, reg1, reg2) \
122
(*(REG_pScreen)->Union)(newReg, reg1, reg2)
124
#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \
125
(*(REG_pScreen)->Subtract)(newReg, reg1, reg2)
127
#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \
128
(*(REG_pScreen)->Inverse)(newReg, reg1, invRect)
130
#define REGION_RESET(_pScreen, _pReg, _pBox) \
131
(*(REG_pScreen)->RegionReset)(_pReg, _pBox)
133
#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \
134
(*(REG_pScreen)->TranslateRegion)(_pReg, _x, _y)
136
#define RECT_IN_REGION(_pScreen, _pReg, prect) \
137
(*(REG_pScreen)->RectIn)(_pReg, prect)
139
#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \
140
(*(REG_pScreen)->PointInRegion)(_pReg, _x, _y, prect)
142
#define REGION_NOTEMPTY(_pScreen, _pReg) \
143
(*(REG_pScreen)->RegionNotEmpty)(_pReg)
145
#define REGION_EQUAL(_pScreen, _pReg1, _pReg2) \
146
(*(REG_pScreen)->RegionEqual)(_pReg1, _pReg2)
148
#define REGION_BROKEN(_pScreen, _pReg) \
149
(*(REG_pScreen)->RegionBroken)(_pReg)
151
#define REGION_BREAK(_pScreen, _pReg) \
152
(*(REG_pScreen)->RegionBreak)(_pReg)
154
#define REGION_EMPTY(_pScreen, _pReg) \
155
(*(REG_pScreen)->RegionEmpty)(_pReg)
157
#define REGION_EXTENTS(_pScreen, _pReg) \
158
(*(REG_pScreen)->RegionExtents)(_pReg)
160
#define REGION_APPEND(_pScreen, dstrgn, rgn) \
161
(*(REG_pScreen)->RegionAppend)(dstrgn, rgn)
163
#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \
164
(*(REG_pScreen)->RegionValidate)(badreg, pOverlap)
166
#define BITMAP_TO_REGION(_pScreen, pPix) \
167
(*(REG_pScreen)->BitmapToRegion)(pPix)
169
#define RECTS_TO_REGION(_pScreen, nrects, prect, ctype) \
170
(*(REG_pScreen)->RectsToRegion)(nrects, prect, ctype)
172
#else /* !NEED_SCREEN_REGIONS */
174
/* Reference _pScreen macro argument and check its type */
175
#define REGION_SCREEN(_pScreen) (void)((REG_pScreen)->myNum)
177
#define REGION_CREATE(_pScreen, _rect, _size) \
178
(REGION_SCREEN(_pScreen), miRegionCreate(_rect, _size))
180
#define REGION_COPY(_pScreen, dst, src) \
181
(REGION_SCREEN(_pScreen), miRegionCopy(dst, src))
183
#define REGION_DESTROY(_pScreen, _pReg) \
184
(REGION_SCREEN(_pScreen), miRegionDestroy(_pReg))
186
#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \
187
(REGION_SCREEN(_pScreen), miIntersect(newReg, reg1, reg2))
189
#define REGION_UNION(_pScreen, newReg, reg1, reg2) \
190
(REGION_SCREEN(_pScreen), miUnion(newReg, reg1, reg2))
192
#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \
193
(REGION_SCREEN(_pScreen), miSubtract(newReg, reg1, reg2))
195
#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \
196
(REGION_SCREEN(_pScreen), miInverse(newReg, reg1, invRect))
198
#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \
199
(REGION_SCREEN(_pScreen), miTranslateRegion(_pReg, _x, _y))
201
#define RECT_IN_REGION(_pScreen, _pReg, prect) \
202
(REGION_SCREEN(_pScreen), miRectIn(_pReg, prect))
204
#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \
205
(REGION_SCREEN(_pScreen), miPointInRegion(_pReg, _x, _y, prect))
207
#define REGION_APPEND(_pScreen, dstrgn, rgn) \
208
(REGION_SCREEN(_pScreen), miRegionAppend(dstrgn, rgn))
210
#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \
211
(REGION_SCREEN(_pScreen), miRegionValidate(badreg, pOverlap))
98
#define REGION_CREATE(_pScreen, _rect, _size) \
99
miRegionCreate(_rect, _size)
101
#define REGION_COPY(_pScreen, dst, src) \
102
miRegionCopy(dst, src)
104
#define REGION_DESTROY(_pScreen, _pReg) \
105
miRegionDestroy(_pReg)
107
#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \
108
miIntersect(newReg, reg1, reg2)
110
#define REGION_UNION(_pScreen, newReg, reg1, reg2) \
111
miUnion(newReg, reg1, reg2)
113
#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \
114
miSubtract(newReg, reg1, reg2)
116
#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \
117
miInverse(newReg, reg1, invRect)
119
#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \
120
miTranslateRegion(_pReg, _x, _y)
122
#define RECT_IN_REGION(_pScreen, _pReg, prect) \
123
miRectIn(_pReg, prect)
125
#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \
126
miPointInRegion(_pReg, _x, _y, prect)
128
#define REGION_APPEND(_pScreen, dstrgn, rgn) \
129
miRegionAppend(dstrgn, rgn)
131
#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \
132
miRegionValidate(badreg, pOverlap)
213
134
#define BITMAP_TO_REGION(_pScreen, pPix) \
214
135
(*(_pScreen)->BitmapToRegion)(pPix) /* no mi version?! */
216
137
#define RECTS_TO_REGION(_pScreen, nrects, prect, ctype) \
217
(REGION_SCREEN(_pScreen), miRectsToRegion(nrects, prect, ctype))
138
miRectsToRegion(nrects, prect, ctype)
219
140
#define REGION_EQUAL(_pScreen, _pReg1, _pReg2) \
220
(REGION_SCREEN(_pScreen), miRegionEqual(_pReg1, _pReg2))
141
miRegionEqual(_pReg1, _pReg2)
222
143
#define REGION_BREAK(_pScreen, _pReg) \
223
(REGION_SCREEN(_pScreen), miRegionBreak(_pReg))
225
146
#ifdef DONT_INLINE_REGION_OPS
227
148
#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
228
(REGION_SCREEN(_pScreen), miRegionInit(_pReg, _rect, _size))
149
miRegionInit(_pReg, _rect, _size)
230
151
#define REGION_UNINIT(_pScreen, _pReg) \
231
(REGION_SCREEN(_pScreen), miRegionUninit(_pReg))
152
miRegionUninit(_pReg)
233
154
#define REGION_RESET(_pScreen, _pReg, _pBox) \
234
(REGION_SCREEN(_pScreen), miRegionReset(_pReg, _pBox))
155
miRegionReset(_pReg, _pBox)
236
157
#define REGION_NOTEMPTY(_pScreen, _pReg) \
237
(REGION_SCREEN(_pScreen), miRegionNotEmpty(_pReg))
158
miRegionNotEmpty(_pReg)
239
160
#define REGION_BROKEN(_pScreen, _pReg) \
240
(REGION_SCREEN(_pScreen), miRegionBroken(_pReg))
161
miRegionBroken(_pReg)
242
163
#define REGION_EMPTY(_pScreen, _pReg) \
243
(REGION_SCREEN(_pScreen), miRegionEmpty(_pReg))
245
166
#define REGION_EXTENTS(_pScreen, _pReg) \
246
(REGION_SCREEN(_pScreen), miRegionExtents(_pReg))
167
miRegionExtents(_pReg)
248
169
#else /* inline certain simple region ops for performance */
250
171
#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
252
REGION_SCREEN(_pScreen); \
255
175
(_pReg)->extents = *(_rect); \