]> git.tdb.fi Git - libs/gui.git/blob - source/input/keyboard.cpp
Add platform independent constants for keys (win32 code untested)
[libs/gui.git] / source / input / keyboard.cpp
1 /* $Id$
2
3 This file is part of libmspgbase
4 Copyright © 2007 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include <msp/strings/formatter.h>
9 #include "../gbase/display.h"
10 #include "keyboard.h"
11 #include "keys.h"
12
13 namespace Msp {
14 namespace Input {
15
16 Keyboard::Keyboard(Graphics::Window &w):
17         window(w)
18 {
19         name="Keyboard";
20
21         buttons.resize(N_KEYS_, false);
22
23         window.signal_key_press.connect(sigc::mem_fun(this, &Keyboard::key_press));
24         window.signal_key_release.connect(sigc::mem_fun(this, &Keyboard::key_release));
25 }
26
27 std::string Keyboard::get_button_name(unsigned btn) const
28 {
29         if(btn==0)
30                 return "None";
31 #ifndef WIN32
32         const char *str=XKeysymToString(key_to_sys(btn));
33         if(!str)
34                 return format("Key %d", btn);
35         return str;
36 #else
37         char buf[128];
38         unsigned scan=MapVirtualKey(key_to_sys(btn), MAPVK_VK_TO_VCS);
39         if(!GetKeyNameText(scan<<16, buf, sizeof(buf)))
40                 return format("Key %d", btn);
41         return buf;
42 #endif
43 }
44
45 void Keyboard::key_press(unsigned key, unsigned, unsigned)
46 {
47         set_button_state(key_from_sys(key), true, true);
48 }
49
50 void Keyboard::key_release(unsigned key, unsigned)
51 {
52         set_button_state(key_from_sys(key), false, true);
53 }
54
55 } // namespace Input
56 } // namespace Msp