keyboard.h
1 /*************************************************************************/
2 /* keyboard.h */
3 /*************************************************************************/
4 /* This file is part of: */
5 /* GODOT ENGINE */
6 /* http://www.godotengine.org */
7 /*************************************************************************/
8 /* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
9 /* */
10 /* Permission is hereby granted, free of charge, to any person obtaining */
11 /* a copy of this software and associated documentation files (the */
12 /* "Software"), to deal in the Software without restriction, including */
13 /* without limitation the rights to use, copy, modify, merge, publish, */
14 /* distribute, sublicense, and/or sell copies of the Software, and to */
15 /* permit persons to whom the Software is furnished to do so, subject to */
16 /* the following conditions: */
17 /* */
18 /* The above copyright notice and this permission notice shall be */
19 /* included in all copies or substantial portions of the Software. */
20 /* */
21 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
22 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
23 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
24 /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
25 /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
26 /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
27 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
28 /*************************************************************************/
29 #ifndef KEYBOARD_H
30 #define KEYBOARD_H
31 
32 #include "ustring.h"
41 /*
42  Special Key:
43 
44  The strategy here is similar to the one used by toolkits,
45  which consists in leaving the 24 bits unicode range for printable
46  characters, and use the upper 8 bits for special keys and
47  modifiers. This way everything (char/keycode) can fit nicely in one 32 bits unsigned integer.
48 */
49 enum {
50  SPKEY = (1<<24)
51 };
52 
53 enum KeyList {
54 /* CURSOR/FUNCTION/BROWSER/MULTIMEDIA/MISC KEYS */
55  KEY_ESCAPE=SPKEY | 0x01,
56  KEY_TAB=SPKEY | 0x02,
57  KEY_BACKTAB=SPKEY | 0x03,
58  KEY_BACKSPACE=SPKEY | 0x04,
59  KEY_RETURN=SPKEY | 0x05,
60  KEY_ENTER=SPKEY | 0x06,
61  KEY_INSERT=SPKEY | 0x07,
62  KEY_DELETE=SPKEY | 0x08,
63  KEY_PAUSE=SPKEY | 0x09,
64  KEY_PRINT=SPKEY | 0x0A,
65  KEY_SYSREQ=SPKEY | 0x0B,
66  KEY_CLEAR=SPKEY | 0x0C,
67  KEY_HOME=SPKEY | 0x0D,
68  KEY_END=SPKEY | 0x0E,
69  KEY_LEFT=SPKEY | 0x0F,
70  KEY_UP=SPKEY | 0x10,
71  KEY_RIGHT=SPKEY | 0x11,
72  KEY_DOWN=SPKEY | 0x12,
73  KEY_PAGEUP=SPKEY | 0x13,
74  KEY_PAGEDOWN=SPKEY | 0x14,
75  KEY_SHIFT=SPKEY | 0x15,
76  KEY_CONTROL=SPKEY | 0x16,
77  KEY_META=SPKEY | 0x17,
78  KEY_ALT=SPKEY | 0x18,
79  KEY_CAPSLOCK=SPKEY | 0x19,
80  KEY_NUMLOCK=SPKEY | 0x1A,
81  KEY_SCROLLLOCK=SPKEY | 0x1B,
82  KEY_F1=SPKEY | 0x1C,
83  KEY_F2=SPKEY | 0x1D,
84  KEY_F3=SPKEY | 0x1E,
85  KEY_F4=SPKEY | 0x1F,
86  KEY_F5=SPKEY | 0x20,
87  KEY_F6=SPKEY | 0x21,
88  KEY_F7=SPKEY | 0x22,
89  KEY_F8=SPKEY | 0x23,
90  KEY_F9=SPKEY | 0x24,
91  KEY_F10=SPKEY | 0x25,
92  KEY_F11=SPKEY | 0x26,
93  KEY_F12=SPKEY | 0x27,
94  KEY_F13=SPKEY | 0x28,
95  KEY_F14=SPKEY | 0x29,
96  KEY_F15=SPKEY | 0x2A,
97  KEY_F16=SPKEY | 0x2B,
98  KEY_KP_ENTER=SPKEY | 0x80,
99  KEY_KP_MULTIPLY=SPKEY | 0x81,
100  KEY_KP_DIVIDE=SPKEY | 0x82,
101  KEY_KP_SUBTRACT=SPKEY | 0x83,
102  KEY_KP_PERIOD=SPKEY | 0x84,
103  KEY_KP_ADD=SPKEY | 0x85,
104  KEY_KP_0=SPKEY | 0x86,
105  KEY_KP_1=SPKEY | 0x87,
106  KEY_KP_2=SPKEY | 0x88,
107  KEY_KP_3=SPKEY | 0x89,
108  KEY_KP_4=SPKEY | 0x8A,
109  KEY_KP_5=SPKEY | 0x8B,
110  KEY_KP_6=SPKEY | 0x8C,
111  KEY_KP_7=SPKEY | 0x8D,
112  KEY_KP_8=SPKEY | 0x8E,
113  KEY_KP_9=SPKEY | 0x8F,
114  KEY_SUPER_L=SPKEY | 0x2C,
115  KEY_SUPER_R=SPKEY | 0x2D,
116  KEY_MENU=SPKEY | 0x2E,
117  KEY_HYPER_L=SPKEY | 0x2F,
118  KEY_HYPER_R=SPKEY | 0x30,
119  KEY_HELP=SPKEY | 0x31,
120  KEY_DIRECTION_L=SPKEY | 0x32,
121  KEY_DIRECTION_R=SPKEY | 0x33,
122  KEY_BACK=SPKEY | 0x40,
123  KEY_FORWARD=SPKEY | 0x41,
124  KEY_STOP=SPKEY | 0x42,
125  KEY_REFRESH=SPKEY | 0x43,
126  KEY_VOLUMEDOWN=SPKEY | 0x44,
127  KEY_VOLUMEMUTE=SPKEY | 0x45,
128  KEY_VOLUMEUP=SPKEY | 0x46,
129  KEY_BASSBOOST=SPKEY | 0x47,
130  KEY_BASSUP=SPKEY | 0x48,
131  KEY_BASSDOWN=SPKEY | 0x49,
132  KEY_TREBLEUP=SPKEY | 0x4A,
133  KEY_TREBLEDOWN=SPKEY | 0x4B,
134  KEY_MEDIAPLAY=SPKEY | 0x4C,
135  KEY_MEDIASTOP=SPKEY | 0x4D,
136  KEY_MEDIAPREVIOUS=SPKEY | 0x4E,
137  KEY_MEDIANEXT=SPKEY | 0x4F,
138  KEY_MEDIARECORD= SPKEY | 0x50,
139  KEY_HOMEPAGE=SPKEY | 0x51,
140  KEY_FAVORITES=SPKEY | 0x52,
141  KEY_SEARCH=SPKEY | 0x53,
142  KEY_STANDBY=SPKEY | 0x54,
143  KEY_OPENURL=SPKEY | 0x55,
144  KEY_LAUNCHMAIL=SPKEY | 0x56,
145  KEY_LAUNCHMEDIA=SPKEY | 0x57,
146  KEY_LAUNCH0=SPKEY | 0x58,
147  KEY_LAUNCH1=SPKEY | 0x59,
148  KEY_LAUNCH2=SPKEY | 0x5A,
149  KEY_LAUNCH3=SPKEY | 0x5B,
150  KEY_LAUNCH4=SPKEY | 0x5C,
151  KEY_LAUNCH5=SPKEY | 0x5D,
152  KEY_LAUNCH6=SPKEY | 0x5E,
153  KEY_LAUNCH7=SPKEY | 0x5F,
154  KEY_LAUNCH8=SPKEY | 0x60,
155  KEY_LAUNCH9=SPKEY | 0x61,
156  KEY_LAUNCHA=SPKEY | 0x62,
157  KEY_LAUNCHB=SPKEY | 0x63,
158  KEY_LAUNCHC=SPKEY | 0x64,
159  KEY_LAUNCHD=SPKEY | 0x65,
160  KEY_LAUNCHE=SPKEY | 0x66,
161  KEY_LAUNCHF=SPKEY | 0x67,
162 
163  KEY_UNKNOWN=SPKEY | 0xFFFFFF,
164 
165 /* PRINTABLE LATIN 1 CODES */
166 
167  KEY_SPACE=0x0020,
168  KEY_EXCLAM=0x0021,
169  KEY_QUOTEDBL=0x0022,
170  KEY_NUMBERSIGN=0x0023,
171  KEY_DOLLAR=0x0024,
172  KEY_PERCENT=0x0025,
173  KEY_AMPERSAND=0x0026,
174  KEY_APOSTROPHE=0x0027,
175  KEY_PARENLEFT=0x0028,
176  KEY_PARENRIGHT=0x0029,
177  KEY_ASTERISK=0x002A,
178  KEY_PLUS=0x002B,
179  KEY_COMMA=0x002C,
180  KEY_MINUS=0x002D,
181  KEY_PERIOD=0x002E,
182  KEY_SLASH=0x002F,
183  KEY_0=0x0030,
184  KEY_1=0x0031,
185  KEY_2=0x0032,
186  KEY_3=0x0033,
187  KEY_4=0x0034,
188  KEY_5=0x0035,
189  KEY_6=0x0036,
190  KEY_7=0x0037,
191  KEY_8=0x0038,
192  KEY_9=0x0039,
193  KEY_COLON=0x003A,
194  KEY_SEMICOLON=0x003B,
195  KEY_LESS=0x003C,
196  KEY_EQUAL=0x003D,
197  KEY_GREATER=0x003E,
198  KEY_QUESTION=0x003F,
199  KEY_AT=0x0040,
200  KEY_A=0x0041,
201  KEY_B=0x0042,
202  KEY_C=0x0043,
203  KEY_D=0x0044,
204  KEY_E=0x0045,
205  KEY_F=0x0046,
206  KEY_G=0x0047,
207  KEY_H=0x0048,
208  KEY_I=0x0049,
209  KEY_J=0x004A,
210  KEY_K=0x004B,
211  KEY_L=0x004C,
212  KEY_M=0x004D,
213  KEY_N=0x004E,
214  KEY_O=0x004F,
215  KEY_P=0x0050,
216  KEY_Q=0x0051,
217  KEY_R=0x0052,
218  KEY_S=0x0053,
219  KEY_T=0x0054,
220  KEY_U=0x0055,
221  KEY_V=0x0056,
222  KEY_W=0x0057,
223  KEY_X=0x0058,
224  KEY_Y=0x0059,
225  KEY_Z=0x005A,
226  KEY_BRACKETLEFT=0x005B,
227  KEY_BACKSLASH=0x005C,
228  KEY_BRACKETRIGHT=0x005D,
229  KEY_ASCIICIRCUM=0x005E,
230  KEY_UNDERSCORE=0x005F,
231  KEY_QUOTELEFT=0x0060,
232  KEY_BRACELEFT=0x007B,
233  KEY_BAR=0x007C,
234  KEY_BRACERIGHT=0x007D,
235  KEY_ASCIITILDE=0x007E,
236  KEY_NOBREAKSPACE=0x00A0,
237  KEY_EXCLAMDOWN=0x00A1,
238  KEY_CENT=0x00A2,
239  KEY_STERLING=0x00A3,
240  KEY_CURRENCY=0x00A4,
241  KEY_YEN=0x00A5,
242  KEY_BROKENBAR=0x00A6,
243  KEY_SECTION=0x00A7,
244  KEY_DIAERESIS=0x00A8,
245  KEY_COPYRIGHT=0x00A9,
246  KEY_ORDFEMININE=0x00AA,
247  KEY_GUILLEMOTLEFT=0x00AB,
248  KEY_NOTSIGN=0x00AC,
249  KEY_HYPHEN=0x00AD,
250  KEY_REGISTERED=0x00AE,
251  KEY_MACRON=0x00AF,
252  KEY_DEGREE=0x00B0,
253  KEY_PLUSMINUS=0x00B1,
254  KEY_TWOSUPERIOR=0x00B2,
255  KEY_THREESUPERIOR=0x00B3,
256  KEY_ACUTE=0x00B4,
257  KEY_MU=0x00B5,
258  KEY_PARAGRAPH=0x00B6,
259  KEY_PERIODCENTERED=0x00B7,
260  KEY_CEDILLA=0x00B8,
261  KEY_ONESUPERIOR=0x00B9,
262  KEY_MASCULINE=0x00BA,
263  KEY_GUILLEMOTRIGHT=0x00BB,
264  KEY_ONEQUARTER=0x00BC,
265  KEY_ONEHALF=0x00BD,
266  KEY_THREEQUARTERS=0x00BE,
267  KEY_QUESTIONDOWN=0x00BF,
268  KEY_AGRAVE=0x00C0,
269  KEY_AACUTE=0x00C1,
270  KEY_ACIRCUMFLEX=0x00C2,
271  KEY_ATILDE=0x00C3,
272  KEY_ADIAERESIS=0x00C4,
273  KEY_ARING=0x00C5,
274  KEY_AE=0x00C6,
275  KEY_CCEDILLA=0x00C7,
276  KEY_EGRAVE=0x00C8,
277  KEY_EACUTE=0x00C9,
278  KEY_ECIRCUMFLEX=0x00CA,
279  KEY_EDIAERESIS=0x00CB,
280  KEY_IGRAVE=0x00CC,
281  KEY_IACUTE=0x00CD,
282  KEY_ICIRCUMFLEX=0x00CE,
283  KEY_IDIAERESIS=0x00CF,
284  KEY_ETH=0x00D0,
285  KEY_NTILDE=0x00D1,
286  KEY_OGRAVE=0x00D2,
287  KEY_OACUTE=0x00D3,
288  KEY_OCIRCUMFLEX=0x00D4,
289  KEY_OTILDE=0x00D5,
290  KEY_ODIAERESIS=0x00D6,
291  KEY_MULTIPLY=0x00D7,
292  KEY_OOBLIQUE=0x00D8,
293  KEY_UGRAVE=0x00D9,
294  KEY_UACUTE=0x00DA,
295  KEY_UCIRCUMFLEX=0x00DB,
296  KEY_UDIAERESIS=0x00DC,
297  KEY_YACUTE=0x00DD,
298  KEY_THORN=0x00DE,
299  KEY_SSHARP=0x00DF,
300 
301  KEY_DIVISION=0x00F7,
302  KEY_YDIAERESIS=0x00FF,
303 
304 
305 };
306 
307 
308 enum KeyModifierMask {
309 
310  KEY_CODE_MASK=((1<<25)-1),
311  KEY_MODIFIER_MASK=(0xFF<<24),
312  KEY_MASK_SHIFT = (1<<25),
313  KEY_MASK_ALT = (1<<26),
314  KEY_MASK_META = (1<<27),
315  KEY_MASK_CTRL = (1<<28),
316 #ifdef APPLE_STYLE_KEYS
317  KEY_MASK_CMD = KEY_MASK_META,
318 #else
319  KEY_MASK_CMD = KEY_MASK_CTRL,
320 #endif
321 
322  KEY_MASK_KPAD = (1<<29),
323  KEY_MASK_GROUP_SWITCH = (1<<30)
324  // bit 31 can't be used because variant uses regular 32 bits int as datatype
325 
326 };
327 
328 String keycode_get_string(uint32_t p_code);
329 bool keycode_has_unicode(uint32_t p_unicode);
330 int find_keycode(const String& p_code);
331 int latin_keyboard_keycode_convert(int p_keycode);
332 
333 #endif
Definition: ustring.h:64