Author: tkreuzer Date: Tue Feb 10 22:31:17 2015 New Revision: 66220
URL: http://svn.reactos.org/svn/reactos?rev=66220&view=rev Log: [GDI32_APITEST] Add more helper code
Modified: trunk/rostests/apitests/gdi32/init.c trunk/rostests/apitests/gdi32/init.h
Modified: trunk/rostests/apitests/gdi32/init.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/gdi32/init.c?rev=... ============================================================================== --- trunk/rostests/apitests/gdi32/init.c [iso-8859-1] (original) +++ trunk/rostests/apitests/gdi32/init.c [iso-8859-1] Tue Feb 10 22:31:17 2015 @@ -2,21 +2,18 @@ #include <stdio.h> #include <windef.h> #include <wingdi.h> +#include "init.h"
-HBITMAP ghbmpDIB32; -HDC ghdcDIB32; +HBITMAP ghbmp1, ghbmp4, ghbmp8, ghbmp16, ghbmp24, ghbmp32; +HDC ghdcBmp1, ghdcBmp4, ghdcBmp8, ghdcBmp16, ghdcBmp24, ghdcBmp32; +HBITMAP ghbmpDIB1, ghbmpDIB4, ghbmpDIB8, ghbmpDIB16, ghbmpDIB24, ghbmpDIB32; +HDC ghdcDIB1, ghdcDIB4, ghdcDIB8, ghdcDIB16, ghdcDIB24, ghdcDIB32; +PVOID gpvDIB1, gpvDIB4, gpvDIB8, gpvDIB16, gpvDIB24, gpvDIB32; PULONG pulDIB32Bits; -HBITMAP ghbmpDIB4; -HDC ghdcDIB4; PULONG pulDIB4Bits; HPALETTE ghpal;
-struct -{ - WORD palVersion; - WORD palNumEntries; - PALETTEENTRY logpalettedata[8]; -} gpal = +MYPAL gpal = { 0x300, 8, { @@ -31,23 +28,77 @@ } };
+BOOL +InitPerBitDepth( + _In_ ULONG cBitsPerPixel, + _In_ ULONG cx, + _In_ ULONG cy, + _Out_ HDC *phdcBmp, + _Out_ HBITMAP *phbmp, + _Out_ HDC *phdcDIB, + _Out_ HBITMAP *phbmpDIB, + _Out_ PVOID *ppvBits) +{ + struct + { + BITMAPCOREHEADER bmiHeader; + RGBQUAD bmiColors[256]; + } bmiBuffer; + LPBITMAPINFO pbmi = (LPBITMAPINFO)&bmiBuffer; + + /* Create a compatible DC for the bitmap */ + *phdcBmp = CreateCompatibleDC(0); + if (*phdcBmp == NULL) + { + printf("CreateCompatibleDC failed for %lu bpp\n", cBitsPerPixel); + return FALSE; + } + + /* Create a bitmap */ + *phbmp = CreateBitmap(cx, cy, 1, cBitsPerPixel, NULL); + if (*phbmp == NULL) + { + printf("CreateBitmap failed %lu\n", cBitsPerPixel); + return FALSE; + } + + SelectObject(*phdcBmp, *phbmp); + + /* Get info about the bitmap */ + memset(&bmiBuffer, 0, sizeof(bmiBuffer)); + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + if (!GetDIBits(*phdcBmp, *phbmp, 0, 1, NULL, pbmi, DIB_RGB_COLORS)) + { + printf("GetDIBits failed %lu\n", cBitsPerPixel); + return FALSE; + } + + /* Create a compatible DC for the DIB */ + *phdcDIB = CreateCompatibleDC(0); + if (*phdcDIB == NULL) + { + printf("CreateCompatibleDC failed %lu\n", cBitsPerPixel); + return FALSE; + } + + pbmi->bmiHeader.biCompression = BI_RGB; + pbmi->bmiHeader.biHeight = -pbmi->bmiHeader.biHeight; + + /* Create the DIB section with the same values */ + *phbmpDIB = CreateDIBSection(*phdcDIB, pbmi, DIB_RGB_COLORS, ppvBits, 0, 0 ); + if (*phbmpDIB == NULL) + { + printf("CreateDIBSection failed. %lu\n", cBitsPerPixel); + return FALSE; + } + + SelectObject(*phdcDIB, *phbmpDIB); + + return TRUE; +} + BOOL InitStuff(void) { - BITMAPINFO bmi32 = - {{sizeof(BITMAPINFOHEADER), 4, -4, 1, 32, BI_RGB, 0, 1, 1, 0, 0}}; - BITMAPINFO bmi4 = - {{sizeof(BITMAPINFOHEADER), 4, -4, 1, 4, BI_RGB, 0, 1, 1, 0, 0}}; - - ghdcDIB32 = CreateCompatibleDC(0); - ghdcDIB4 = CreateCompatibleDC(0); - - ghbmpDIB32 = CreateDIBSection(ghdcDIB32, &bmi32, DIB_PAL_COLORS, (PVOID*)&pulDIB32Bits, 0, 0 ); - if (!ghbmpDIB32) return FALSE; - - ghbmpDIB4 = CreateDIBSection(ghdcDIB4, &bmi4, DIB_PAL_COLORS, (PVOID*)&pulDIB4Bits, 0, 0 ); - if (!ghbmpDIB32) return FALSE; - - SelectObject(ghdcDIB32, ghbmpDIB32);
/* Initialize a logical palette */ ghpal = CreatePalette((LOGPALETTE*)&gpal); @@ -57,5 +108,19 @@ return FALSE; }
+ if (!InitPerBitDepth(1, 9, 9, &ghdcBmp1, &ghbmp1, &ghdcDIB1, &ghbmpDIB1, &gpvDIB1) || + !InitPerBitDepth(4, 5, 5, &ghdcBmp4, &ghbmp4, &ghdcDIB4, &ghbmpDIB4, &gpvDIB4) || + !InitPerBitDepth(8, 5, 5, &ghdcBmp8, &ghbmp8, &ghdcDIB8, &ghbmpDIB8, &gpvDIB8) || + !InitPerBitDepth(16, 5, 5, &ghdcBmp16, &ghbmp16, &ghdcDIB16, &ghbmpDIB16, &gpvDIB16) || + !InitPerBitDepth(24, 5, 5, &ghdcBmp24, &ghbmp24, &ghdcDIB24, &ghbmpDIB24, &gpvDIB24) || + !InitPerBitDepth(32, 4, 4, &ghdcBmp32, &ghbmp32, &ghdcDIB32, &ghbmpDIB32, &gpvDIB32)) + { + printf("failed to create objects \n"); + return FALSE; + } + + pulDIB32Bits = gpvDIB32; + pulDIB4Bits = gpvDIB4; + return TRUE; }
Modified: trunk/rostests/apitests/gdi32/init.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/gdi32/init.h?rev=... ============================================================================== --- trunk/rostests/apitests/gdi32/init.h [iso-8859-1] (original) +++ trunk/rostests/apitests/gdi32/init.h [iso-8859-1] Tue Feb 10 22:31:17 2015 @@ -1,16 +1,22 @@ + +extern HBITMAP ghbmp1, ghbmp4, ghbmp8, ghbmp16, ghbmp24, ghbmp32; +extern HDC ghdcBmp1, ghdcBmp4, ghdcBmp8, ghdcBmp16, ghdcBmp24, ghdcBmp32; +extern HBITMAP ghbmpDIB1, ghbmpDIB4, ghbmpDIB8, ghbmpDIB16, ghbmpDIB24, ghbmpDIB32; +extern HDC ghdcDIB1, ghdcDIB4, ghdcDIB8, ghdcDIB16, ghdcDIB24, ghdcDIB32; +extern PVOID pvBits1Bpp, pvBits4Bpp, pvBits8Bpp, pvBits16Bpp, pvBits24Bpp, pvBits32Bpp;
extern HBITMAP ghbmpDIB32; -extern HDC ghdcDIB32; extern PULONG pulDIB32Bits; -extern HBITMAP ghbmpDIB4; -extern HDC ghdcDIB4; extern PULONG pulDIB4Bits; extern HPALETTE ghpal; -extern struct +typedef struct { - LOGPALETTE logpal; + WORD palVersion; + WORD palNumEntries; PALETTEENTRY logpalettedata[8]; -} gpal; +} MYPAL; + +extern MYPAL gpal;
BOOL InitStuff(void);