#pragma once /* Type definitions ***********************************************************/ /* Internal region data. Can't use RGNDATA structure because buffer is allocated statically */ typedef struct _REGION { /* Header for all gdi objects in the handle table. Do not (re)move this. */ BASEOBJECT BaseObject; _Notnull_ PRGN_ATTR prgnattr; RGN_ATTR rgnattr; RGNDATAHEADER rdh; RECTL *Buffer; } REGION, *PREGION; /* Globals ********************************************************************/ extern PREGION prgnDefault; extern HRGN hrgnDefault; /* Functions ******************************************************************/ PREGION FASTCALL REGION_AllocRgnWithHandle(INT n); PREGION FASTCALL REGION_AllocUserRgnWithHandle(INT n); BOOL FASTCALL REGION_UnionRectWithRgn(PREGION rgn, const RECTL *rect); INT FASTCALL REGION_SubtractRectFromRgn(PREGION prgnDest, PREGION prgnSrc, const RECTL *prcl); INT FASTCALL REGION_GetRgnBox(PREGION Rgn, RECTL *pRect); BOOL FASTCALL REGION_RectInRegion(PREGION Rgn, const RECTL *rc); BOOL FASTCALL REGION_PtInRegion(PREGION, INT, INT); INT FASTCALL REGION_CropRegion(PREGION rgnDst, PREGION rgnSrc, const RECTL *rect); VOID FASTCALL REGION_SetRectRgn(PREGION pRgn, INT LeftRect, INT TopRect, INT RightRect, INT BottomRect); VOID NTAPI REGION_vCleanup(PVOID ObjectBody); VOID FASTCALL REGION_Delete(PREGION); INT APIENTRY IntGdiGetRgnBox(HRGN, RECTL*); PREGION FASTCALL REGION_LockRgn( _In_ HRGN hrgn); VOID FASTCALL REGION_UnlockRgn( _In_ PREGION prgn); BOOL FASTCALL REGION_bXformRgn( _Inout_ PREGION prgn, _In_ PMATRIX pmx); BOOL FASTCALL REGION_SetPolyPolygonRgn( _Inout_ PREGION prgn, _In_ const POINT *ppt, _In_ const ULONG *pcPoints, _In_ ULONG cPolygons, _In_ INT iMode); HRGN NTAPI GreCreatePolyPolygonRgn( _In_ const POINT *ppt, _In_ const ULONG *pcPoints, _In_ ULONG cPolygons, _In_ INT iMode); BOOL FASTCALL REGION_bOffsetRgn( _Inout_ PREGION prgn, _In_ INT cx, _In_ INT cy); BOOL FASTCALL IntRectInRegion(HRGN,LPRECTL); INT FASTCALL IntGdiCombineRgn(PREGION, PREGION, PREGION, INT); INT FASTCALL REGION_Complexity(PREGION); PREGION FASTCALL IntSysCreateRectpRgn(INT,INT,INT,INT); BOOL FASTCALL IntGdiSetRegionOwner(HRGN,DWORD); HRGN FASTCALL GreCreateFrameRgn( HRGN hrgn, INT x, INT y); #define IntSysCreateRectpRgnIndirect(prc) \ IntSysCreateRectpRgn((prc)->left, (prc)->top, (prc)->right, (prc)->bottom) #define GreCreateRectRgnIndirect(prc) \ NtGdiCreateRectRgn((prc)->left, (prc)->top, (prc)->right, (prc)->bottom) #define GreSetRectRgnIndirect(hRgn, prc) \ NtGdiSetRectRgn(hRgn, (prc)->left, (prc)->top, (prc)->right, (prc)->bottom); PREGION FASTCALL IntSysCreateRectpRgn(INT LeftRect, INT TopRect, INT RightRect, INT BottomRect);