From 63f1fff8fe1e7f94ebc0a72df773c6f77531f7a4 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Wed, 16 Mar 2016 11:11:43 +0100 Subject: Rename region macros to eliminate screen argument This is a huge mechanical patch and a few small fixups required to finish the job. They were reviewed separately, but because the server does not build without both pieces, I've merged them together at this time. The mechanical changes were performed by running the included 'fix-region' script over the whole nx-X11/programs/Xserver tree: $ cd nx-X11/programs/Xserver && ( git ls-files | grep -v '^fix-' | xargs ./fix-region; ) And then, the white space errors in the resulting patch were fixed using the provided fix-patch-whitespace script. $ sh ./fix-patch-whitespace Thanks to Jamey Sharp for the mighty fine sed-generating sed script. v1: Keith Packard (X.Org xserver commit: 2dc138922b7588515d5f2447e4b9dcdc0bef15e0) v2: Mike Gabriel (apply fix-region script to nx-libs) --- nx-X11/programs/Xserver/include/regionstr.h | 114 ++++++++++++++-------------- 1 file changed, 57 insertions(+), 57 deletions(-) (limited to 'nx-X11/programs/Xserver/include') diff --git a/nx-X11/programs/Xserver/include/regionstr.h b/nx-X11/programs/Xserver/include/regionstr.h index cf41170a6..b1eb100a5 100644 --- a/nx-X11/programs/Xserver/include/regionstr.h +++ b/nx-X11/programs/Xserver/include/regionstr.h @@ -103,73 +103,73 @@ extern RegDataRec miBrokenData; #ifdef NEED_SCREEN_REGIONS -#define REGION_CREATE(_pScreen, _rect, _size) \ +#define RegionCreate(_rect, _size) \ (*(REG_pScreen)->RegionCreate)(_rect, _size) -#define REGION_INIT(_pScreen, _pReg, _rect, _size) \ +#define RegionInit(_pReg, _rect, _size) \ (*(REG_pScreen)->RegionInit)(_pReg, _rect, _size) -#define REGION_COPY(_pScreen, dst, src) \ +#define RegionCopy(dst, src) \ (*(REG_pScreen)->RegionCopy)(dst, src) -#define REGION_DESTROY(_pScreen, _pReg) \ +#define RegionDestroy(_pReg) \ (*(REG_pScreen)->RegionDestroy)(_pReg) -#define REGION_UNINIT(_pScreen, _pReg) \ +#define RegionUninit(_pReg) \ (*(REG_pScreen)->RegionUninit)(_pReg) -#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \ +#define RegionIntersect(newReg, reg1, reg2) \ (*(REG_pScreen)->Intersect)(newReg, reg1, reg2) -#define REGION_UNION(_pScreen, newReg, reg1, reg2) \ +#define RegionUnion(newReg, reg1, reg2) \ (*(REG_pScreen)->Union)(newReg, reg1, reg2) -#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \ +#define RegionSubtract(newReg, reg1, reg2) \ (*(REG_pScreen)->Subtract)(newReg, reg1, reg2) -#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \ +#define RegionInverse(newReg, reg1, invRect) \ (*(REG_pScreen)->Inverse)(newReg, reg1, invRect) -#define REGION_RESET(_pScreen, _pReg, _pBox) \ +#define RegionReset(_pReg, _pBox) \ (*(REG_pScreen)->RegionReset)(_pReg, _pBox) -#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \ +#define RegionTranslate(_pReg, _x, _y) \ (*(REG_pScreen)->TranslateRegion)(_pReg, _x, _y) -#define RECT_IN_REGION(_pScreen, _pReg, prect) \ +#define RegionContainsRect(_pReg, prect) \ (*(REG_pScreen)->RectIn)(_pReg, prect) -#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \ +#define RegionContainsPoint(_pReg, _x, _y, prect) \ (*(REG_pScreen)->PointInRegion)(_pReg, _x, _y, prect) -#define REGION_NOTEMPTY(_pScreen, _pReg) \ +#define RegionNotEmpty(_pReg) \ (*(REG_pScreen)->RegionNotEmpty)(_pReg) -#define REGION_EQUAL(_pScreen, _pReg1, _pReg2) \ +#define RegionEqual(_pReg1, _pReg2) \ (*(REG_pScreen)->RegionEqual)(_pReg1, _pReg2) -#define REGION_BROKEN(_pScreen, _pReg) \ +#define RegionBroken(_pReg) \ (*(REG_pScreen)->RegionBroken)(_pReg) -#define REGION_BREAK(_pScreen, _pReg) \ +#define RegionBreak(_pReg) \ (*(REG_pScreen)->RegionBreak)(_pReg) -#define REGION_EMPTY(_pScreen, _pReg) \ +#define RegionEmpty(_pReg) \ (*(REG_pScreen)->RegionEmpty)(_pReg) -#define REGION_EXTENTS(_pScreen, _pReg) \ +#define RegionExtents(_pReg) \ (*(REG_pScreen)->RegionExtents)(_pReg) -#define REGION_APPEND(_pScreen, dstrgn, rgn) \ +#define RegionAppend(dstrgn, rgn) \ (*(REG_pScreen)->RegionAppend)(dstrgn, rgn) -#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \ +#define RegionValidate(badreg, pOverlap) \ (*(REG_pScreen)->RegionValidate)(badreg, pOverlap) #define BITMAP_TO_REGION(_pScreen, pPix) \ (*(REG_pScreen)->BitmapToRegion)(pPix) -#define RECTS_TO_REGION(_pScreen, nrects, prect, ctype) \ +#define RegionFromRects(nrects, prect, ctype) \ (*(REG_pScreen)->RectsToRegion)(nrects, prect, ctype) #else /* !NEED_SCREEN_REGIONS */ @@ -177,80 +177,80 @@ extern RegDataRec miBrokenData; /* Reference _pScreen macro argument and check its type */ #define REGION_SCREEN(_pScreen) (void)((REG_pScreen)->myNum) -#define REGION_CREATE(_pScreen, _rect, _size) \ +#define RegionCreate(_rect, _size) \ (REGION_SCREEN(_pScreen), miRegionCreate(_rect, _size)) -#define REGION_COPY(_pScreen, dst, src) \ +#define RegionCopy(dst, src) \ (REGION_SCREEN(_pScreen), miRegionCopy(dst, src)) -#define REGION_DESTROY(_pScreen, _pReg) \ +#define RegionDestroy(_pReg) \ (REGION_SCREEN(_pScreen), miRegionDestroy(_pReg)) -#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \ +#define RegionIntersect(newReg, reg1, reg2) \ (REGION_SCREEN(_pScreen), miIntersect(newReg, reg1, reg2)) -#define REGION_UNION(_pScreen, newReg, reg1, reg2) \ +#define RegionUnion(newReg, reg1, reg2) \ (REGION_SCREEN(_pScreen), miUnion(newReg, reg1, reg2)) -#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \ +#define RegionSubtract(newReg, reg1, reg2) \ (REGION_SCREEN(_pScreen), miSubtract(newReg, reg1, reg2)) -#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \ +#define RegionInverse(newReg, reg1, invRect) \ (REGION_SCREEN(_pScreen), miInverse(newReg, reg1, invRect)) -#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \ +#define RegionTranslate(_pReg, _x, _y) \ (REGION_SCREEN(_pScreen), miTranslateRegion(_pReg, _x, _y)) -#define RECT_IN_REGION(_pScreen, _pReg, prect) \ +#define RegionContainsRect(_pReg, prect) \ (REGION_SCREEN(_pScreen), miRectIn(_pReg, prect)) -#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \ +#define RegionContainsPoint(_pReg, _x, _y, prect) \ (REGION_SCREEN(_pScreen), miPointInRegion(_pReg, _x, _y, prect)) -#define REGION_APPEND(_pScreen, dstrgn, rgn) \ +#define RegionAppend(dstrgn, rgn) \ (REGION_SCREEN(_pScreen), miRegionAppend(dstrgn, rgn)) -#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \ +#define RegionValidate(badreg, pOverlap) \ (REGION_SCREEN(_pScreen), miRegionValidate(badreg, pOverlap)) #define BITMAP_TO_REGION(_pScreen, pPix) \ (*(_pScreen)->BitmapToRegion)(pPix) /* no mi version?! */ -#define RECTS_TO_REGION(_pScreen, nrects, prect, ctype) \ +#define RegionFromRects(nrects, prect, ctype) \ (REGION_SCREEN(_pScreen), miRectsToRegion(nrects, prect, ctype)) -#define REGION_EQUAL(_pScreen, _pReg1, _pReg2) \ +#define RegionEqual(_pReg1, _pReg2) \ (REGION_SCREEN(_pScreen), miRegionEqual(_pReg1, _pReg2)) -#define REGION_BREAK(_pScreen, _pReg) \ +#define RegionBreak(_pReg) \ (REGION_SCREEN(_pScreen), miRegionBreak(_pReg)) #ifdef DONT_INLINE_REGION_OPS -#define REGION_INIT(_pScreen, _pReg, _rect, _size) \ +#define RegionInit(_pReg, _rect, _size) \ (REGION_SCREEN(_pScreen), miRegionInit(_pReg, _rect, _size)) -#define REGION_UNINIT(_pScreen, _pReg) \ +#define RegionUninit(_pReg) \ (REGION_SCREEN(_pScreen), miRegionUninit(_pReg)) -#define REGION_RESET(_pScreen, _pReg, _pBox) \ +#define RegionReset(_pReg, _pBox) \ (REGION_SCREEN(_pScreen), miRegionReset(_pReg, _pBox)) -#define REGION_NOTEMPTY(_pScreen, _pReg) \ +#define RegionNotEmpty(_pReg) \ (REGION_SCREEN(_pScreen), miRegionNotEmpty(_pReg)) -#define REGION_BROKEN(_pScreen, _pReg) \ +#define RegionBroken(_pReg) \ (REGION_SCREEN(_pScreen), miRegionBroken(_pReg)) -#define REGION_EMPTY(_pScreen, _pReg) \ +#define RegionEmpty(_pReg) \ (REGION_SCREEN(_pScreen), miRegionEmpty(_pReg)) -#define REGION_EXTENTS(_pScreen, _pReg) \ +#define RegionExtents(_pReg) \ (REGION_SCREEN(_pScreen), miRegionExtents(_pReg)) #else /* inline certain simple region ops for performance */ -#define REGION_INIT(_pScreen, _pReg, _rect, _size) \ +#define RegionInit(_pReg, _rect, _size) \ { \ REGION_SCREEN(_pScreen); \ if (_rect) \ @@ -274,7 +274,7 @@ extern RegDataRec miBrokenData; } -#define REGION_UNINIT(_pScreen, _pReg) \ +#define RegionUninit(_pReg) \ { \ REGION_SCREEN(_pScreen); \ if ((_pReg)->data && (_pReg)->data->size) { \ @@ -283,32 +283,32 @@ extern RegDataRec miBrokenData; } \ } -#define REGION_RESET(_pScreen, _pReg, _pBox) \ +#define RegionReset(_pReg, _pBox) \ { \ REGION_SCREEN(_pScreen); \ (_pReg)->extents = *(_pBox); \ - REGION_UNINIT(_pScreen, _pReg); \ + RegionUninit(_pReg); \ (_pReg)->data = (RegDataPtr)NULL; \ } -#define REGION_NOTEMPTY(_pScreen, _pReg) \ +#define RegionNotEmpty(_pReg) \ (REGION_SCREEN(_pScreen), !REGION_NIL(_pReg)) -#define REGION_BROKEN(_pScreen, _pReg) \ +#define RegionBroken(_pReg) \ (REGION_SCREEN(_pScreen), REGION_NAR(_pReg)) -#define REGION_EMPTY(_pScreen, _pReg) \ +#define RegionEmpty(_pReg) \ { \ - REGION_UNINIT(_pScreen, _pReg); \ + RegionUninit(_pReg); \ (_pReg)->extents.x2 = (_pReg)->extents.x1; \ (_pReg)->extents.y2 = (_pReg)->extents.y1; \ (_pReg)->data = &miEmptyData; \ } -#define REGION_EXTENTS(_pScreen, _pReg) \ +#define RegionExtents(_pReg) \ (REGION_SCREEN(_pScreen), &(_pReg)->extents) -#define REGION_NULL(_pScreen, _pReg) \ +#define RegionNull(_pReg) \ { \ REGION_SCREEN(_pScreen); \ (_pReg)->extents = miEmptyBox; \ @@ -319,9 +319,9 @@ extern RegDataRec miBrokenData; #endif /* NEED_SCREEN_REGIONS */ -#ifndef REGION_NULL -#define REGION_NULL(_pScreen, _pReg) \ - REGION_INIT(_pScreen, _pReg, NullBox, 1) +#ifndef RegionNull +#define RegionNull(_pReg) \ + RegionInit(_pReg, NullBox, 1) #endif /* moved from mi.h */ -- cgit v1.2.3 From 4a8d6eca395e1ec0490e20e7971177f688da18ec Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Fri, 18 Mar 2016 05:11:40 +0100 Subject: Change region implementation from macros to inline functions. This makes all of the previous macros into inline functions and also turns all of the direct calls to pixman region code into inline functions as well. v1: Keith Packard v2: Mike Gabriel --- nx-X11/programs/Xserver/include/misc.h | 2 +- nx-X11/programs/Xserver/include/miscstruct.h | 6 +- nx-X11/programs/Xserver/include/regionstr.h | 399 ++++++++++++--------------- 3 files changed, 183 insertions(+), 224 deletions(-) (limited to 'nx-X11/programs/Xserver/include') diff --git a/nx-X11/programs/Xserver/include/misc.h b/nx-X11/programs/Xserver/include/misc.h index e6bc1019d..5f30823fa 100644 --- a/nx-X11/programs/Xserver/include/misc.h +++ b/nx-X11/programs/Xserver/include/misc.h @@ -295,7 +295,7 @@ extern int Ones( unsigned long /*mask*/); typedef struct _xPoint *DDXPointPtr; -typedef struct _Box *BoxPtr; +typedef struct pixman_box16 *BoxPtr; typedef struct _xEvent *xEventPtr; typedef struct _xRectangle *xRectanglePtr; typedef struct _GrabRec *GrabPtr; diff --git a/nx-X11/programs/Xserver/include/miscstruct.h b/nx-X11/programs/Xserver/include/miscstruct.h index 7df9240c9..7b1f8047b 100644 --- a/nx-X11/programs/Xserver/include/miscstruct.h +++ b/nx-X11/programs/Xserver/include/miscstruct.h @@ -50,15 +50,15 @@ SOFTWARE. #ifndef MISCSTRUCT_H #define MISCSTRUCT_H 1 +#include + #include "misc.h" #include #include "gc.h" typedef xPoint DDXPointRec; -typedef struct _Box { - short x1, y1, x2, y2; -} BoxRec; +typedef struct pixman_box16 BoxRec; typedef union _DevUnion { void * ptr; diff --git a/nx-X11/programs/Xserver/include/regionstr.h b/nx-X11/programs/Xserver/include/regionstr.h index b1eb100a5..c61acc003 100644 --- a/nx-X11/programs/Xserver/include/regionstr.h +++ b/nx-X11/programs/Xserver/include/regionstr.h @@ -51,7 +51,9 @@ SOFTWARE. #ifndef REGIONSTRUCT_H #define REGIONSTRUCT_H -typedef struct _Region RegionRec, *RegionPtr; +#include + +typedef struct pixman_region16 RegionRec, *RegionPtr; #include #include @@ -70,261 +72,218 @@ typedef struct _Region RegionRec, *RegionPtr; * clip region */ -typedef struct _RegData { - long size; - long numRects; -/* BoxRec rects[size]; in memory but not explicitly declared */ -} RegDataRec, *RegDataPtr; - -struct _Region { - BoxRec extents; - RegDataPtr data; -}; +typedef struct pixman_region16_data RegDataRec, *RegDataPtr; extern BoxRec miEmptyBox; extern RegDataRec miEmptyData; extern RegDataRec miBrokenData; -#define REGION_NIL(reg) ((reg)->data && !(reg)->data->numRects) -/* not a region */ -#define REGION_NAR(reg) ((reg)->data == &miBrokenData) -#define REGION_NUM_RECTS(reg) ((reg)->data ? (reg)->data->numRects : 1) -#define REGION_SIZE(reg) ((reg)->data ? (reg)->data->size : 0) -#define REGION_RECTS(reg) ((reg)->data ? (BoxPtr)((reg)->data + 1) \ - : &(reg)->extents) -#define REGION_BOXPTR(reg) ((BoxPtr)((reg)->data + 1)) -#define REGION_BOX(reg,i) (®ION_BOXPTR(reg)[i]) -#define REGION_TOP(reg) REGION_BOX(reg, (reg)->data->numRects) -#define REGION_END(reg) REGION_BOX(reg, (reg)->data->numRects - 1) -#define REGION_SZOF(n) (n < ((INT_MAX - sizeof(RegDataRec)) / sizeof(BoxRec)) ? sizeof(RegDataRec) + ((n) * sizeof(BoxRec)) : 0) - -/* Keith recommends weaning the region code of pScreen argument */ -#define REG_pScreen screenInfo.screens[0] - -#ifdef NEED_SCREEN_REGIONS - -#define RegionCreate(_rect, _size) \ - (*(REG_pScreen)->RegionCreate)(_rect, _size) - -#define RegionInit(_pReg, _rect, _size) \ - (*(REG_pScreen)->RegionInit)(_pReg, _rect, _size) - -#define RegionCopy(dst, src) \ - (*(REG_pScreen)->RegionCopy)(dst, src) - -#define RegionDestroy(_pReg) \ - (*(REG_pScreen)->RegionDestroy)(_pReg) - -#define RegionUninit(_pReg) \ - (*(REG_pScreen)->RegionUninit)(_pReg) - -#define RegionIntersect(newReg, reg1, reg2) \ - (*(REG_pScreen)->Intersect)(newReg, reg1, reg2) - -#define RegionUnion(newReg, reg1, reg2) \ - (*(REG_pScreen)->Union)(newReg, reg1, reg2) - -#define RegionSubtract(newReg, reg1, reg2) \ - (*(REG_pScreen)->Subtract)(newReg, reg1, reg2) - -#define RegionInverse(newReg, reg1, invRect) \ - (*(REG_pScreen)->Inverse)(newReg, reg1, invRect) - -#define RegionReset(_pReg, _pBox) \ - (*(REG_pScreen)->RegionReset)(_pReg, _pBox) - -#define RegionTranslate(_pReg, _x, _y) \ - (*(REG_pScreen)->TranslateRegion)(_pReg, _x, _y) - -#define RegionContainsRect(_pReg, prect) \ - (*(REG_pScreen)->RectIn)(_pReg, prect) - -#define RegionContainsPoint(_pReg, _x, _y, prect) \ - (*(REG_pScreen)->PointInRegion)(_pReg, _x, _y, prect) - -#define RegionNotEmpty(_pReg) \ - (*(REG_pScreen)->RegionNotEmpty)(_pReg) - -#define RegionEqual(_pReg1, _pReg2) \ - (*(REG_pScreen)->RegionEqual)(_pReg1, _pReg2) - -#define RegionBroken(_pReg) \ - (*(REG_pScreen)->RegionBroken)(_pReg) - -#define RegionBreak(_pReg) \ - (*(REG_pScreen)->RegionBreak)(_pReg) - -#define RegionEmpty(_pReg) \ - (*(REG_pScreen)->RegionEmpty)(_pReg) - -#define RegionExtents(_pReg) \ - (*(REG_pScreen)->RegionExtents)(_pReg) - -#define RegionAppend(dstrgn, rgn) \ - (*(REG_pScreen)->RegionAppend)(dstrgn, rgn) - -#define RegionValidate(badreg, pOverlap) \ - (*(REG_pScreen)->RegionValidate)(badreg, pOverlap) - -#define BITMAP_TO_REGION(_pScreen, pPix) \ - (*(REG_pScreen)->BitmapToRegion)(pPix) - -#define RegionFromRects(nrects, prect, ctype) \ - (*(REG_pScreen)->RectsToRegion)(nrects, prect, ctype) - -#else /* !NEED_SCREEN_REGIONS */ - -/* Reference _pScreen macro argument and check its type */ -#define REGION_SCREEN(_pScreen) (void)((REG_pScreen)->myNum) - -#define RegionCreate(_rect, _size) \ - (REGION_SCREEN(_pScreen), miRegionCreate(_rect, _size)) - -#define RegionCopy(dst, src) \ - (REGION_SCREEN(_pScreen), miRegionCopy(dst, src)) - -#define RegionDestroy(_pReg) \ - (REGION_SCREEN(_pScreen), miRegionDestroy(_pReg)) - -#define RegionIntersect(newReg, reg1, reg2) \ - (REGION_SCREEN(_pScreen), miIntersect(newReg, reg1, reg2)) - -#define RegionUnion(newReg, reg1, reg2) \ - (REGION_SCREEN(_pScreen), miUnion(newReg, reg1, reg2)) - -#define RegionSubtract(newReg, reg1, reg2) \ - (REGION_SCREEN(_pScreen), miSubtract(newReg, reg1, reg2)) - -#define RegionInverse(newReg, reg1, invRect) \ - (REGION_SCREEN(_pScreen), miInverse(newReg, reg1, invRect)) - -#define RegionTranslate(_pReg, _x, _y) \ - (REGION_SCREEN(_pScreen), miTranslateRegion(_pReg, _x, _y)) - -#define RegionContainsRect(_pReg, prect) \ - (REGION_SCREEN(_pScreen), miRectIn(_pReg, prect)) - -#define RegionContainsPoint(_pReg, _x, _y, prect) \ - (REGION_SCREEN(_pScreen), miPointInRegion(_pReg, _x, _y, prect)) - -#define RegionAppend(dstrgn, rgn) \ - (REGION_SCREEN(_pScreen), miRegionAppend(dstrgn, rgn)) +static inline Bool RegionNil(RegionPtr reg) { + return ((reg)->data && !(reg)->data->numRects); +} -#define RegionValidate(badreg, pOverlap) \ - (REGION_SCREEN(_pScreen), miRegionValidate(badreg, pOverlap)) +static inline Bool RegionNar(RegionPtr reg) { + return ((reg)->data == &miBrokenData); +} -#define BITMAP_TO_REGION(_pScreen, pPix) \ - (*(_pScreen)->BitmapToRegion)(pPix) /* no mi version?! */ +static inline int RegionNumRects(RegionPtr reg) { + return ((reg)->data ? (reg)->data->numRects : 1); +} -#define RegionFromRects(nrects, prect, ctype) \ - (REGION_SCREEN(_pScreen), miRectsToRegion(nrects, prect, ctype)) +static inline int RegionSize(RegionPtr reg) { + return ((reg)->data ? (reg)->data->size : 0); +} -#define RegionEqual(_pReg1, _pReg2) \ - (REGION_SCREEN(_pScreen), miRegionEqual(_pReg1, _pReg2)) +static inline BoxPtr RegionRects(RegionPtr reg) { + return ((reg)->data ? (BoxPtr)((reg)->data + 1) : &(reg)->extents); +} -#define RegionBreak(_pReg) \ - (REGION_SCREEN(_pScreen), miRegionBreak(_pReg)) +static inline BoxPtr RegionBoxptr(RegionPtr reg) { + return ((BoxPtr)((reg)->data + 1)); +} -#ifdef DONT_INLINE_REGION_OPS +static inline BoxPtr RegionBox(RegionPtr reg, int i) { + return (&RegionBoxptr(reg)[i]); +} -#define RegionInit(_pReg, _rect, _size) \ - (REGION_SCREEN(_pScreen), miRegionInit(_pReg, _rect, _size)) +static inline BoxPtr RegionTop(RegionPtr reg) { + return RegionBox(reg, (reg)->data->numRects); +} -#define RegionUninit(_pReg) \ - (REGION_SCREEN(_pScreen), miRegionUninit(_pReg)) +static inline BoxPtr RegionEnd(RegionPtr reg) { + return RegionBox(reg, (reg)->data->numRects - 1); +} -#define RegionReset(_pReg, _pBox) \ - (REGION_SCREEN(_pScreen), miRegionReset(_pReg, _pBox)) +static inline size_t RegionSizeof(int n) { + return (sizeof(RegDataRec) + ((n) * sizeof(BoxRec))); +} -#define RegionNotEmpty(_pReg) \ - (REGION_SCREEN(_pScreen), miRegionNotEmpty(_pReg)) +static inline void RegionInit(RegionPtr _pReg, BoxPtr _rect, int _size) +{ + if ((_rect) != NULL) + { + (_pReg)->extents = *(_rect); + (_pReg)->data = (RegDataPtr)NULL; + } + else + { + (_pReg)->extents = miEmptyBox; + if (((_size) > 1) && ((_pReg)->data = + (RegDataPtr)malloc(RegionSizeof(_size)))) + { + (_pReg)->data->size = (_size); + (_pReg)->data->numRects = 0; + } + else + (_pReg)->data = &miEmptyData; + } +} -#define RegionBroken(_pReg) \ - (REGION_SCREEN(_pScreen), miRegionBroken(_pReg)) +static inline void RegionUninit(RegionPtr _pReg) +{ + if ((_pReg)->data && (_pReg)->data->size) { + free((_pReg)->data); + (_pReg)->data = NULL; + } +} -#define RegionEmpty(_pReg) \ - (REGION_SCREEN(_pScreen), miRegionEmpty(_pReg)) +static inline void RegionReset(RegionPtr _pReg, BoxPtr _pBox) +{ + (_pReg)->extents = *(_pBox); + RegionUninit(_pReg); + (_pReg)->data = (RegDataPtr)NULL; +} -#define RegionExtents(_pReg) \ - (REGION_SCREEN(_pScreen), miRegionExtents(_pReg)) +static inline Bool RegionNotEmpty(RegionPtr _pReg) { + return !RegionNil(_pReg); +} -#else /* inline certain simple region ops for performance */ +static inline Bool RegionBroken(RegionPtr _pReg) { + return RegionNar(_pReg); +} -#define RegionInit(_pReg, _rect, _size) \ -{ \ - REGION_SCREEN(_pScreen); \ - if (_rect) \ - { \ - (_pReg)->extents = *(_rect); \ - (_pReg)->data = (RegDataPtr)NULL; \ - } \ - else \ - { \ - size_t rgnSize; \ - (_pReg)->extents = miEmptyBox; \ - if (((_size) > 1) && ((rgnSize = REGION_SZOF(_size)) > 0) && \ - ((_pReg)->data = (RegDataPtr)xalloc(rgnSize))) \ - { \ - (_pReg)->data->size = (_size); \ - (_pReg)->data->numRects = 0; \ - } \ - else \ - (_pReg)->data = &miEmptyData; \ - } \ - } +static inline void RegionEmpty(RegionPtr _pReg) +{ + RegionUninit(_pReg); + (_pReg)->extents.x2 = (_pReg)->extents.x1; + (_pReg)->extents.y2 = (_pReg)->extents.y1; + (_pReg)->data = &miEmptyData; +} +static inline BoxPtr RegionExtents(RegionPtr _pReg) +{ + return (&(_pReg)->extents); +} -#define RegionUninit(_pReg) \ -{ \ - REGION_SCREEN(_pScreen); \ - if ((_pReg)->data && (_pReg)->data->size) { \ - xfree((_pReg)->data); \ - (_pReg)->data = NULL; \ - } \ +static inline void RegionNull(RegionPtr _pReg) +{ + (_pReg)->extents = miEmptyBox; + (_pReg)->data = &miEmptyData; } -#define RegionReset(_pReg, _pBox) \ -{ \ - REGION_SCREEN(_pScreen); \ - (_pReg)->extents = *(_pBox); \ - RegionUninit(_pReg); \ - (_pReg)->data = (RegDataPtr)NULL; \ +static inline Bool +RegionCopy(RegionPtr dst, RegionPtr src) +{ + return pixman_region_copy (dst, src); } -#define RegionNotEmpty(_pReg) \ - (REGION_SCREEN(_pScreen), !REGION_NIL(_pReg)) +static inline Bool +RegionIntersect( + RegionPtr newReg, /* destination Region */ + RegionPtr reg1, + RegionPtr reg2 /* source regions */ + ) +{ + return pixman_region_intersect (newReg, reg1, reg2); +} -#define RegionBroken(_pReg) \ - (REGION_SCREEN(_pScreen), REGION_NAR(_pReg)) +static inline Bool +RegionUnion( + RegionPtr newReg, /* destination Region */ + RegionPtr reg1, + RegionPtr reg2 /* source regions */ + ) +{ + return pixman_region_union (newReg, reg1, reg2); +} -#define RegionEmpty(_pReg) \ -{ \ - RegionUninit(_pReg); \ - (_pReg)->extents.x2 = (_pReg)->extents.x1; \ - (_pReg)->extents.y2 = (_pReg)->extents.y1; \ - (_pReg)->data = &miEmptyData; \ +/* + *----------------------------------------------------------------------- + * Subtract -- + * Subtract regS from regM and leave the result in regD. + * S stands for subtrahend, M for minuend and D for difference. + * + * Results: + * TRUE if successful. + * + * Side Effects: + * regD is overwritten. + * + *----------------------------------------------------------------------- + */ +static inline Bool +RegionSubtract(RegionPtr regD, RegionPtr regM, RegionPtr regS) +{ + return pixman_region_subtract (regD, regM, regS); } -#define RegionExtents(_pReg) \ - (REGION_SCREEN(_pScreen), &(_pReg)->extents) +/* + *----------------------------------------------------------------------- + * Inverse -- + * Take a region and a box and return a region that is everything + * in the box but not in the region. The careful reader will note + * that this is the same as subtracting the region from the box... + * + * Results: + * TRUE. + * + * Side Effects: + * newReg is overwritten. + * + *----------------------------------------------------------------------- + */ +static inline Bool +RegionInverse( + RegionPtr newReg, /* Destination region */ + RegionPtr reg1, /* Region to invert */ + BoxPtr invRect /* Bounding box for inversion */ + ) +{ + return pixman_region_inverse (newReg, reg1, invRect); +} -#define RegionNull(_pReg) \ -{ \ - REGION_SCREEN(_pScreen); \ - (_pReg)->extents = miEmptyBox; \ - (_pReg)->data = &miEmptyData; \ +static inline int +RegionContainsRect(RegionPtr region, BoxPtr prect) +{ + return pixman_region_contains_rectangle (region, prect); } -#endif /* DONT_INLINE_REGION_OPS */ +/* TranslateRegion(pReg, x, y) + * translates in place + */ -#endif /* NEED_SCREEN_REGIONS */ +static inline void +RegionTranslate(RegionPtr pReg, int x, int y) +{ + pixman_region_translate (pReg, x, y); +} -#ifndef RegionNull -#define RegionNull(_pReg) \ - RegionInit(_pReg, NullBox, 1) -#endif +static inline Bool +RegionContainsPoint( + RegionPtr pReg, + int x, + int y, + BoxPtr box /* "return" value */ + ) +{ + return pixman_region_contains_point (pReg, x, y, box); +} -/* moved from mi.h */ +static inline Bool +RegionEqual(RegionPtr reg1, RegionPtr reg2) +{ + return pixman_region_equal (reg1, reg2); +} extern RegionPtr miRegionCreate( BoxPtr /*rect*/, -- cgit v1.2.3 From d9e7f6ae42b30e32619e1d0979598c2ba2288a3e Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Fri, 18 Mar 2016 05:13:43 +0100 Subject: pixman-devel: Build against shared library pkg-config(pixman-1). --- nx-X11/programs/Xserver/include/scrnintstr.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'nx-X11/programs/Xserver/include') diff --git a/nx-X11/programs/Xserver/include/scrnintstr.h b/nx-X11/programs/Xserver/include/scrnintstr.h index 0539ca516..2597d6b67 100644 --- a/nx-X11/programs/Xserver/include/scrnintstr.h +++ b/nx-X11/programs/Xserver/include/scrnintstr.h @@ -709,6 +709,10 @@ typedef struct _Screen { } ScreenRec; +static inline RegionPtr BitmapToRegion(ScreenPtr _pScreen, PixmapPtr pPix) { + return (*(_pScreen)->BitmapToRegion)(pPix); /* no mi version?! */ +} + typedef struct _ScreenInfo { int imageByteOrder; int bitmapScanlineUnit; -- cgit v1.2.3 From b0e69fe350d9ede82b1c2238df2d43028c868204 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Fri, 18 Mar 2016 13:05:05 +0100 Subject: Change region implementation names to eliminate the 'mi' prefix This prepares the file to be moved from mi to dix. This patch was done mechanically with the included scripts 'fix-miregion' run over the entire X server and 'fix-miregion-private' run over include/regionstr.h and mi/miregion.c. v1: Keith Packard v2: Mike Gabriel (backported to nx-libs) --- nx-X11/programs/Xserver/include/regionstr.h | 60 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'nx-X11/programs/Xserver/include') diff --git a/nx-X11/programs/Xserver/include/regionstr.h b/nx-X11/programs/Xserver/include/regionstr.h index c61acc003..8ddc62af2 100644 --- a/nx-X11/programs/Xserver/include/regionstr.h +++ b/nx-X11/programs/Xserver/include/regionstr.h @@ -74,16 +74,16 @@ typedef struct pixman_region16 RegionRec, *RegionPtr; typedef struct pixman_region16_data RegDataRec, *RegDataPtr; -extern BoxRec miEmptyBox; -extern RegDataRec miEmptyData; -extern RegDataRec miBrokenData; +extern BoxRec RegionEmptyBox; +extern RegDataRec RegionEmptyData; +extern RegDataRec RegionBrokenData; static inline Bool RegionNil(RegionPtr reg) { return ((reg)->data && !(reg)->data->numRects); } static inline Bool RegionNar(RegionPtr reg) { - return ((reg)->data == &miBrokenData); + return ((reg)->data == &RegionBrokenData); } static inline int RegionNumRects(RegionPtr reg) { @@ -127,7 +127,7 @@ static inline void RegionInit(RegionPtr _pReg, BoxPtr _rect, int _size) } else { - (_pReg)->extents = miEmptyBox; + (_pReg)->extents = RegionEmptyBox; if (((_size) > 1) && ((_pReg)->data = (RegDataPtr)malloc(RegionSizeof(_size)))) { @@ -135,7 +135,7 @@ static inline void RegionInit(RegionPtr _pReg, BoxPtr _rect, int _size) (_pReg)->data->numRects = 0; } else - (_pReg)->data = &miEmptyData; + (_pReg)->data = &RegionEmptyData; } } @@ -167,7 +167,7 @@ static inline void RegionEmpty(RegionPtr _pReg) RegionUninit(_pReg); (_pReg)->extents.x2 = (_pReg)->extents.x1; (_pReg)->extents.y2 = (_pReg)->extents.y1; - (_pReg)->data = &miEmptyData; + (_pReg)->data = &RegionEmptyData; } static inline BoxPtr RegionExtents(RegionPtr _pReg) @@ -177,8 +177,8 @@ static inline BoxPtr RegionExtents(RegionPtr _pReg) static inline void RegionNull(RegionPtr _pReg) { - (_pReg)->extents = miEmptyBox; - (_pReg)->data = &miEmptyData; + (_pReg)->extents = RegionEmptyBox; + (_pReg)->data = &RegionEmptyData; } static inline Bool @@ -285,91 +285,91 @@ RegionEqual(RegionPtr reg1, RegionPtr reg2) return pixman_region_equal (reg1, reg2); } -extern RegionPtr miRegionCreate( +extern RegionPtr RegionCreate( BoxPtr /*rect*/, int /*size*/); -extern void miRegionInit( +extern void RegionInit( RegionPtr /*pReg*/, BoxPtr /*rect*/, int /*size*/); -extern void miRegionDestroy( +extern void RegionDestroy( RegionPtr /*pReg*/); -extern void miRegionUninit( +extern void RegionUninit( RegionPtr /*pReg*/); -extern Bool miRegionCopy( +extern Bool RegionCopy( RegionPtr /*dst*/, RegionPtr /*src*/); -extern Bool miIntersect( +extern Bool RegionIntersect( RegionPtr /*newReg*/, RegionPtr /*reg1*/, RegionPtr /*reg2*/); -extern Bool miUnion( +extern Bool RegionUnion( RegionPtr /*newReg*/, RegionPtr /*reg1*/, RegionPtr /*reg2*/); -extern Bool miRegionAppend( +extern Bool RegionAppend( RegionPtr /*dstrgn*/, RegionPtr /*rgn*/); -extern Bool miRegionValidate( +extern Bool RegionValidate( RegionPtr /*badreg*/, Bool * /*pOverlap*/); -extern RegionPtr miRectsToRegion( +extern RegionPtr RegionFromRects( int /*nrects*/, xRectanglePtr /*prect*/, int /*ctype*/); -extern Bool miSubtract( +extern Bool RegionSubtract( RegionPtr /*regD*/, RegionPtr /*regM*/, RegionPtr /*regS*/); -extern Bool miInverse( +extern Bool RegionInverse( RegionPtr /*newReg*/, RegionPtr /*reg1*/, BoxPtr /*invRect*/); -extern int miRectIn( +extern int RegionContainsRect( RegionPtr /*region*/, BoxPtr /*prect*/); -extern void miTranslateRegion( +extern void RegionTranslate( RegionPtr /*pReg*/, int /*x*/, int /*y*/); -extern void miRegionReset( +extern void RegionReset( RegionPtr /*pReg*/, BoxPtr /*pBox*/); -extern Bool miRegionBreak( +extern Bool RegionBreak( RegionPtr /*pReg*/); -extern Bool miPointInRegion( +extern Bool RegionContainsPoint( RegionPtr /*pReg*/, int /*x*/, int /*y*/, BoxPtr /*box*/); -extern Bool miRegionEqual( +extern Bool RegionEqual( RegionPtr /*pReg1*/, RegionPtr /*pReg2*/); -extern Bool miRegionNotEmpty( +extern Bool RegionNotEmpty( RegionPtr /*pReg*/); -extern void miRegionEmpty( +extern void RegionEmpty( RegionPtr /*pReg*/); -extern BoxPtr miRegionExtents( +extern BoxPtr RegionExtents( RegionPtr /*pReg*/); #endif /* REGIONSTRUCT_H */ -- cgit v1.2.3 From 12020463167af75a0f2958827da07bbf66467bc8 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Fri, 18 Mar 2016 13:06:30 +0100 Subject: Add REGION_ macros for source compatibility with existing drivers. This makes the region code changes source compatible with existing code, although none of them are used within the server source itself. In NX, this patch is not really necessary, but it has been backported with the previous patches for the sake of backporting the complete mi/miregion.c -> dix/region.c change in X.Org. v1: Keith Packard v2: Mike Gabriel (backported to nx-libs) --- nx-X11/programs/Xserver/include/regionstr.h | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'nx-X11/programs/Xserver/include') diff --git a/nx-X11/programs/Xserver/include/regionstr.h b/nx-X11/programs/Xserver/include/regionstr.h index 8ddc62af2..ace8031e0 100644 --- a/nx-X11/programs/Xserver/include/regionstr.h +++ b/nx-X11/programs/Xserver/include/regionstr.h @@ -372,4 +372,43 @@ extern void RegionEmpty( extern BoxPtr RegionExtents( RegionPtr /*pReg*/); +#define INCLUDE_LEGACY_REGION_DEFINES +#ifdef INCLUDE_LEGACY_REGION_DEFINES + +#define REGION_NIL RegionNil +#define REGION_NAR RegionNar +#define REGION_NUM_RECTS RegionNumRects +#define REGION_SIZE RegionSize +#define REGION_RECTS RegionRects +#define REGION_BOXPTR RegionBoxptr +#define REGION_BOX RegionBox +#define REGION_TOP RegionTop +#define REGION_END RegionEnd +#define REGION_SZOF RegionSizeof +#define BitmapToRegion BitmapToRegion +#define REGION_CREATE(pScreen, r, s) RegionCreate(r,s) +#define REGION_COPY(pScreen, d, r) RegionCopy(d, r) +#define REGION_DESTROY(pScreen, r) RegionDestroy(r) +#define REGION_INTERSECT(pScreen, res, r1, r2) RegionIntersect(res, r1, r2) +#define REGION_UNION(pScreen, res, r1, r2) RegionUnion(res, r1, r2) +#define REGION_SUBTRACT(pScreen, res, r1, r2) RegionSubtract(res, r1, r2) +#define REGION_INVERSE(pScreen, n, r, b) RegionInverse(n, r, b) +#define REGION_TRANSLATE(pScreen, r, x, y) RegionTranslate(r, x, y) +#define RECT_IN_REGION(pScreen, r, b) RegionContainsRect(r, b) +#define POINT_IN_REGION(pScreen, r, x, y, b) RegionContainsPoint(r, x, y, b) +#define REGION_EQUAL(pScreen, r1, r2) RegionEqual(r1, r2) +#define REGION_APPEND(pScreen, d, r) RegionAppend(d, r) +#define REGION_VALIDATE(pScreen, r, o) RegionValidate(r, o) +#define RECTS_TO_REGION(pScreen, n, r, c) RegionFromRects(n, r, c) +#define REGION_BREAK(pScreen, r) RegionBreak(r) +#define REGION_INIT(pScreen, r, b, s) RegionInit(r, b, s) +#define REGION_UNINIT(pScreen, r) RegionUninit(r) +#define REGION_RESET(pScreen, r, b) RegionReset(r, b) +#define REGION_NOTEMPTY(pScreen, r) RegionNotEmpty(r) +#define REGION_BROKEN(pScreen, r) RegionBroken(r) +#define REGION_EMPTY(pScreen, r) RegionEmpty(r) +#define REGION_EXTENTS(pScreen, r) RegionExtents(r) +#define REGION_NULL(pScreen, r) RegionNull(r) + +#endif /* INCLUDE_LEGACY_REGION_DEFINES */ #endif /* REGIONSTRUCT_H */ -- cgit v1.2.3 From fb832b01e9a497d6e59d026cdd58068101f4c4cb Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Mon, 21 Mar 2016 15:54:24 +0100 Subject: Adapt API for MakeAtom() and CopyISOLatin1Lowered to latest changes in X.org. This requires adaptations of arguments' types for the external references to MakeAtom() and CopyISOLatin1Lowered(). These adaptations have been required in Xserver/include/dix.h, Xserver/include/dixfonts.c Xserver/dix/atom.c, Xserver/dix/dixutils.c, Xserver/os/oscolor.c. --- nx-X11/programs/Xserver/include/dix.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'nx-X11/programs/Xserver/include') diff --git a/nx-X11/programs/Xserver/include/dix.h b/nx-X11/programs/Xserver/include/dix.h index 25260e46c..5f9d3b5d5 100644 --- a/nx-X11/programs/Xserver/include/dix.h +++ b/nx-X11/programs/Xserver/include/dix.h @@ -386,8 +386,8 @@ extern void ddxBeforeReset (void); /* dixutils.c */ extern void CopyISOLatin1Lowered( - unsigned char * /*dest*/, - unsigned char * /*source*/, + char * /*dest*/, + const char * /*source*/, int /*length*/); extern int CompareISOLatin1Lowered( @@ -511,7 +511,7 @@ extern Bool ClientIsAsleep( /* atom.c */ extern Atom MakeAtom( - char * /*string*/, + const char * /*string*/, unsigned /*len*/, Bool /*makeit*/); -- cgit v1.2.3