230 lines
5 KiB
C++
230 lines
5 KiB
C++
|
|
#include "X11Keyboard.h"
|
|
#include <X11/Xlib.h>
|
|
#include <X11/keysym.h>
|
|
#include <Spectre/System/Log.h>
|
|
|
|
namespace sp {
|
|
|
|
static Keyboard::Key KeySymToKeyboardKey(KeySym key) {
|
|
|
|
switch(key) {
|
|
// Letters
|
|
case XK_A: case XK_a:
|
|
return Keyboard::Key::A;
|
|
case XK_B: case XK_b:
|
|
return Keyboard::Key::B;
|
|
case XK_C: case XK_c:
|
|
return Keyboard::Key::C;
|
|
case XK_D: case XK_d:
|
|
return Keyboard::Key::D;
|
|
case XK_E: case XK_e:
|
|
return Keyboard::Key::E;
|
|
case XK_F: case XK_f:
|
|
return Keyboard::Key::F;
|
|
case XK_G: case XK_g:
|
|
return Keyboard::Key::G;
|
|
case XK_H: case XK_h:
|
|
return Keyboard::Key::H;
|
|
case XK_I: case XK_i:
|
|
return Keyboard::Key::I;
|
|
case XK_J: case XK_j:
|
|
return Keyboard::Key::J;
|
|
case XK_K: case XK_k:
|
|
return Keyboard::Key::K;
|
|
case XK_L: case XK_l:
|
|
return Keyboard::Key::L;
|
|
case XK_M: case XK_m:
|
|
return Keyboard::Key::M;
|
|
case XK_N: case XK_n:
|
|
return Keyboard::Key::N;
|
|
case XK_O: case XK_o:
|
|
return Keyboard::Key::O;
|
|
case XK_P: case XK_p:
|
|
return Keyboard::Key::P;
|
|
case XK_Q: case XK_q:
|
|
return Keyboard::Key::Q;
|
|
case XK_R: case XK_r:
|
|
return Keyboard::Key::R;
|
|
case XK_S: case XK_s:
|
|
return Keyboard::Key::S;
|
|
case XK_T: case XK_t:
|
|
return Keyboard::Key::T;
|
|
case XK_U: case XK_u:
|
|
return Keyboard::Key::U;
|
|
case XK_V: case XK_v:
|
|
return Keyboard::Key::V;
|
|
case XK_W: case XK_w:
|
|
return Keyboard::Key::W;
|
|
case XK_X: case XK_x:
|
|
return Keyboard::Key::X;
|
|
case XK_Y: case XK_y:
|
|
return Keyboard::Key::Y;
|
|
case XK_Z: case XK_z:
|
|
return Keyboard::Key::Z;
|
|
|
|
// Numbers
|
|
case XK_1:
|
|
return Keyboard::Key::One;
|
|
case XK_2:
|
|
return Keyboard::Key::Two;
|
|
case XK_3:
|
|
return Keyboard::Key::Three;
|
|
case XK_4:
|
|
return Keyboard::Key::Four;
|
|
case XK_5:
|
|
return Keyboard::Key::Five;
|
|
case XK_6:
|
|
return Keyboard::Key::Six;
|
|
case XK_7:
|
|
return Keyboard::Key::Seven;
|
|
case XK_8:
|
|
return Keyboard::Key::Eight;
|
|
case XK_9:
|
|
return Keyboard::Key::Nine;
|
|
case XK_0:
|
|
return Keyboard::Key::Zero;
|
|
|
|
case XK_period :
|
|
return Keyboard::Key::Period;
|
|
case XK_comma :
|
|
return Keyboard::Key::Comma;
|
|
case XK_Return :
|
|
return Keyboard::Key::Enter;
|
|
case XK_BackSpace :
|
|
return Keyboard::Key::Backspace;
|
|
case XK_Escape :
|
|
return Keyboard::Key::Escape;
|
|
case XK_space :
|
|
return Keyboard::Key::Space;
|
|
case XK_Caps_Lock :
|
|
return Keyboard::Key::Capslock;
|
|
|
|
// Arrows
|
|
case XK_Up :
|
|
return Keyboard::Key::Up;
|
|
case XK_Down :
|
|
return Keyboard::Key::Down;
|
|
case XK_Left :
|
|
return Keyboard::Key::Left;
|
|
case XK_Right :
|
|
return Keyboard::Key::Right;
|
|
|
|
// Numpad
|
|
|
|
case XK_KP_1 : case XK_KP_End :
|
|
return Keyboard::Key::Numpad1;
|
|
case XK_KP_2 : case XK_KP_Down :
|
|
return Keyboard::Key::Numpad2;
|
|
case XK_KP_3 : case XK_KP_Page_Down :
|
|
return Keyboard::Key::Numpad3;
|
|
case XK_KP_4 : case XK_KP_Left :
|
|
return Keyboard::Key::Numpad4;
|
|
case XK_KP_5 : case XK_KP_Begin :
|
|
return Keyboard::Key::Numpad5;
|
|
case XK_KP_6 : case XK_KP_Right :
|
|
return Keyboard::Key::Numpad6;
|
|
case XK_KP_7 : case XK_KP_Home :
|
|
return Keyboard::Key::Numpad7;
|
|
case XK_KP_8 : case XK_KP_Up :
|
|
return Keyboard::Key::Numpad8;
|
|
case XK_KP_9 : case XK_KP_Page_Up :
|
|
return Keyboard::Key::Numpad9;
|
|
case XK_KP_0 : case XK_KP_Insert :
|
|
return Keyboard::Key::Numpad0;
|
|
|
|
case XK_Home :
|
|
return Keyboard::Key::Home;
|
|
case XK_End :
|
|
return Keyboard::Key::End;
|
|
case XK_Insert :
|
|
return Keyboard::Key::Insert;
|
|
case XK_Delete :
|
|
return Keyboard::Key::Delete;
|
|
case XK_Page_Up :
|
|
return Keyboard::Key::PageUp;
|
|
case XK_Page_Down :
|
|
return Keyboard::Key::PageDown;
|
|
case XK_Pause :
|
|
return Keyboard::Key::Pause;
|
|
|
|
|
|
// Function keys
|
|
case XK_F1 :
|
|
return Keyboard::Key::F1;
|
|
case XK_F2 :
|
|
return Keyboard::Key::F2;
|
|
case XK_F3 :
|
|
return Keyboard::Key::F3;
|
|
case XK_F4 :
|
|
return Keyboard::Key::F4;
|
|
case XK_F5 :
|
|
return Keyboard::Key::F5;
|
|
case XK_F6 :
|
|
return Keyboard::Key::F6;
|
|
case XK_F7 :
|
|
return Keyboard::Key::F7;
|
|
case XK_F8 :
|
|
return Keyboard::Key::F8;
|
|
case XK_F9 :
|
|
return Keyboard::Key::F9;
|
|
case XK_F10 :
|
|
return Keyboard::Key::F10;
|
|
case XK_F11 :
|
|
return Keyboard::Key::F11;
|
|
case XK_F12 :
|
|
return Keyboard::Key::F12;
|
|
|
|
case XK_Tab :
|
|
return Keyboard::Key::Tab;
|
|
case XK_Shift_L :
|
|
return Keyboard::Key::LShift;
|
|
case XK_Shift_R :
|
|
return Keyboard::Key::RShift;
|
|
case XK_Control_L :
|
|
return Keyboard::Key::LCtrl;
|
|
case XK_Control_R :
|
|
return Keyboard::Key::RCtrl;
|
|
case XK_Alt_L :
|
|
return Keyboard::Key::LAlt;
|
|
case XK_Alt_R :
|
|
#ifdef XK_XKB_KEYS
|
|
case XK_ISO_Level3_Shift :
|
|
#endif /* XK_XKB_KEYS */
|
|
return Keyboard::Key::RAlt;
|
|
|
|
default:
|
|
sp::Log::debug("X11Keyboard - Unknown keycode: 0x%X", key);
|
|
return Keyboard::Key::Unknown;
|
|
};
|
|
}
|
|
|
|
void X11Keyboard::init()
|
|
{
|
|
|
|
}
|
|
|
|
bool X11Keyboard::isKeyDown(Keyboard::Key key)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool X11Keyboard::handleMessage(XKeyEvent* xkeyevent, Event& event)
|
|
{
|
|
KeySym sym = ::XLookupKeysym(xkeyevent, 0);
|
|
Keyboard::Key code = KeySymToKeyboardKey(sym);
|
|
|
|
if (code != Keyboard::Key::Unknown) {
|
|
event.type = Event::Key;
|
|
event.key.code = code;
|
|
event.key.pressed = xkeyevent->type == KeyPress;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void X11Keyboard::update(InputModule *input)
|
|
{
|
|
}
|
|
|
|
} // namespace sp
|