From 113bdc27567adfb39b708b7622f1a36c70a28dce Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 19 Apr 2008 19:00:34 +0000 Subject: [PATCH] Plugged in the old NtGdiSetDIBits for now. Need to investigate the problems with SaveDC and CreateCompatibleDC. svn path=/trunk/; revision=33035 --- reactos/dll/win32/gdi32/objects/bitmap.c | 16 ++++++++- reactos/include/reactos/win32k/ntgdibad.h | 12 +++++++ .../subsystems/win32/win32k/objects/dibobj.c | 35 +++++++++++++++++++ reactos/subsystems/win32/win32k/w32ksvc.db | 1 + 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 68b9cc7726c..961051c13b0 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -295,7 +295,7 @@ CreateDIBitmap( HDC hDC, 0); } - +#if 0 /* * @implemented */ @@ -387,6 +387,20 @@ SetDIBits(HDC hDC, return LinesCopied; } +#endif + +INT +STDCALL +SetDIBits(HDC hdc, + HBITMAP hbmp, + UINT uStartScan, + UINT cScanLines, + CONST VOID *lpvBits, + CONST BITMAPINFO *lpbmi, + UINT fuColorUse) +{ + return NtGdiSetDIBits(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); +} /* * @implemented diff --git a/reactos/include/reactos/win32k/ntgdibad.h b/reactos/include/reactos/win32k/ntgdibad.h index 0ab4468faeb..4b812bd1de6 100644 --- a/reactos/include/reactos/win32k/ntgdibad.h +++ b/reactos/include/reactos/win32k/ntgdibad.h @@ -131,6 +131,18 @@ NtGdiSetWindowOrgEx ( LPPOINT Point ); +/* Use SetDIBitsToDevice in gdi32. */ +INT +STDCALL +NtGdiSetDIBits ( + HDC hDC, + HBITMAP hBitmap, + UINT StartScan, + UINT ScanLines, + CONST VOID * Bits, + CONST BITMAPINFO * bmi, + UINT ColorUse + ); #endif /* WIN32K_NTGDI_BAD_INCLUDED */ diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 9c106b0e158..cc7946c1010 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -276,6 +276,41 @@ IntSetDIBits( return result; } +// Converts a DIB to a device-dependent bitmap +INT STDCALL +NtGdiSetDIBits( + HDC hDC, + HBITMAP hBitmap, + UINT StartScan, + UINT ScanLines, + CONST VOID *Bits, + CONST BITMAPINFO *bmi, + UINT ColorUse) +{ + PDC Dc; + INT Ret; + + Dc = DC_LockDc(hDC); + if (NULL == Dc) + { + SetLastWin32Error(ERROR_INVALID_HANDLE); + return 0; + } + if (Dc->DC_Type == DC_TYPE_INFO) + { + DC_UnlockDc(Dc); + return 0; + } + + Ret = IntSetDIBits(Dc, hBitmap, StartScan, ScanLines, Bits, bmi, ColorUse); + + DC_UnlockDc(Dc); + + return Ret; +} + + + W32KAPI INT APIENTRY diff --git a/reactos/subsystems/win32/win32k/w32ksvc.db b/reactos/subsystems/win32/win32k/w32ksvc.db index 8f6b04d88a6..47bc3406548 100644 --- a/reactos/subsystems/win32/win32k/w32ksvc.db +++ b/reactos/subsystems/win32/win32k/w32ksvc.db @@ -674,6 +674,7 @@ NtGdiDrawStream 3 # # #ReactOS specific syscalls +NtGdiSetDIBits 7 NtGdiSetViewportExtEx 4 NtGdiSetViewportOrgEx 4 NtGdiSetWindowExtEx 4