1 #include <msp/input/keys.h>
3 #include "systemkeyboardinput.h"
8 SystemKeyboardInput::SystemKeyboardInput(Root &r, Input::Keyboard &k):
12 keyboard.signal_button_press.connect(sigc::mem_fun(this, &SystemKeyboardInput::key_press));
13 keyboard.signal_button_release.connect(sigc::mem_fun(this, &SystemKeyboardInput::key_release));
14 keyboard.signal_character.connect(sigc::mem_fun(this, &SystemKeyboardInput::character));
17 bool SystemKeyboardInput::key_press(unsigned key)
19 if(!root.is_visible())
22 if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
23 modifier_state |= MOD_SHIFT;
24 else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
25 modifier_state |= MOD_CTRL;
26 else if(key==Input::KEY_ALT_L || key==Input::KEY_ALT_R)
27 modifier_state |= MOD_ALT;
29 if(root.key_press(key, modifier_state))
34 case Input::KEY_LEFT: return root.navigate(NAV_LEFT);
35 case Input::KEY_RIGHT: return root.navigate(NAV_RIGHT);
36 case Input::KEY_UP: return root.navigate(NAV_UP);
37 case Input::KEY_DOWN: return root.navigate(NAV_DOWN);
38 case Input::KEY_TAB: return root.navigate((modifier_state&MOD_SHIFT) ? NAV_PREVIOUS : NAV_NEXT);
39 case Input::KEY_SPACE: return root.navigate(NAV_ACTIVATE);
40 case Input::KEY_ENTER: return root.navigate(NAV_ACCEPT);
41 case Input::KEY_ESC: return root.navigate(NAV_CANCEL);
47 bool SystemKeyboardInput::key_release(unsigned key)
51 bool result = root.key_release(key, modifier_state);
53 if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
54 modifier_state &= ~MOD_SHIFT;
55 else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
56 modifier_state &= ~MOD_CTRL;
57 else if(key==Input::KEY_ALT_L || key==Input::KEY_ALT_R)
58 modifier_state &= ~MOD_ALT;
66 bool SystemKeyboardInput::character(StringCodec::unichar ch)
69 return root.character(ch);