X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fwindows%2Fkeyboard.cpp;h=d9810b18a8416b837054c38fe5617110f8fa6a01;hb=f575d5573d562e53492e5ddb9021142c7ab0e1a6;hp=24b019ebcb5e4c3c8989654433df5f7a95cef6e5;hpb=1aca77b93853ee127ac3bbf6886f7f04920542ef;p=libs%2Fgui.git diff --git a/source/input/windows/keyboard.cpp b/source/input/windows/keyboard.cpp index 24b019e..d9810b1 100644 --- a/source/input/windows/keyboard.cpp +++ b/source/input/windows/keyboard.cpp @@ -1,22 +1,29 @@ #include #include #include "keyboard.h" +#include "keys.h" #include "keys_private.h" +#ifndef MAPVK_VK_TO_VSC #define MAPVK_VK_TO_VSC 0 +#endif namespace Msp { namespace Input { std::string Keyboard::get_button_name(unsigned btn) const { - if(btn==0) + if(btn==KEY_NONE) return "None"; + unsigned vkey = key_to_sys(btn); + unsigned scan = MapVirtualKey(vkey&0xFF, MAPVK_VK_TO_VSC); + scan |= vkey&0x100; + char buf[128]; - unsigned scan = MapVirtualKey(key_to_sys(btn), MAPVK_VK_TO_VSC); if(!GetKeyNameText(scan<<16, buf, sizeof(buf))) return Device::get_button_name(btn); + return buf; } @@ -26,7 +33,19 @@ void Keyboard::input_event(const Graphics::Window::Event &event) { case WM_KEYDOWN: case WM_KEYUP: - set_button_state(key_from_sys(event.wparam), event.msg==WM_KEYDOWN, true); + case WM_SYSKEYDOWN: + case WM_SYSKEYUP: + { + unsigned key = event.wparam | ((event.lparam>>16)&0x100); + if(key==VK_SHIFT) + { + if(((event.lparam>>16)&0xFF)==MapVirtualKey(VK_RSHIFT, MAPVK_VK_TO_VSC)) + key = VK_RSHIFT; + else + key = VK_LSHIFT; + } + set_button_state(key_from_sys(key), (event.msg==WM_KEYDOWN || event.msg==WM_SYSKEYDOWN), true); + } break; case WM_CHAR: signal_character.emit(event.wparam);