From 15499d174ff5320205ede4ccd595b4329c444796 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Thu, 30 Aug 2007 18:06:35 +0000 Subject: [PATCH] Implement GdiReleaseLocalDC, GdiFlush, GdiPlayDCScript, GdiPlayJournal, GdiPlayScript, GdiConvertBitmap, GdiConvertBrush, GdiConvertDC, GdiConvertFont, GdiSetAttrs Redirect GdiConsoleTextOut, FontIsLinked, GdiDescribePixelFormat, GdiSetPixelFormat, GdiSwapBuffers, GdiFullscreenControl, GdiQueryFonts, GdiInitSpool to win32k.sys do not redirect add smaller code in gdi32 and use share memory : GdiGradientFill, FrameRgn, GdiTransparentBlt stub : GdiPrinterThunk, GdiConvertBitmapV5 update good api list. svn path=/trunk/; revision=28676 --- reactos/dll/win32/gdi32/gdi32.def | 185 +++++++++--------- reactos/dll/win32/gdi32/good api.def | 41 +++- reactos/dll/win32/gdi32/misc/misc.c | 4 +- reactos/dll/win32/gdi32/misc/stubs.c | 257 +++++++++++++------------- reactos/dll/win32/gdi32/misc/stubsw.c | 11 -- reactos/dll/win32/gdi32/objects/dc.c | 3 + 6 files changed, 267 insertions(+), 234 deletions(-) diff --git a/reactos/dll/win32/gdi32/gdi32.def b/reactos/dll/win32/gdi32/gdi32.def index 1cd8a35e3d5..0f287e2a448 100644 --- a/reactos/dll/win32/gdi32/gdi32.def +++ b/reactos/dll/win32/gdi32/gdi32.def @@ -184,8 +184,98 @@ FillRgn@12 FixBrushOrgEx@16 FlattenPath@4 FloodFill@16 -FontIsLinked@4 -FrameRgn@20=NtGdiFontIsLinked@4 +FontIsLinked@4=NtGdiFontIsLinked@4 +FrameRgn@20 +GdiAddFontResourceW@12 +GdiAddGlsBounds@8 +GdiAddGlsRecord@16 +GdiAlphaBlend@44 +GdiArtificialDecrementDriver@8 +GdiCleanCacheDC@4 +GdiComment@12 +GdiConsoleTextOut@16=NtGdiConsoleTextOut@16 +GdiConvertAndCheckDC@4 +GdiConvertBitmap@4 +GdiConvertBitmapV5@16 +GdiConvertBrush@4 +GdiConvertDC@4 +GdiConvertEnhMetaFile@4 +GdiConvertFont@4 +GdiConvertMetaFilePict@4 +GdiConvertPalette@4 +GdiConvertRegion@4 +GdiConvertToDevmodeW@4 +GdiCreateLocalEnhMetaFile@4 +GdiCreateLocalMetaFilePict@4 +GdiDeleteLocalDC@4 +GdiDeleteSpoolFileHandle@4 +GdiDescribePixelFormat@16=NtGdiDescribePixelFormat@16 +GdiDllInitialize@12 +GdiEndDocEMF@4 +GdiEndPageEMF@8 +GdiEntry10@8 +GdiEntry11@8 +GdiEntry12@8 +GdiEntry13@0 +GdiEntry14@12 +GdiEntry15@12 +GdiEntry16@12 +GdiEntry1@8 +GdiEntry2@44 +GdiEntry3@4 +GdiEntry4@8 +GdiEntry5@4 +GdiEntry6@8 +GdiEntry7@8 +GdiEntry8@4 +GdiEntry9@24 +GdiFixUpHandle@4 +GdiFlush@0 +GdiFullscreenControl@20=NtGdiFullscreenControl@20 +GdiGetBatchLimit@0 +GdiGetCharDimensions@12 +GdiGetCodePage@4 +GdiGetDC@4 +GdiGetDevmodeForPage@16 +GdiGetLocalBrush@4 +GdiGetLocalDC@4 +GdiGetLocalFont@4 +GdiGetPageCount@4 +GdiGetPageHandle@12 +GdiGetSpoolFileHandle@12 +GdiGetSpoolMessage@16=NtGdiGetSpoolMessage@16 +GdiGradientFill@24 +GdiInitSpool@0=NtGdiInitSpool@0 +GdiInitializeLanguagePack@4 +GdiIsMetaFileDC@4 +GdiIsMetaPrintDC@4 +GdiIsPlayMetafileDC@4 +GdiPlayDCScript@24 +GdiPlayEMF@20 +GdiPlayJournal@20 +GdiPlayPageEMF@20 +GdiPlayPrivatePageEMF@12 +GdiPlayScript@28 +GdiPrinterThunk@12 +GdiProcessSetup@0 +GdiQueryFonts@12=NtGdiQueryFonts@12 +GdiQueryTable@0 +GdiRealizationInfo@8 +GdiReleaseDC@4 +GdiReleaseLocalDC@4 +GdiResetDCEMF@8 +GdiSetAttrs@4 +GdiSetBatchLimit@4 +GdiSetLastError@4 +GdiSetPixelFormat@8=NtGdiSetPixelFormat@8 +GdiSetServerAttr@8 +GdiStartDocEMF@8 +GdiStartPageEMF@4 +GdiSwapBuffers@4=NtGdiSwapBuffers@4 +GdiTransparentBlt@44 +GdiValidateHandle@4 +GetArcDirection@4 +GetAspectRatioFilterEx@8 ClearBitmapAttributes@8 ClearBrushAttributes@8 @@ -245,98 +335,7 @@ DdEntry53@8=NtGdiDdUnlock@8 DdEntry54@8=NtGdiDdUnlockD3D@8 DdEntry55@12=NtGdiDdUpdateOverlay@12 DdEntry56@8=NtGdiDdWaitForVerticalBlank@8 - -GdiAddFontResourceW@12 -GdiAddGlsBounds@8 -GdiAddGlsRecord@16 -GdiAlphaBlend@44 -GdiArtificialDecrementDriver@8 -GdiCleanCacheDC@4 -GdiComment@12 -GdiConsoleTextOut@16 -GdiConvertAndCheckDC@4 -GdiConvertBitmap@4 -;GdiConvertBitmapV5 -GdiConvertBrush@4 -GdiConvertDC@4 -GdiConvertEnhMetaFile@4 -GdiConvertFont@4 -GdiConvertMetaFilePict@4 -GdiConvertPalette@4 -GdiConvertRegion@4 -GdiConvertToDevmodeW@4 -GdiCreateLocalEnhMetaFile@4 -GdiCreateLocalMetaFilePict@4 -GdiDeleteLocalDC@4 -GdiDeleteSpoolFileHandle@4 -GdiDescribePixelFormat@16 -GdiDllInitialize@12 GdiDrawStream@12 -GdiEndDocEMF@4 -GdiEndPageEMF@8 -GdiEntry1@8 -GdiEntry2@44 -GdiEntry3@4 -GdiEntry4@8 -GdiEntry5@4 -GdiEntry6@8 -GdiEntry7@8 -GdiEntry8@4 -GdiEntry9@24 -GdiEntry10@8 -GdiEntry11@8 -GdiEntry12@8 -GdiEntry13@0 -GdiEntry14@12 -GdiEntry15@12 -GdiEntry16@12 -GdiFixUpHandle@4 -GdiFlush@0 -GdiFullscreenControl@20 -GdiGetBatchLimit@0 -GdiGetCharDimensions@12 -GdiGetCodePage@4 -GdiGetDC@4 -GdiGetDevmodeForPage@16 -GdiGetLocalBrush@4 -GdiGetLocalDC@4 -GdiGetLocalFont@4 -GdiGetPageCount@4 -GdiGetPageHandle@12 -GdiGetSpoolFileHandle@12 -;GdiGetSpoolMessage -GdiGradientFill@24=NtGdiGradientFill@24 -GdiInitSpool@0 -GdiInitializeLanguagePack@4 -GdiIsMetaFileDC@4 -GdiIsMetaPrintDC@4 -GdiIsPlayMetafileDC@4 -GdiPlayDCScript@24 -GdiPlayEMF@20 -GdiPlayJournal@20 -GdiPlayPageEMF@20 -GdiPlayPrivatePageEMF@12 -GdiPlayScript@28 -;GdiPrinterThunk -GdiProcessSetup@0 -GdiQueryFonts@12 -GdiQueryTable@0 -GdiRealizationInfo@8 -GdiReleaseDC@4 -GdiReleaseLocalDC@4 -GdiResetDCEMF@8 -GdiSetAttrs@4 -GdiSetBatchLimit@4 -GdiSetLastError@4 -GdiSetPixelFormat@8 -GdiSetServerAttr@8 -GdiStartDocEMF@8 -GdiStartPageEMF@4 -GdiSwapBuffers@4 -GdiTransparentBlt@44=NtGdiTransparentBlt@44 -GdiValidateHandle@4 -GetArcDirection@4 -GetAspectRatioFilterEx@8 GetBitmapAttributes@4 GetBitmapBits@12=NtGdiGetBitmapBits@12 GetBitmapDimensionEx@8=NtGdiGetBitmapDimension@8 diff --git a/reactos/dll/win32/gdi32/good api.def b/reactos/dll/win32/gdi32/good api.def index 8a8017a3ea7..c6e11bb88aa 100644 --- a/reactos/dll/win32/gdi32/good api.def +++ b/reactos/dll/win32/gdi32/good api.def @@ -7,7 +7,8 @@ ; if bugs exists their or verify ; -AddFontResourceA@4 +AAddFontResourceA@4 +AddFontResourceExA@12 AddFontResourceExW@12 AddFontResourceW@4 AnyLinkedFonts@0 @@ -47,11 +48,14 @@ EngCreateClip@0 EngCreateDeviceBitmap@16 EngCreateDeviceSurface@16 EngCreatePalette@24 +EngCreateSemaphore@0 EngDeleteClip@4 EngDeletePath@4 +EngDeleteSemaphore@4 EngDeleteSurface@4 EngEraseSurface@12 EngFillPath@28 +EngFindResource@16 EngFreeModule@4 EngGetCurrentCodePage@8 EngGetPrinterDataFileName@4 @@ -73,4 +77,39 @@ EngStrokePath@32 EngTextOut@40 EngTransparentBlt@32 EngUnicodeToMultiByteN@20 +EngUnlockSurface@4 +EqualRgn@8 +FixBrushOrgEx@16 +FloodFill@16 +FontIsLinked@4 +FONTOBJ_cGetAllGlyphHandles@8 +FONTOBJ_cGetGlyphs@20 +FONTOBJ_pfdg@4 +FONTOBJ_pifi@4 +FONTOBJ_pQueryGlyphAttrs@8 +FONTOBJ_pvTrueTypeFontFile@8 +FONTOBJ_pxoGetXform@4 +FONTOBJ_vGetInfo@12 +GdiConsoleTextOut@16 +GdiConvertBitmap@4 +GdiConvertBrush@4 +GdiConvertDC@4 +GdiDescribePixelFormat@16 +GdiEntry16@12=DdSwapTextureHandles@12 +GdiFlush@0 +GdiFullscreenControl@20 +GdiGetSpoolMessage@16 +GdiInitSpool@0 +GdiPlayDCScript@24 +GdiPlayJournal@20 +GdiPlayScript@28 +GdiQueryFonts@12 +GdiReleaseLocalDC@4 +GdiSetAttrs@4 +GdiSetLastError@4 +GdiSetPixelFormat@8 +GdiSetServerAttr@8 +GdiSwapBuffers@4 +GetAspectRatioFilterEx@8 + diff --git a/reactos/dll/win32/gdi32/misc/misc.c b/reactos/dll/win32/gdi32/misc/misc.c index b4cf81c1d60..3f430db8e69 100644 --- a/reactos/dll/win32/gdi32/misc/misc.c +++ b/reactos/dll/win32/gdi32/misc/misc.c @@ -160,13 +160,13 @@ GdiGetBatchLimit() /* - * @unimplemented + * @implemented */ BOOL STDCALL GdiReleaseLocalDC(HDC hdc) { - return 0; + return TRUE; } diff --git a/reactos/dll/win32/gdi32/misc/stubs.c b/reactos/dll/win32/gdi32/misc/stubs.c index 9c1b0f1c84c..eb70093f738 100644 --- a/reactos/dll/win32/gdi32/misc/stubs.c +++ b/reactos/dll/win32/gdi32/misc/stubs.c @@ -757,18 +757,14 @@ UnrealizeObject( /* - * @unimplemented + * @implemented */ BOOL STDCALL GdiFlush() { - /* - * Although GdiFlush is unimplemented, it's safe to return - * TRUE, because we don't have GDI engine surface caching - * implemented yet. - */ - return TRUE; + NtGdiFlush(); + return TRUE; } @@ -1118,9 +1114,9 @@ wglSwapLayerBuffers( /* - * @unimplemented + * @implemented */ -DWORD +BOOL STDCALL GdiPlayDCScript( DWORD a0, @@ -1131,16 +1127,15 @@ GdiPlayDCScript( DWORD a5 ) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + /* FIXME fix the prototype right */ + return FALSE; } /* - * @unimplemented + * @implemented */ -DWORD +BOOL STDCALL GdiPlayJournal( DWORD a0, @@ -1150,16 +1145,15 @@ GdiPlayJournal( DWORD a4 ) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + /* FIXME fix the prototype right */ + return FALSE; } /* - * @unimplemented + * @implemented */ -DWORD +BOOL STDCALL GdiPlayScript( DWORD a0, @@ -1168,12 +1162,10 @@ GdiPlayScript( DWORD a3, DWORD a4, DWORD a5, - DWORD a6 - ) + DWORD a6) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + /* FIXME prototype */ + return FALSE; } @@ -1348,17 +1340,7 @@ EndFormPage(HDC hdc) return 0; } -/* - * @unimplemented - */ -BOOL -STDCALL -FontIsLinked(HDC hdc) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} + /* * @unimplemented @@ -1409,51 +1391,43 @@ GdiConvertAndCheckDC(HDC hdc) } /* - * @unimplemented + * @implemented */ HBITMAP STDCALL GdiConvertBitmap(HBITMAP hbm) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return hbm; } /* - * @unimplemented + * @implemented */ HBRUSH STDCALL GdiConvertBrush(HBRUSH hbr) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return hbr; } /* - * @unimplemented + * @implemented */ HDC STDCALL GdiConvertDC(HDC hdc) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return hdc; } /* - * @unimplemented + * @implemented */ HFONT STDCALL GdiConvertFont(HFONT hfont) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return hfont; } /* @@ -1504,18 +1478,6 @@ GdiDeleteLocalDC(HDC hdc) return 0; } -/* - * @unimplemented - */ -int -STDCALL -GdiDescribePixelFormat(HDC hdc,int ipfd,UINT cjpfd,PPIXELFORMATDESCRIPTOR ppfd) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} - /* * @unimplemented */ @@ -1613,15 +1575,13 @@ GdiIsPlayMetafileDC(HDC hdc) } /* - * @unimplemented + * @implemented */ BOOL STDCALL GdiSetAttrs(HDC hdc) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return TRUE; } /* @@ -1635,17 +1595,7 @@ GdiSetLastError(DWORD dwErrCode) SetLastError(ERROR_CALL_NOT_IMPLEMENTED); } -/* - * @unimplemented - */ -BOOL -STDCALL -GdiSetPixelFormat(HDC hdc,int ipfd) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} + /* * @unimplemented @@ -1659,27 +1609,16 @@ GdiValidateHandle(HGDIOBJ hobj) return 0; } -/* - * @unimplemented - */ -BOOL -STDCALL -GdiSwapBuffers(HDC hdc) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} + /* - * @unimplemented + * @implemented */ VOID STDCALL GdiSetServerAttr(HDC hdc,DWORD attr) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + /* it does do nothing */ } /* @@ -2052,31 +1991,9 @@ GetTextExtentPointI( return 0; } -/* - * @unimplemented - */ -NTSTATUS -STDCALL -GdiFullscreenControl(FULLSCREENCONTROL FullscreenCommand,PVOID FullscreenInput, - DWORD FullscreenInputLength,PVOID FullscreenOutput, - PULONG FullscreenOutputLength) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} -/* - * @unimplemented - */ -INT -STDCALL -GdiQueryFonts(PUNIVERSAL_FONT_ID pufiFontList,ULONG nBufferSize,PLARGE_INTEGER pTimeStamp ) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} + + /* * @unimplemented @@ -2719,17 +2636,7 @@ GdiPlayEMF return 0; } -/* - * @unimplemented - */ -BOOL -STDCALL -GdiInitSpool(VOID) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} + /* * @unimplemented @@ -2791,5 +2698,101 @@ FillRgn( IN HDC hdc, IN HRGN hrgn, IN HBRUSH hbrush) return NtGdiFillRgn( hdc, hrgn, hbrush); } +/* + * @implemented + */ +BOOL +STDCALL +GdiGradientFill( + IN HDC hdc, + IN PTRIVERTEX pVertex, + IN ULONG nVertex, + IN PVOID pMesh, + IN ULONG nMesh, + IN ULONG ulMode) +{ + /* FIXME some part need be done in user mode */ + return NtGdiGradientFill(hdc, pVertex, nVertex, pMesh, nMesh, ulMode); +} +/* + * @implemented + */ +BOOL +STDCALL +FrameRgn( + IN HDC hdc, + IN HRGN hrgn, + IN HBRUSH hbrush, + IN INT xWidth, + IN INT yHeight) +{ + /* FIXME some part need be done in user mode */ + return NtGdiFrameRgn(hdc, hrgn, hbrush, xWidth, yHeight); +} + +/* + * @implemented + */ +BOOL +STDCALL +GdiTransparentBlt( + IN HDC hdcDst, + IN INT xDst, + IN INT yDst, + IN INT cxDst, + IN INT cyDst, + IN HDC hdcSrc, + IN INT xSrc, + IN INT ySrc, + IN INT cxSrc, + IN INT cySrc, + IN COLORREF TransColor +) +{ + /* FIXME some part need be done in user mode */ + return NtGdiTransparentBlt(hdcDst, xDst, yDst, cxDst, cyDst, hdcSrc, xSrc, ySrc, cxSrc, cySrc, TransColor); +} + +/* + * @unimplemented + */ +BOOL +STDCALL +GdiPrinterThunk( + IN HUMPD humpd, + DWORD *status, + DWORD unuse) +{ + /* FIXME figout the protypes, the HUMPD are a STRUCT or COM object */ + /* status contain some form of return value that being save, what it is I do not known */ + /* unsue seam have zero effect, what it is for I do not known */ + + // ? return NtGdiSetPUMPDOBJ(humpd->0x10,TRUE, humpd, ?) <- blackbox, OpenRCE info, and api hooks for anylaysing; + return FALSE; +} + +/* + * @unimplemented + * + */ +HBITMAP +STDCALL +GdiConvertBitmapV5( + HBITMAP in_format_BitMap, + HBITMAP src_BitMap, + INT bpp, + INT unuse) +{ + /* FIXME guessing the prototypes */ + + /* + * it have create a new bitmap with desired in format, + * then convert it src_bitmap to new format + * and return it as HBITMAP + */ + + return FALSE; +} + diff --git a/reactos/dll/win32/gdi32/misc/stubsw.c b/reactos/dll/win32/gdi32/misc/stubsw.c index 05bdc26cd82..5d4a65953cf 100644 --- a/reactos/dll/win32/gdi32/misc/stubsw.c +++ b/reactos/dll/win32/gdi32/misc/stubsw.c @@ -260,17 +260,6 @@ GdiAddFontResourceW(LPCWSTR lpszFilename,FLONG fl,DESIGNVECTOR *pdv) return NtGdiAddFontResource ( &Filename, fl ); } -/* - * @unimplemented - */ -BOOL -STDCALL -GdiConsoleTextOut(HDC hdc, POLYTEXTW *lpto,UINT nStrings, RECTL *prclBounds) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} /* * @unimplemented diff --git a/reactos/dll/win32/gdi32/objects/dc.c b/reactos/dll/win32/gdi32/objects/dc.c index 0d94529c41d..79bcf3dad29 100644 --- a/reactos/dll/win32/gdi32/objects/dc.c +++ b/reactos/dll/win32/gdi32/objects/dc.c @@ -396,6 +396,9 @@ GetDCDWord( HDC hDC, INT u, DWORD Result ) } +/* + * @implemented + */ BOOL STDCALL GetAspectRatioFilterEx(