NRE_LinuxKeyTranslater.hpp
Go to the documentation of this file.
1 
10  #pragma once
11 
12  #include "../../../../../System/Event/Input/Keys/NRE_Keys.hpp"
13  #include <X11/Xlib.h>
14  #include <X11/keysym.h>
15 
20  namespace NRE {
25  namespace Event {
26 
31  class KeyTranslater {
32  public : // Methods
33  //## Methods ##//
39  KeyCode translateKey(XKeyEvent const& keyEvent) const;
40 
41 
42  private : // Static
47  struct NativeKeyToKey {
48  KeySym keySym;
49  KeyCode key;
50  };
55  static constexpr NativeKeyToKey translationMap[] {
56  { XK_Right, KeyCode::RIGHT },
57  { XK_Left, KeyCode::LEFT },
58  { XK_Down, KeyCode::DOWN },
59  { XK_Up, KeyCode::UP },
60  { XK_space, KeyCode::SPACE },
61  { XK_Return, KeyCode::ENTER },
62  { XK_Escape, KeyCode::ESCAPE },
63  { XK_BackSpace, KeyCode::BACKSPACE },
64  { XK_Tab, KeyCode::TAB },
65  { XK_Caps_Lock, KeyCode::CAPS_LOCK },
66  { XK_Control_L, KeyCode::LEFT_CONTROL },
67  { XK_Shift_L, KeyCode::LEFT_SHIFT },
68  { XK_Alt_L, KeyCode::LEFT_ALT },
69  { XK_Meta_L, KeyCode::LEFT_META },
70  { XK_Super_L, KeyCode::LEFT_META },
71  { XK_Control_R, KeyCode::RIGHT_CONTROL },
72  { XK_Shift_R, KeyCode::RIGHT_SHIFT },
73  { XK_Alt_R, KeyCode::RIGHT_ALT },
74  { XK_ISO_Level3_Shift, KeyCode::RIGHT_ALT },
75  { XK_Meta_R, KeyCode::RIGHT_META },
76  { XK_Super_R, KeyCode::RIGHT_META },
77  { XK_KP_End, KeyCode::KEYPAD_1 },
78  { XK_KP_Down, KeyCode::KEYPAD_2 },
79  { XK_KP_Next, KeyCode::KEYPAD_3 },
80  { XK_KP_Left, KeyCode::KEYPAD_4 },
81  { XK_KP_Begin, KeyCode::KEYPAD_5 },
82  { XK_KP_Right, KeyCode::KEYPAD_6 },
83  { XK_KP_Home, KeyCode::KEYPAD_7 },
84  { XK_KP_Up, KeyCode::KEYPAD_8 },
85  { XK_KP_Prior, KeyCode::KEYPAD_9 },
86  { XK_KP_Insert, KeyCode::KEYPAD_0 },
87  { XK_KP_1, KeyCode::KEYPAD_1 },
88  { XK_KP_2, KeyCode::KEYPAD_2 },
89  { XK_KP_3, KeyCode::KEYPAD_3 },
90  { XK_KP_4, KeyCode::KEYPAD_4 },
91  { XK_KP_5, KeyCode::KEYPAD_5 },
92  { XK_KP_6, KeyCode::KEYPAD_6 },
93  { XK_KP_7, KeyCode::KEYPAD_7 },
94  { XK_KP_8, KeyCode::KEYPAD_8 },
95  { XK_KP_9, KeyCode::KEYPAD_9 },
96  { XK_KP_0, KeyCode::KEYPAD_0 },
97  { XK_ampersand, KeyCode::NUM_1 },
98  { XK_eacute, KeyCode::NUM_2 },
99  { XK_quotedbl, KeyCode::NUM_3 },
100  { XK_apostrophe, KeyCode::NUM_4 },
101  { XK_parenleft, KeyCode::NUM_5 },
102  { XK_minus, KeyCode::NUM_6 },
103  { XK_egrave, KeyCode::NUM_7 },
104  { XK_underscore, KeyCode::NUM_8 },
105  { XK_ccedilla, KeyCode::NUM_9 },
106  { XK_agrave, KeyCode::NUM_0 },
107  { XK_parenright, KeyCode::RIGHT_BRACE },
108  { XK_F1, KeyCode::F1 },
109  { XK_F2, KeyCode::F2 },
110  { XK_F3, KeyCode::F3 },
111  { XK_F4, KeyCode::F4 },
112  { XK_F5, KeyCode::F5 },
113  { XK_F6, KeyCode::F6 },
114  { XK_F7, KeyCode::F7 },
115  { XK_F8, KeyCode::F8 },
116  { XK_F9, KeyCode::F9 },
117  { XK_F10, KeyCode::F10 },
118  { XK_F11, KeyCode::F11 },
119  { XK_F12, KeyCode::F12 },
120  { XK_Print, KeyCode::PRINT_SCREEN },
121  { XK_Scroll_Lock, KeyCode::SCROLL_LOCK },
122  { XK_Insert, KeyCode::INSERT },
123  { XK_Home, KeyCode::HOME },
124  { XK_Prior, KeyCode::PAGE_UP },
125  { XK_Delete, KeyCode::DELETE_KEY },
126  { XK_End, KeyCode::END },
127  { XK_Next, KeyCode::PAGE_DOWN },
128  { XK_Num_Lock, KeyCode::NUM_LOCK },
129  { XK_KP_Divide, KeyCode::KEYPAD_SLASH },
130  { XK_KP_Multiply, KeyCode::KEYPAD_ASTERISK },
131  { XK_KP_Subtract, KeyCode::KEYPAD_MINUS },
132  { XK_KP_Add, KeyCode::KEYPAD_PLUS },
133  { XK_KP_Enter, KeyCode::KEYPAD_ENTER },
134  { XK_KP_Delete, KeyCode::KEYPAD_DECIMAL },
135  { XK_KP_Decimal, KeyCode::KEYPAD_DECIMAL },
136  { XK_KP_Decimal, KeyCode::KEYPAD_DECIMAL },
137  { XK_Hyper_R, KeyCode::OPEN },
138  { XK_KP_Equal, KeyCode::KEYPAD_EQUALS },
139  { XK_F13, KeyCode::F13 },
140  { XK_F14, KeyCode::F14 },
141  { XK_F15, KeyCode::F15 },
142  { XK_F16, KeyCode::F16 },
143  { XK_F17, KeyCode::F17 },
144  { XK_F18, KeyCode::F18 },
145  { XK_F19, KeyCode::F19 },
146  { XK_F20, KeyCode::F20 },
147  { XK_F21, KeyCode::F21 },
148  { XK_F22, KeyCode::F22 },
149  { XK_F23, KeyCode::F23 },
150  { XK_F24, KeyCode::F24 },
151  { XK_Execute, KeyCode::OPEN },
152  { XK_Help, KeyCode::HELP },
153  { XK_Cancel, KeyCode::CANCEL },
154  { XK_KP_Separator, KeyCode::SEPARATOR },
155  { XK_Sys_Req, KeyCode::SYSREQ_ATTENTION },
156  { XK_period, KeyCode::DOT },
157  { XK_comma, KeyCode::COMMA },
158  { XK_slash, KeyCode::SLASH },
159  { XK_backslash, KeyCode::BACKSLASH },
160  { XK_minus, KeyCode::MINUS },
161  { XK_equal, KeyCode::KEYPAD_EQUALS },
162  { XK_grave, KeyCode::GRAVE },
163  { XK_bracketleft, KeyCode::LEFT_BRACE },
164  { XK_bracketright, KeyCode::RIGHT_BRACE }
165  };
166  };
167  }
168  }
KeyCode
Definition: NRE_Keys.hpp:27
Manage the translation of native key.
Definition: NRE_LinuxKeyTranslater.hpp:31
Event&#39;s API.
KeyCode translateKey(XKeyEvent const &keyEvent) const
Definition: NRE_LinuxKeyTranslater.cpp:22
The NearlyRealEngine&#39;s global namespace.