13 return ExtSelectClipRgn(hdc
, hrgn
, RGN_COPY
);
27 return NtGdiGetRandomRgn(hdc
, hrgn
, 1);
33 CreatePolygonRgn( const POINT
* lppt
, int cPoints
, int fnPolyFillMode
)
35 return (HRGN
) NtGdiPolyPolyDraw( (HDC
) fnPolyFillMode
, (PPOINT
) lppt
, (PULONG
) &cPoints
, 1, GdiPolyPolyRgn
);
41 CreatePolyPolygonRgn( const POINT
* lppt
,
42 const INT
* lpPolyCounts
,
46 return (HRGN
) NtGdiPolyPolyDraw( (HDC
) fnPolyFillMode
, (PPOINT
) lppt
, (PULONG
) lpPolyCounts
, (ULONG
) nCount
, GdiPolyPolyRgn
);
51 CreateEllipticRgnIndirect(
55 /* Notes if prc is NULL it will crash on All Windows NT I checked 2000/XP/VISTA */
56 return NtGdiCreateEllipticRgn(prc
->left
, prc
->top
, prc
->right
, prc
->bottom
);
62 CreateRectRgn(int x1
, int y1
, int x2
,int y2
)
64 /* FIXME Some part need be done in user mode */
65 return NtGdiCreateRectRgn(x1
,y1
,x2
,y2
);
71 CreateRectRgnIndirect(
75 /* Notes if prc is NULL it will crash on All Windows NT I checked 2000/XP/VISTA */
76 return CreateRectRgn(prc
->left
, prc
->top
, prc
->right
, prc
->bottom
);
81 * I thought it was okay to have this in DeleteObject but~ Speed. (jt)
85 DeleteRegion( HRGN hRgn
)
88 PREGION_ATTR Rgn_Attr
;
90 if ((GdiGetHandleUserData((HGDIOBJ
) hRgn
, (PVOID
) &Rgn_Attr
)) &&
93 PTEB pTeb
= NtCurrentTeb();
94 if (pTeb
->Win32ThreadInfo
!= NULL
)
96 if ((pTeb
->GdiTebBatch
.Offset
+ sizeof(GDIBSOBJECT
)) <= GDIBATCHBUFSIZE
)
98 PGDIBSOBJECT pgO
= (PGDIBSOBJECT
)(&pTeb
->GdiTebBatch
.Buffer
[0] +
99 pTeb
->GdiTebBatch
.Offset
);
100 pgO
->gbHdr
.Cmd
= GdiBCDelRgn
;
101 pgO
->gbHdr
.Size
= sizeof(GDIBSOBJECT
);
102 pgO
->hgdiobj
= (HGDIOBJ
)hRgn
;
104 pTeb
->GdiTebBatch
.Offset
+= sizeof(GDIBSOBJECT
);
105 pTeb
->GdiBatchCount
++;
106 if (pTeb
->GdiBatchCount
>= GDI_BatchLimit
) NtGdiFlush();
112 return NtGdiDeleteObjectApp((HGDIOBJ
) hRgn
);
121 CONST XFORM
* lpXform
,
123 CONST RGNDATA
* lpRgnData
128 if ((!lpXform
) && (lpRgnData
->rdh
.nCount
== 1))
130 PRECT pRect
= (PRECT
)&lpRgnData
->Buffer
[0];
131 return CreateRectRgn(pRect
->left
, pRect
->top
, pRect
->right
, pRect
->bottom
);
133 return NtGdiExtCreateRegion((LPXFORM
) lpXform
, nCount
,(LPRGNDATA
) lpRgnData
);
135 SetLastError(ERROR_INVALID_PARAMETER
);