From d88e4e55e094b1205071b37b12dc3bfe6412e507 Mon Sep 17 00:00:00 2001 From: Petr Kraus Date: Wed, 23 Jan 2019 18:45:04 +0100 Subject: [PATCH] vkcube: Implement key events in Windows --- cube/cube.c | 27 ++++++++++++++++++++++++++- cube/cube.cpp | 29 +++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/cube/cube.c b/cube/cube.c index 09723c8..b702b28 100644 --- a/cube/cube.c +++ b/cube/cube.c @@ -2397,7 +2397,7 @@ static void demo_run(struct demo *demo) { demo_draw(demo); demo->curFrame++; - if (demo->frameCount != INT_MAX && demo->curFrame == demo->frameCount) { + if (demo->frameCount != INT32_MAX && demo->curFrame == demo->frameCount) { PostQuitMessage(validation_error); } } @@ -2431,6 +2431,22 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { demo_resize(&demo); } break; + case WM_KEYDOWN: + switch (wParam) { + case VK_ESCAPE: + PostQuitMessage(validation_error); + break; + case VK_LEFT: + demo.spin_angle -= demo.spin_increment; + break; + case VK_RIGHT: + demo.spin_angle += demo.spin_increment; + break; + case VK_SPACE: + demo.pause = !demo.pause; + break; + } + return 0; default: break; } @@ -3808,6 +3824,15 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine, // main message loop while (!done) { + if (demo.pause) { + const BOOL succ = WaitMessage(); + + if (!succ) { + struct demo *tmp = &demo; + struct demo *demo = tmp; + ERR_EXIT("WaitMessage() failed on paused demo", "event loop error"); + } + } PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); if (msg.message == WM_QUIT) // check for a quit message { diff --git a/cube/cube.cpp b/cube/cube.cpp index 5b90fd2..a6ac4ff 100644 --- a/cube/cube.cpp +++ b/cube/cube.cpp @@ -2400,7 +2400,7 @@ void Demo::run() { draw(); curFrame++; - if (frameCount != INT_MAX && curFrame == frameCount) { + if (frameCount != UINT32_MAX && curFrame == frameCount) { PostQuitMessage(validation_error); } } @@ -2837,7 +2837,7 @@ void Demo::run_display() { draw(); curFrame++; - if (frameCount != INT32_MAX && curFrame == frameCount) { + if (frameCount != UINT32_MAX && curFrame == frameCount) { quit = true; } } @@ -2874,6 +2874,22 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { demo.resize(); } break; + case WM_KEYDOWN: + switch (wParam) { + case VK_ESCAPE: + PostQuitMessage(validation_error); + break; + case VK_LEFT: + demo.spin_angle -= demo.spin_increment; + break; + case VK_RIGHT: + demo.spin_angle += demo.spin_increment; + break; + case VK_SPACE: + demo.pause = !demo.pause; + break; + } + return 0; default: break; } @@ -2944,6 +2960,15 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine, // main message loop while (!done) { + if (demo.pause) { + const BOOL succ = WaitMessage(); + + if (!succ) { + const auto &suppress_popups = demo.suppress_popups; + ERR_EXIT("WaitMessage() failed on paused demo", "event loop error"); + } + } + PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE); if (msg.message == WM_QUIT) // check for a quit message { -- 2.7.4