X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fkeyboard.cpp;h=02ff12eb2c0c2e7d02f739e776ddc6433bc9c815;hb=cc728fda1325c5358f3ec177d31621b5688371fe;hp=240d700fccc4b45620cbd40c4f728face25f7c58;hpb=999ca92aa9ee10585c0b2094d84364159253982f;p=libs%2Fgui.git diff --git a/source/input/keyboard.cpp b/source/input/keyboard.cpp index 240d700..02ff12e 100644 --- a/source/input/keyboard.cpp +++ b/source/input/keyboard.cpp @@ -1,36 +1,42 @@ -/* $Id$ - -This file is part of libmspgbase -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - -#include -#include "../gbase/display.h" +#ifdef WIN32 +#include +#else +#include +#endif +#include +#include #include "keyboard.h" +#include "keys.h" + +#define MAPVK_VK_TO_VSC 0 namespace Msp { namespace Input { -Keyboard::Keyboard(Graphics::Window &w): - window(w) +Keyboard::Keyboard(Graphics::EventSource &s): + source(s) { - name="Keyboard"; + name = "Keyboard"; - buttons.resize(256, false); + buttons.resize(N_KEYS_, false); - window.signal_key_press.connect(sigc::mem_fun(this, &Keyboard::key_press)); - window.signal_key_release.connect(sigc::mem_fun(this, &Keyboard::key_release)); + source.signal_key_press.connect(sigc::mem_fun(this, &Keyboard::key_press)); + source.signal_key_release.connect(sigc::mem_fun(this, &Keyboard::key_release)); } std::string Keyboard::get_button_name(unsigned btn) const { + if(btn==0) + return "None"; #ifndef WIN32 - KeySym ksym=XKeycodeToKeysym(window.get_display().get_display(), btn, 0); - return XKeysymToString(ksym); + const char *str = XKeysymToString(key_to_sys(btn)); + if(!str) + return format("Key %d", btn); + return str; #else char buf[128]; - if(!GetKeyNameText(btn<<16, buf, sizeof(buf))) + unsigned scan = MapVirtualKey(key_to_sys(btn), MAPVK_VK_TO_VSC); + if(!GetKeyNameText(scan<<16, buf, sizeof(buf))) return format("Key %d", btn); return buf; #endif @@ -38,12 +44,12 @@ std::string Keyboard::get_button_name(unsigned btn) const void Keyboard::key_press(unsigned key, unsigned, unsigned) { - set_button_state(key, true, true); + set_button_state(key_from_sys(key), true, true); } void Keyboard::key_release(unsigned key, unsigned) { - set_button_state(key, false, true); + set_button_state(key_from_sys(key), false, true); } } // namespace Input