rdesktop/tests/brushtest.c
Jay Sorg a42c5895f6 added brushtest
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@1483 423420c4-83ab-492f-b58f-81f9feb106b5
2008-11-02 03:55:00 +00:00

216 lines
5.2 KiB
C

/* by Jay Sorg, public domain
for testing brush cache */
#include <windows.h>
static HWND g_wnd;
static HWND g_button;
static HWND g_pulldown;
/*****************************************************************************/
static int WINAPI
brush_test(int selindex, int orgx, int orgy)
{
HDC dc;
RECT rect;
HBRUSH br;
BITMAPINFO* bi;
RGBQUAD ce;
int bi_size;
int i;
int j;
UCHAR* d8;
bi_size = sizeof(BITMAPINFO) + 15 * sizeof(RGBQUAD) + 4 * 8;
bi = malloc(bi_size);
memset(bi, 0, bi_size);
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi->bmiHeader.biWidth = 8;
bi->bmiHeader.biHeight = 8;
bi->bmiHeader.biPlanes = 1;
bi->bmiHeader.biBitCount = 4;
bi->bmiHeader.biCompression = BI_RGB;
bi->bmiHeader.biSizeImage = 32;
ce.rgbBlue = 0xff;
ce.rgbGreen = 0;
ce.rgbRed = 0;
ce.rgbReserved = 0;
bi->bmiColors[0] = ce;
ce.rgbBlue = 0;
ce.rgbGreen = 0xff;
ce.rgbRed = 0;
ce.rgbReserved = 0;
bi->bmiColors[1] = ce;
ce.rgbBlue = 0;
ce.rgbGreen = 0;
ce.rgbRed = 0xff;
ce.rgbReserved = 0;
bi->bmiColors[2] = ce;
ce.rgbBlue = 0x0f;
ce.rgbGreen = 0;
ce.rgbRed = 0;
ce.rgbReserved = 0;
bi->bmiColors[3] = ce;
ce.rgbBlue = 0;
ce.rgbGreen = 0x0f;
ce.rgbRed = 0;
ce.rgbReserved = 0;
bi->bmiColors[4] = ce;
d8 = (UCHAR*)bi;
d8 = (d8 + bi_size) - 32;
if (selindex == 1) /* 2 color */
{
d8[0] = 0x10;
}
else if (selindex == 2) /* 4 color */
{
d8[0] = 0x12;
d8[1] = 0x33;
}
else if (selindex == 3) /* > 4 color */
{
d8[0] = 0x12;
d8[1] = 0x34;
}
br = CreateDIBPatternBrushPt(bi, DIB_RGB_COLORS);
if (br == 0)
{
MessageBox(g_wnd, "error in CreateDIBPatternBrushPt", "error", MB_OK);
}
dc = GetDC(g_wnd);
rect.left = 100;
rect.top = 60;
rect.right = rect.left + 128;
rect.bottom = rect.top + 128;
for (j = 0; j < 128; j += 5)
{
for (i = 0; i < 128; i += 5)
{
SetBrushOrgEx(dc, orgx + i, orgy + j, 0);
FillRect(dc, &rect, br);
}
}
DeleteObject(br);
free(bi);
ReleaseDC(g_wnd, dc);
return 0;
}
/*****************************************************************************/
static LRESULT CALLBACK
WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hwndCtl;
int selindex;
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
hwndCtl = (HWND) lParam;
if (hwndCtl == g_button)
{
selindex = SendMessage(g_pulldown, CB_GETCURSEL, 0, 0);
if (selindex < 1)
{
MessageBox(g_wnd, "please select one", "info", MB_OK);
}
else
{
brush_test(selindex, 4, 4);
}
}
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
/*****************************************************************************/
static int WINAPI
create_window(void)
{
WNDCLASS wc;
DWORD style;
int x;
int y;
int w;
int h;
ZeroMemory(&wc, sizeof(wc));
wc.lpfnWndProc = WndProc; /* points to window procedure */
wc.lpszClassName = "brushtest";
wc.hbrBackground = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
wc.hCursor = LoadCursor(0, IDC_ARROW);
/* Register the window class. */
if (!RegisterClass(&wc))
{
return 1; /* Failed to register window class */
}
style = WS_OVERLAPPED | WS_CAPTION | WS_POPUP | WS_MINIMIZEBOX |
WS_SYSMENU | WS_SIZEBOX | WS_MAXIMIZEBOX;
x = CW_USEDEFAULT;
y = CW_USEDEFAULT;
w = 640;
h = 480;
g_wnd = CreateWindow(wc.lpszClassName, "brushtest",
style, x, y, w, h, 0, 0, 0, 0);
/* button */
style = WS_CHILD | WS_VISIBLE;
g_button = CreateWindow("BUTTON", "Go", style, 300, 10, 80, 24, g_wnd,
0, 0, 0);
/* pull down */
style = WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST;
g_pulldown = CreateWindow("COMBOBOX", "", style, 100, 10, 160, 150, g_wnd,
0, 0, 0);
ShowWindow(g_wnd, SW_SHOWNORMAL);
SendMessage(g_pulldown, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) "");
SendMessage(g_pulldown, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) "2 color test");
SendMessage(g_pulldown, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) "4 color test");
SendMessage(g_pulldown, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) "> 4 color test");
return 0;
}
/*****************************************************************************/
static int WINAPI
main_loop(void)
{
BOOL cont;
BOOL gmcode;
MSG msg1;
create_window();
cont = TRUE;
while (cont)
{
MsgWaitForMultipleObjects(0, 0, 0, INFINITE, QS_ALLINPUT);
while (cont && PeekMessage(&msg1, 0, 0, 0, PM_NOREMOVE))
{
gmcode = GetMessage(&msg1, 0, 0, 0);
if (gmcode && (gmcode != -1))
{
TranslateMessage(&msg1);
DispatchMessage(&msg1);
}
else
{
cont = FALSE;
}
}
}
return 0;
}
/*****************************************************************************/
int WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
int rv;
rv = main_loop();
return rv;
}