From 2027d8d907f898b90c21b49c767f27de6679f619 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 31 May 2008 00:04:16 +0000 Subject: [PATCH] patch by Jeffrey Morlan (mrnobo1024 at yahoo dot com) Testcase for NtGdiSetDIBitsToDeviceInternal See issue #3294 for more details. svn path=/trunk/; revision=33781 --- .../ntgdi/NtGdiSetDIBitsToDeviceInternal.c | 52 +++++++++++++++++++ rostests/apitests/w32knapi/testlist.c | 2 + 2 files changed, 54 insertions(+) create mode 100644 rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c b/rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c new file mode 100644 index 00000000000..e172815437e --- /dev/null +++ b/rostests/apitests/w32knapi/ntgdi/NtGdiSetDIBitsToDeviceInternal.c @@ -0,0 +1,52 @@ +INT +Test_NtGdiSetDIBitsToDeviceInternal(PTESTINFO pti) +{ + static const DWORD InBits[8] = { 0x81, 0x7E, 0x5A, 0x7E, 0x7E, 0x42, 0x7E, 0x81 }; + DWORD OutBits[8]; + + HWND hWnd = CreateWindowW(L"Static", NULL, WS_VISIBLE, + 100, 100, 200, 200, + NULL, NULL, NULL, NULL); + /* This DC has an nonzero origin */ + HDC hDC = GetDC(hWnd); + struct + { + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[2]; + } bmi; + int x, y; + + bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi.bmiHeader.biWidth = 8; + bmi.bmiHeader.biHeight = -8; + bmi.bmiHeader.biPlanes = 1; + bmi.bmiHeader.biBitCount = 1; + bmi.bmiHeader.biCompression = 0; + bmi.bmiHeader.biSizeImage = 0; + bmi.bmiHeader.biXPelsPerMeter = 0; + bmi.bmiHeader.biYPelsPerMeter = 0; + bmi.bmiHeader.biClrUsed = 0; + bmi.bmiHeader.biClrImportant = 0; + *(DWORD *)&bmi.bmiColors[0] = 0x000000; + *(DWORD *)&bmi.bmiColors[1] = 0xFFFFFF; + + /* The destination coordinates are relative to the DC origin */ + TEST(NtGdiSetDIBitsToDeviceInternal(hDC, 2, 3, 8, 8, 0, 0, 0, 8, + (PVOID)InBits, (BITMAPINFO *)&bmi, DIB_RGB_COLORS, + sizeof(InBits), sizeof(bmi), TRUE, NULL)); + + /* Now get the data from the screen, and see if it matches */ + for (y = 0; y < 8; y++) + { + DWORD Row = 0; + for (x = 0; x < 8; x++) + Row |= (0x80 & GetPixel(hDC, 2 + x, 3 + y)) >> x; + OutBits[y] = Row; + } + TEST(memcmp(InBits, OutBits, sizeof(InBits)) == 0); + + ReleaseDC(hWnd, hDC); + DestroyWindow(hWnd); + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/testlist.c b/rostests/apitests/w32knapi/testlist.c index 5d630ffe892..aff2d37a842 100644 --- a/rostests/apitests/w32knapi/testlist.c +++ b/rostests/apitests/w32knapi/testlist.c @@ -22,6 +22,7 @@ #include "ntgdi/NtGdiSelectFont.c" #include "ntgdi/NtGdiSelectPen.c" #include "ntgdi/NtGdiSetBitmapBits.c" +#include "ntgdi/NtGdiSetDIBitsToDeviceInternal.c" //#include "ntgdi/NtGdiSTROBJ_vEnumStart.c" #include "ntgdi/NtGdiGetDIBits.c" #include "ntgdi/NtGdiGetStockObject.c" @@ -64,6 +65,7 @@ TESTENTRY TestList[] = { L"NtGdiGetFontResourceInfoInternalW", Test_NtGdiGetFontResourceInfoInternalW }, { L"NtGdiGetRandomRgn", Test_NtGdiGetRandomRgn }, { L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits }, + { L"NtGdiSetDIBitsToDeviceInternal", Test_NtGdiSetDIBitsToDeviceInternal }, { L"NtGdiSelectBitmap", Test_NtGdiSelectBitmap }, { L"NtGdiSelectBrush", Test_NtGdiSelectBrush }, { L"NtGdiSelectFont", Test_NtGdiSelectFont },