reactos/rostests/apitests/w32knapi/ntuser/NtUserSelectPalette.c

149 lines
3.8 KiB
C
Raw Normal View History

FORCEINLINE
PALETTEENTRY
PALENTRY(BYTE r, BYTE g, BYTE b)
{
PALETTEENTRY ret;
ret.peRed = r;
ret.peGreen = g;
ret.peBlue = b;
ret.peFlags = 0;
return ret;
}
INT
Test_NtUserSelectPalette(PTESTINFO pti)
{
HPALETTE hPal, hOldPal;
HWND hWnd;
HDC hDC, hCompDC;
struct
{
LOGPALETTE logpal;
PALETTEENTRY entry[20];
} pal;
ZeroMemory(&pal, sizeof(pal));
pal.logpal.palVersion = 0x300;
pal.logpal.palNumEntries = 6;
pal.entry[0] = PALENTRY(0,0,0);
pal.entry[1] = PALENTRY(255,255,255);
pal.entry[2] = PALENTRY(128,128,128);
pal.entry[3] = PALENTRY(128,0,0);
pal.entry[4] = PALENTRY(0,128,0);
pal.entry[5] = PALENTRY(0,0,128);
hPal = CreatePalette(&pal.logpal);
ASSERT(hPal);
TEST(DeletePalette(hPal) == 1);
hPal = CreatePalette(&pal.logpal);
ASSERT(hPal);
/* Create a window */
hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
NULL, NULL, g_hInstance, 0);
hDC = GetDC(hWnd);
ASSERT(hDC);
hCompDC = CreateCompatibleDC(hDC);
ASSERT(hCompDC);
/* Test NULL DC */
SetLastError(ERROR_SUCCESS);
hOldPal = NtUserSelectPalette(NULL, hPal, 0);
TEST(hOldPal == 0);
TEST(GetLastError() == ERROR_SUCCESS);
/* Test invalid DC */
SetLastError(ERROR_SUCCESS);
hOldPal = NtUserSelectPalette((HDC)-1, hPal, 0);
TEST(hOldPal == 0);
TEST(GetLastError() == ERROR_SUCCESS);
/* Test NULL palette */
SetLastError(ERROR_SUCCESS);
hOldPal = NtUserSelectPalette(hDC, NULL, 0);
TEST(hOldPal == 0);
TEST(GetLastError() == ERROR_SUCCESS);
/* Test invalid palette */
SetLastError(ERROR_SUCCESS);
hOldPal = NtUserSelectPalette(hDC, (HPALETTE)-1, 0);
TEST(hOldPal == 0);
TEST(GetLastError() == ERROR_SUCCESS);
/* Test valid palette */
hOldPal = NtUserSelectPalette(hDC, hPal, 0);
TEST(hOldPal != 0);
TEST(hOldPal == GetStockObject(DEFAULT_PALETTE));
/* We cannot Delete the palette */
TEST(DeletePalette(hPal) == 0);
/* We can still select the Palette into a compatible DC */
hOldPal = NtUserSelectPalette(hCompDC, hPal, 0);
TEST(hOldPal != 0);
#if 0
RealizePalette(hDC);
GetClientRect(hWnd, &rect);
FillRect(hDC, &rect, GetSysColorBrush(COLOR_BTNSHADOW));
TEST(GetNearestColor(hDC, RGB(0,0,0)) == RGB(0,0,0));
TEST(GetNearestColor(hDC, RGB(0,0,1)) == RGB(0,0,1));
ReleaseDC(hWnd, hDC);
DestroyWindow(hWnd);
RECT rect;
HBITMAP hBmp;
BITMAPINFOHEADER bmih = {sizeof(BITMAPINFOHEADER), // biSize
3, // biWidth
3, // biHeight
1, // biPlanes
8, // biBitCount
BI_RGB, // biCompression
0, // biSizeImage
92, // biXPelsPerMeter
92, // biYPelsPerMeter
6, // biClrUsed
6}; // biClrImportant
BYTE bits[3][3] = {{0,1,2},{3,4,5},{6,1,2}};
struct
{
BITMAPINFOHEADER bmih;
RGBQUAD colors[6];
} bmi = {{sizeof(BITMAPINFOHEADER),3,3,1,8,BI_RGB,0,92,92,6,6},
{{0,0,0,0},{255,255,255,0},{255,0,0,0},
{0,255,0,0},{0,0,255,0},{128,128,128,0}}};
hBmp = CreateDIBitmap(hCompDC, &bmih, CBM_INIT, &bits, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
ASSERT(hBmp);
SetLastError(0);
TEST(NtGdiSelectBitmap(hCompDC, hBmp));
hOldPal = NtUserSelectPalette(hCompDC, hPal, 0);
TEST(hOldPal != NULL);
RealizePalette(hCompDC);
TEST(GetNearestColor(hCompDC, RGB(0,0,0)) == RGB(0,0,0));
TEST(GetNearestColor(hCompDC, RGB(0,0,1)) == RGB(0,0,0));
TEST(GetNearestColor(hCompDC, RGB(100,0,0)) == RGB(0,0,0));
TEST(GetNearestColor(hCompDC, RGB(250,250,250)) == RGB(255,255,255));
TEST(GetNearestColor(hCompDC, RGB(120,100,110)) == RGB(128,128,128));
printf("nearest = 0x%x\n", GetNearestColor(hCompDC, RGB(120,100,110)));
#endif
return APISTATUS_NORMAL;
}