void input_dokeys (void) { int i; // for each key defined, see if it's pressed, and whether we need to run its pressed function for (i = 0; keydefs [i].name; i++) { if (input_keydown (keydefs [i].name)) { // run the function, if the last time this was pressed was more than a tick ago if (keydefs [i].last < curtick - 1) { if (SDL_GetModState () == KMOD_LSHIFT && keydefs [i].sfunc) keydefs [i].sfunc (); else keydefs [i].func (); } keydefs [i].last = curtick; } } }
static LRESULT CALLBACK wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { int x, y, w, h; msg_t m; x = GET_X_LPARAM(lparam); y = GET_Y_LPARAM(lparam); w = LOWORD(lparam); h = HIWORD(lparam); switch (msg) { case WM_CLOSE: PostQuitMessage(0); break; case WM_SIZE: if (init_done) do_resize(w, h); break; case WM_MOVE: break; case WM_EXITSIZEMOVE: break; case WM_MOUSELEAVE: tracking = 0; break; case WM_MOUSEMOVE: if (clipcursor) update_clip(hwnd); //TODO: shouldnt be here if (!tracking) { TrackMouseEvent(&tme); tracking = 1; } input_mmove(&input, x, y, 0); break; case WM_LBUTTONDOWN: input_mdown(&input, x, y, 0, 0); break; case WM_LBUTTONUP: input_mup(&input, x, y, 0, 0); break; case WM_RBUTTONDOWN: input_mdown(&input, x, y, 0, 2); break; case WM_RBUTTONUP: input_mup(&input, x, y, 0, 2); break; case WM_MBUTTONDOWN: input_mdown(&input, x, y, 0, 1); break; case WM_MBUTTONUP: input_mup(&input, x, y, 0, 1); break; case WM_MOUSEWHEEL: input_mwheel(&input, (double) (int16_t)HIWORD(wparam) / 120.0); break; case WM_KEYDOWN: if (wparam == VK_F1) { if (!clipcursor) update_clip(hwnd); else ClipCursor(0); clipcursor = !clipcursor; break; } input_keydown(&input, wparam, wparam); break; case WM_KEYUP: input_keyup(&input, wparam); break; case WM_USER: m.v = wparam; do_msg(m.id, m.v8, m.v16, m.value, (void*)lparam); break; default: return DefWindowProc(hwnd, msg, wparam, lparam); } return 0; }