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:
Magnus Olsen 2007-07-29 13:12:20 +00:00
parent ee4bffbbb4
commit 719e7db47a
5 changed files with 76 additions and 20 deletions

View file

@ -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

View file

@ -1295,21 +1295,6 @@ GetGlyphOutlineWow(
}
/*
* @unimplemented
*/
INT
STDCALL
GetRandomRgn(
HDC a0,
HRGN a1,
INT a2
)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*

View file

@ -2630,6 +2630,15 @@ NtGdiOffsetRgn(
IN INT cy
);
W32KAPI
INT
APIENTRY
NtGdiGetRandomRgn(
IN HDC hDC,
OUT HRGN hDest,
IN INT iCode
);
W32KAPI
INT
APIENTRY

View file

@ -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)))
{

View file

@ -615,3 +615,4 @@ NtGdiDdUnlock 2
NtGdiDdUnlockD3D 2
NtGdiDdUpdateOverlay 3
NtGdiDdWaitForVerticalBlank 2
NtGdiGetRandomRgn 3