Author: greatlrd Date: Sun Jul 29 17:12:20 2007 New Revision: 28001
URL: http://svn.reactos.org/svn/reactos?rev=28001&view=rev Log: 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
Modified: trunk/reactos/dll/win32/gdi32/gdi32.def trunk/reactos/dll/win32/gdi32/misc/stubs.c trunk/reactos/include/psdk/ntgdi.h trunk/reactos/subsystems/win32/win32k/objects/region.c trunk/reactos/tools/nci/w32ksvc.db
Modified: trunk/reactos/dll/win32/gdi32/gdi32.def URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/gdi32.def?r... ============================================================================== --- trunk/reactos/dll/win32/gdi32/gdi32.def (original) +++ trunk/reactos/dll/win32/gdi32/gdi32.def Sun Jul 29 17:12:20 2007 @@ -423,7 +423,7 @@ GetPixelFormat@4 GetPolyFillMode@4=NtGdiGetPolyFillMode@4 GetROP2@4=NtGdiGetROP2@4 -GetRandomRgn@12 +GetRandomRgn@12=NtGdiGetRandomRgn@12 GetRasterizerCaps@8 GetRegionData@12=NtGdiGetRegionData@12 GetRelAbs@8
Modified: trunk/reactos/dll/win32/gdi32/misc/stubs.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/misc/stubs.... ============================================================================== --- trunk/reactos/dll/win32/gdi32/misc/stubs.c (original) +++ trunk/reactos/dll/win32/gdi32/misc/stubs.c Sun Jul 29 17:12:20 2007 @@ -1295,21 +1295,6 @@ }
-/* - * @unimplemented - */ -INT -STDCALL -GetRandomRgn( - HDC a0, - HRGN a1, - INT a2 - ) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -}
/*
Modified: trunk/reactos/include/psdk/ntgdi.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/ntgdi.h?rev=28... ============================================================================== --- trunk/reactos/include/psdk/ntgdi.h (original) +++ trunk/reactos/include/psdk/ntgdi.h Sun Jul 29 17:12:20 2007 @@ -2633,6 +2633,15 @@ W32KAPI INT APIENTRY +NtGdiGetRandomRgn( + IN HDC hDC, + OUT HRGN hDest, + IN INT iCode +); + +W32KAPI +INT +APIENTRY NtGdiGetRgnBox( IN HRGN hrgn, OUT LPRECT prcOut
Modified: trunk/reactos/subsystems/win32/win32k/objects/region.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/obj... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/region.c (original) +++ trunk/reactos/subsystems/win32/win32k/objects/region.c Sun Jul 29 17:12:20 2007 @@ -2344,6 +2344,67 @@ }
+/* 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 @@ 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 @@ BITMAPOBJ *BitmapObj;
if( !dc ) - return FALSE; + return FALSE;
if(!(tmpVisRgn = NtGdiCreateRectRgn(0, 0, 0, 0))) {
Modified: trunk/reactos/tools/nci/w32ksvc.db URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/nci/w32ksvc.db?rev=28... ============================================================================== --- trunk/reactos/tools/nci/w32ksvc.db (original) +++ trunk/reactos/tools/nci/w32ksvc.db Sun Jul 29 17:12:20 2007 @@ -615,3 +615,4 @@ NtGdiDdUnlockD3D 2 NtGdiDdUpdateOverlay 3 NtGdiDdWaitForVerticalBlank 2 +NtGdiGetRandomRgn 3