From 56a59e2e51d0cbe93ce16253e52a6421b0168c06 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Wed, 28 Apr 2004 17:21:57 +0000 Subject: Introduce diagonal movement keys on the numeric keypad, and use them as an alternative control method in Cube. (This was a bit of hassle in the Windows front end; I also introduced a debugging framework and made TranslateMessage conditional.) [originally from svn r4162] --- windows.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) (limited to 'windows.c') diff --git a/windows.c b/windows.c index 618d440..3d9820d 100644 --- a/windows.c +++ b/windows.c @@ -18,6 +18,51 @@ #define IDM_QUIT 0x0050 #define IDM_PRESETS 0x0100 +#ifdef DEBUG +static FILE *debug_fp = NULL; +static HANDLE debug_hdl = INVALID_HANDLE_VALUE; +static int debug_got_console = 0; + +void dputs(char *buf) +{ + DWORD dw; + + if (!debug_got_console) { + if (AllocConsole()) { + debug_got_console = 1; + debug_hdl = GetStdHandle(STD_OUTPUT_HANDLE); + } + } + if (!debug_fp) { + debug_fp = fopen("debug.log", "w"); + } + + if (debug_hdl != INVALID_HANDLE_VALUE) { + WriteFile(debug_hdl, buf, strlen(buf), &dw, NULL); + } + fputs(buf, debug_fp); + fflush(debug_fp); +} + +void debug_printf(char *fmt, ...) +{ + char buf[4096]; + va_list ap; + + va_start(ap, fmt); + vsprintf(buf, fmt, ap); + dputs(buf); + va_end(ap); +} + +#define debug(x) (debug_printf x) + +#else + +#define debug(x) + +#endif + struct frontend { midend_data *me; HWND hwnd; @@ -349,11 +394,44 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, case VK_RIGHT: key = CURSOR_RIGHT; break; case VK_UP: key = CURSOR_UP; break; case VK_DOWN: key = CURSOR_DOWN; break; + /* + * Diagonal keys on the numeric keypad. + */ + case VK_PRIOR: + if (!(lParam & 0x01000000)) key = CURSOR_UP_RIGHT; + break; + case VK_NEXT: + if (!(lParam & 0x01000000)) key = CURSOR_DOWN_RIGHT; + break; + case VK_HOME: + if (!(lParam & 0x01000000)) key = CURSOR_UP_LEFT; + break; + case VK_END: + if (!(lParam & 0x01000000)) key = CURSOR_DOWN_LEFT; + break; + /* + * Numeric keypad keys with Num Lock on. + */ + case VK_NUMPAD4: key = CURSOR_LEFT; break; + case VK_NUMPAD6: key = CURSOR_RIGHT; break; + case VK_NUMPAD8: key = CURSOR_UP; break; + case VK_NUMPAD2: key = CURSOR_DOWN; break; + case VK_NUMPAD9: key = CURSOR_UP_RIGHT; break; + case VK_NUMPAD3: key = CURSOR_DOWN_RIGHT; break; + case VK_NUMPAD7: key = CURSOR_UP_LEFT; break; + case VK_NUMPAD1: key = CURSOR_DOWN_LEFT; break; } if (key != -1) { if (!midend_process_key(fe->me, 0, 0, key)) PostQuitMessage(0); + } else { + MSG m; + m.hwnd = hwnd; + m.message = WM_KEYDOWN; + m.wParam = wParam; + m.lParam = lParam & 0xdfff; + TranslateMessage(&m); } } break; @@ -406,7 +484,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) new_window(inst); while (GetMessage(&msg, NULL, 0, 0)) { - TranslateMessage(&msg); DispatchMessage(&msg); } -- cgit v1.1