From 189ee56c4c71b2e40b57e5f1b6083a28667cb5fb Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 19 May 2015 15:34:47 -0300 Subject: [PATCH] Implement she::is_key_pressed() on Win32 for the Skia port --- src/she/skia/she.cpp | 5 +++-- src/she/win/vk.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/she/skia/she.cpp b/src/she/skia/she.cpp index cb5480e50..25d439766 100644 --- a/src/she/skia/she.cpp +++ b/src/she/skia/she.cpp @@ -34,11 +34,12 @@ void error_message(const char* msg) // TODO } +#ifndef _WIN32 bool is_key_pressed(KeyScancode scancode) { - // TODO - return false; + return false; // Do nothing } +#endif void clear_keyboard_buffer() { diff --git a/src/she/win/vk.cpp b/src/she/win/vk.cpp index a4bffbc63..b624202a1 100644 --- a/src/she/win/vk.cpp +++ b/src/she/win/vk.cpp @@ -294,4 +294,34 @@ KeyScancode win32vk_to_scancode(int vk) { return keymap[vk]; } +static int scancode_to_win32vk(KeyScancode scancode) { + static int initialized = false; + static int keymap[kKeyScancodes]; + + if (!initialized) { + initialized = true; + for (int i=0; i kKeyScancodes) + scancode = kKeyNil; + + return keymap[scancode]; +} + +bool is_key_pressed(KeyScancode scancode) +{ + int vk = scancode_to_win32vk(scancode); + if (vk) + return (GetKeyState(vk) & 0xf000 ? true: false); + else + return false; +} + } // namespace she