mirror of
https://github.com/reactos/reactos.git
synced 2025-05-16 15:50:24 +00:00
partly implement NtGdiGetRandomRgn, we do not support metadc, so we will fail on thuse wine test for this api.
The implemetions are base partly on wine and msdn svn path=/trunk/; revision=28001
This commit is contained in:
parent
ee4bffbbb4
commit
719e7db47a
5 changed files with 76 additions and 20 deletions
|
@ -423,7 +423,7 @@ GetPixel@12=NtGdiGetPixel@12
|
|||
GetPixelFormat@4
|
||||
GetPolyFillMode@4=NtGdiGetPolyFillMode@4
|
||||
GetROP2@4=NtGdiGetROP2@4
|
||||
GetRandomRgn@12
|
||||
GetRandomRgn@12=NtGdiGetRandomRgn@12
|
||||
GetRasterizerCaps@8
|
||||
GetRegionData@12=NtGdiGetRegionData@12
|
||||
GetRelAbs@8
|
||||
|
|
|
@ -1295,21 +1295,6 @@ GetGlyphOutlineWow(
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
INT
|
||||
STDCALL
|
||||
GetRandomRgn(
|
||||
HDC a0,
|
||||
HRGN a1,
|
||||
INT a2
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -2630,6 +2630,15 @@ NtGdiOffsetRgn(
|
|||
IN INT cy
|
||||
);
|
||||
|
||||
W32KAPI
|
||||
INT
|
||||
APIENTRY
|
||||
NtGdiGetRandomRgn(
|
||||
IN HDC hDC,
|
||||
OUT HRGN hDest,
|
||||
IN INT iCode
|
||||
);
|
||||
|
||||
W32KAPI
|
||||
INT
|
||||
APIENTRY
|
||||
|
|
|
@ -2344,6 +2344,67 @@ UnsafeIntGetRgnBox(PROSRGNDATA Rgn,
|
|||
}
|
||||
|
||||
|
||||
/* See wine, msdn, osr and Feng Yuan - Windows Graphics Programming Win32 Gdi And Directdraw */
|
||||
INT STDCALL
|
||||
NtGdiGetRandomRgn(HDC hDC, HRGN hDest, INT iCode)
|
||||
{
|
||||
PDC pDC;
|
||||
HRGN hSrc = NULL;
|
||||
POINT org;
|
||||
|
||||
if ((hDC == NULL) || (hDest == NULL))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if ((iCode<1 ) || (iCode>4 ))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
pDC = DC_LockDc(hDC);
|
||||
if (pDC == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (iCode)
|
||||
{
|
||||
case 1:
|
||||
hSrc = pDC->w.hClipRgn;
|
||||
break;
|
||||
case 2:
|
||||
//hSrc = dc->hMetaRgn;
|
||||
DPRINT1("hMetaRgn not implement\n");
|
||||
DC_UnlockDc(pDC);
|
||||
return -1;
|
||||
break;
|
||||
case 3:
|
||||
DPRINT1("waring : hMetaRgn not implement\n");
|
||||
//hSrc = dc->hMetaClipRgn;
|
||||
if(!hSrc)
|
||||
{
|
||||
hSrc = pDC->w.hClipRgn;
|
||||
}
|
||||
//if(!hSrc) rgn = dc->hMetaRgn;
|
||||
break;
|
||||
case 4:
|
||||
hSrc = pDC->w.hVisRgn;
|
||||
}
|
||||
if (hSrc)
|
||||
{
|
||||
NtGdiCombineRgn(hDest, hSrc, 0, RGN_COPY);
|
||||
}
|
||||
if (iCode == SYSRGN)
|
||||
{
|
||||
IntGdiGetDCOrgEx(pDC, &org);
|
||||
NtGdiOffsetRgn(hDest, org.x, org.y );
|
||||
}
|
||||
|
||||
DC_UnlockDc(pDC);
|
||||
|
||||
return (hSrc != 0);
|
||||
}
|
||||
|
||||
INT STDCALL
|
||||
NtGdiGetRgnBox(HRGN hRgn,
|
||||
LPRECT pRect)
|
||||
|
@ -2428,13 +2489,13 @@ NtGdiOffsetRgn(HRGN hRgn,
|
|||
DPRINT("NtGdiOffsetRgn: hRgn %d Xoffs %d Yoffs %d rgn %x\n", hRgn, XOffset, YOffset, rgn );
|
||||
|
||||
if( !rgn ){
|
||||
DPRINT("NtGdiOffsetRgn: hRgn error\n");
|
||||
return ERROR;
|
||||
DPRINT("NtGdiOffsetRgn: hRgn error\n");
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
if(XOffset || YOffset) {
|
||||
int nbox = rgn->rdh.nCount;
|
||||
PRECT pbox = (PRECT)rgn->Buffer;
|
||||
PRECT pbox = (PRECT)rgn->Buffer;
|
||||
|
||||
if(nbox && pbox) {
|
||||
while(nbox--) {
|
||||
|
@ -2475,7 +2536,7 @@ NtGdiPaintRgn(HDC hDC,
|
|||
BITMAPOBJ *BitmapObj;
|
||||
|
||||
if( !dc )
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
|
||||
if(!(tmpVisRgn = NtGdiCreateRectRgn(0, 0, 0, 0)))
|
||||
{
|
||||
|
|
|
@ -615,3 +615,4 @@ NtGdiDdUnlock 2
|
|||
NtGdiDdUnlockD3D 2
|
||||
NtGdiDdUpdateOverlay 3
|
||||
NtGdiDdWaitForVerticalBlank 2
|
||||
NtGdiGetRandomRgn 3
|
||||
|
|
Loading…
Reference in a new issue