deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/***********************************************************
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncCopyright 1987, 1998 The Open Group
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncPermission to use, copy, modify, distribute, and sell this software and its
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncdocumentation for any purpose is hereby granted without fee, provided that
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncthe above copyright notice appear in all copies and that both that
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynccopyright notice and this permission notice appear in supporting
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncdocumentation.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncThe above copyright notice and this permission notice shall be included in
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncall copies or substantial portions of the Software.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncExcept as contained in this notice, the name of The Open Group shall not be
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncused in advertising or otherwise to promote the sale, use or other dealings
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncin this Software without prior written authorization from The Open Group.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync All Rights Reserved
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncPermission to use, copy, modify, and distribute this software and its
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncdocumentation for any purpose and without fee is hereby granted,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncprovided that the above copyright notice appear in all copies and that
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncboth that copyright notice and this permission notice appear in
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncsupporting documentation, and that the name of Digital not be
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncused in advertising or publicity pertaining to distribution of the
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncsoftware without specific, written prior permission.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncSOFTWARE.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync******************************************************************/
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifndef REGIONSTRUCT_H
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGIONSTRUCT_H
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _Region RegionRec, *RegionPtr;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include "miscstruct.h"
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* Return values from RectIn() */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define rgnOUT 0
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define rgnIN 1
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define rgnPART 2
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define NullRegion ((RegionPtr)0)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/*
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * clip region
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _RegData {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync long size;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync long numRects;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* BoxRec rects[size]; in memory but not explicitly declared */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync} RegDataRec, *RegDataPtr;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncstruct _Region {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync BoxRec extents;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegDataPtr data;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync};
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern BoxRec miEmptyBox;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern RegDataRec miEmptyData;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern RegDataRec miBrokenData;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_NIL(reg) ((reg)->data && !(reg)->data->numRects)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* not a region */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_NAR(reg) ((reg)->data == &miBrokenData)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_NUM_RECTS(reg) ((reg)->data ? (reg)->data->numRects : 1)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_SIZE(reg) ((reg)->data ? (reg)->data->size : 0)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_RECTS(reg) ((reg)->data ? (BoxPtr)((reg)->data + 1) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync : &(reg)->extents)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_BOXPTR(reg) ((BoxPtr)((reg)->data + 1))
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_BOX(reg,i) (&REGION_BOXPTR(reg)[i])
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_TOP(reg) REGION_BOX(reg, (reg)->data->numRects)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_END(reg) REGION_BOX(reg, (reg)->data->numRects - 1)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_SZOF(n) (sizeof(RegDataRec) + ((n) * sizeof(BoxRec)))
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_CREATE(_pScreen, _rect, _size) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionCreate(_rect, _size)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_COPY(_pScreen, dst, src) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionCopy(dst, src)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_DESTROY(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionDestroy(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miIntersect(newReg, reg1, reg2)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_UNION(_pScreen, newReg, reg1, reg2) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miUnion(newReg, reg1, reg2)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miSubtract(newReg, reg1, reg2)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miInverse(newReg, reg1, invRect)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miTranslateRegion(_pReg, _x, _y)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define RECT_IN_REGION(_pScreen, _pReg, prect) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRectIn(_pReg, prect)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miPointInRegion(_pReg, _x, _y, prect)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_APPEND(_pScreen, dstrgn, rgn) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionAppend(dstrgn, rgn)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionValidate(badreg, pOverlap)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define BITMAP_TO_REGION(_pScreen, pPix) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (*(_pScreen)->BitmapToRegion)(pPix) /* no mi version?! */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define RECTS_TO_REGION(_pScreen, nrects, prect, ctype) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRectsToRegion(nrects, prect, ctype)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_EQUAL(_pScreen, _pReg1, _pReg2) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionEqual(_pReg1, _pReg2)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_BREAK(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionBreak(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef DONT_INLINE_REGION_OPS
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionInit(_pReg, _rect, _size)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_UNINIT(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionUninit(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_RESET(_pScreen, _pReg, _pBox) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionReset(_pReg, _pBox)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_NOTEMPTY(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionNotEmpty(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_BROKEN(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionBroken(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_EMPTY(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionEmpty(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_EXTENTS(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync miRegionExtents(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#else /* inline certain simple region ops for performance */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync{ \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync if (_rect) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->extents = *(_rect); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data = (RegDataPtr)NULL; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync } \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync else \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->extents = miEmptyBox; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync if (((_size) > 1) && ((_pReg)->data = \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (RegDataPtr)xalloc(REGION_SZOF(_size)))) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync { \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data->size = (_size); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data->numRects = 0; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync } \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync else \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data = &miEmptyData; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync } \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync }
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_UNINIT(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync{ \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync if ((_pReg)->data && (_pReg)->data->size) { \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync xfree((_pReg)->data); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data = NULL; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync } \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync}
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_RESET(_pScreen, _pReg, _pBox) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync{ \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->extents = *(_pBox); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync REGION_UNINIT(_pScreen, _pReg); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data = (RegDataPtr)NULL; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync}
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_NOTEMPTY(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync !REGION_NIL(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_BROKEN(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync REGION_NAR(_pReg)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_EMPTY(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync{ \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync REGION_UNINIT(_pScreen, _pReg); \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->extents.x2 = (_pReg)->extents.x1; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->extents.y2 = (_pReg)->extents.y1; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data = &miEmptyData; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync}
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_EXTENTS(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (&(_pReg)->extents)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_NULL(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync{ \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->extents = miEmptyBox; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync (_pReg)->data = &miEmptyData; \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync}
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif /* DONT_INLINE_REGION_OPS */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifndef REGION_NULL
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define REGION_NULL(_pScreen, _pReg) \
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync REGION_INIT(_pScreen, _pReg, NullBox, 1)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* moved from mi.h */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern RegionPtr miRegionCreate(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync BoxPtr /*rect*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*size*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern void miRegionInit(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync BoxPtr /*rect*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*size*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern void miRegionDestroy(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern void miRegionUninit(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miRegionCopy(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*dst*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*src*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miIntersect(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*newReg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*reg1*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*reg2*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miUnion(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*newReg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*reg1*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*reg2*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miRegionAppend(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*dstrgn*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*rgn*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miRegionValidate(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*badreg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool * /*pOverlap*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern RegionPtr miRectsToRegion(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*nrects*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync xRectanglePtr /*prect*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*ctype*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miSubtract(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*regD*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*regM*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*regS*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miInverse(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*newReg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*reg1*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync BoxPtr /*invRect*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern int miRectIn(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*region*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync BoxPtr /*prect*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern void miTranslateRegion(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*x*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*y*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern void miRegionReset(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync BoxPtr /*pBox*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miRegionBreak(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miPointInRegion(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*x*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /*y*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync BoxPtr /*box*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miRegionEqual(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg1*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg2*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool miRegionNotEmpty(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern void miRegionEmpty(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern BoxPtr miRegionExtents(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync RegionPtr /*pReg*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif /* REGIONSTRUCT_H */