File: Keyboard.h

package info (click to toggle)
libcsfml 3.0.0~rc3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,236 kB
  • sloc: cpp: 7,741; ansic: 2,616; sh: 791; makefile: 16
file content (414 lines) | stat: -rw-r--r-- 18,359 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
////////////////////////////////////////////////////////////
//
// SFML - Simple and Fast Multimedia Library
// Copyright (C) 2007-2025 Laurent Gomila (laurent@sfml-dev.org)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
//    you must not claim that you wrote the original software.
//    If you use this software in a product, an acknowledgment
//    in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
//    and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
////////////////////////////////////////////////////////////

#pragma once

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <CSFML/Window/Export.h>


////////////////////////////////////////////////////////////
/// \brief Key codes
///
/// The enumerators refer to the "localized" key; i.e. depending
/// on the layout set by the operating system, a key can be mapped
/// to `Y` or `Z`.
///
////////////////////////////////////////////////////////////
typedef enum
{
    sfKeyUnknown = -1, ///< Unhandled key
    sfKeyA,            ///< The A key
    sfKeyB,            ///< The B key
    sfKeyC,            ///< The C key
    sfKeyD,            ///< The D key
    sfKeyE,            ///< The E key
    sfKeyF,            ///< The F key
    sfKeyG,            ///< The G key
    sfKeyH,            ///< The H key
    sfKeyI,            ///< The I key
    sfKeyJ,            ///< The J key
    sfKeyK,            ///< The K key
    sfKeyL,            ///< The L key
    sfKeyM,            ///< The M key
    sfKeyN,            ///< The N key
    sfKeyO,            ///< The O key
    sfKeyP,            ///< The P key
    sfKeyQ,            ///< The Q key
    sfKeyR,            ///< The R key
    sfKeyS,            ///< The S key
    sfKeyT,            ///< The T key
    sfKeyU,            ///< The U key
    sfKeyV,            ///< The V key
    sfKeyW,            ///< The W key
    sfKeyX,            ///< The X key
    sfKeyY,            ///< The Y key
    sfKeyZ,            ///< The Z key
    sfKeyNum0,         ///< The 0 key
    sfKeyNum1,         ///< The 1 key
    sfKeyNum2,         ///< The 2 key
    sfKeyNum3,         ///< The 3 key
    sfKeyNum4,         ///< The 4 key
    sfKeyNum5,         ///< The 5 key
    sfKeyNum6,         ///< The 6 key
    sfKeyNum7,         ///< The 7 key
    sfKeyNum8,         ///< The 8 key
    sfKeyNum9,         ///< The 9 key
    sfKeyEscape,       ///< The Escape key
    sfKeyLControl,     ///< The left Control key
    sfKeyLShift,       ///< The left Shift key
    sfKeyLAlt,         ///< The left Alt key
    sfKeyLSystem,      ///< The left OS specific key: window (Windows and Linux), apple (macOS), ...
    sfKeyRControl,     ///< The right Control key
    sfKeyRShift,       ///< The right Shift key
    sfKeyRAlt,         ///< The right Alt key
    sfKeyRSystem,      ///< The right OS specific key: window (Windows and Linux), apple (macOS), ...
    sfKeyMenu,         ///< The Menu key
    sfKeyLBracket,     ///< The [ key
    sfKeyRBracket,     ///< The ] key
    sfKeySemicolon,    ///< The ; key
    sfKeyComma,        ///< The , key
    sfKeyPeriod,       ///< The . key
    sfKeyApostrophe,   ///< The ' key
    sfKeySlash,        ///< The / key
    sfKeyBackslash,    ///< The \ key
    sfKeyGrave,        ///< The ` key
    sfKeyEqual,        ///< The = key
    sfKeyHyphen,       ///< The - key (hyphen)
    sfKeySpace,        ///< The Space key
    sfKeyEnter,        ///< The Enter/Return key
    sfKeyBackspace,    ///< The Backspace key
    sfKeyTab,          ///< The Tabulation key
    sfKeyPageUp,       ///< The Page up key
    sfKeyPageDown,     ///< The Page down key
    sfKeyEnd,          ///< The End key
    sfKeyHome,         ///< The Home key
    sfKeyInsert,       ///< The Insert key
    sfKeyDelete,       ///< The Delete key
    sfKeyAdd,          ///< The + key
    sfKeySubtract,     ///< The - key (minus, usually from numpad)
    sfKeyMultiply,     ///< The * key
    sfKeyDivide,       ///< The / key
    sfKeyLeft,         ///< Left arrow
    sfKeyRight,        ///< Right arrow
    sfKeyUp,           ///< Up arrow
    sfKeyDown,         ///< Down arrow
    sfKeyNumpad0,      ///< The numpad 0 key
    sfKeyNumpad1,      ///< The numpad 1 key
    sfKeyNumpad2,      ///< The numpad 2 key
    sfKeyNumpad3,      ///< The numpad 3 key
    sfKeyNumpad4,      ///< The numpad 4 key
    sfKeyNumpad5,      ///< The numpad 5 key
    sfKeyNumpad6,      ///< The numpad 6 key
    sfKeyNumpad7,      ///< The numpad 7 key
    sfKeyNumpad8,      ///< The numpad 8 key
    sfKeyNumpad9,      ///< The numpad 9 key
    sfKeyF1,           ///< The F1 key
    sfKeyF2,           ///< The F2 key
    sfKeyF3,           ///< The F3 key
    sfKeyF4,           ///< The F4 key
    sfKeyF5,           ///< The F5 key
    sfKeyF6,           ///< The F6 key
    sfKeyF7,           ///< The F7 key
    sfKeyF8,           ///< The F8 key
    sfKeyF9,           ///< The F8 key
    sfKeyF10,          ///< The F10 key
    sfKeyF11,          ///< The F11 key
    sfKeyF12,          ///< The F12 key
    sfKeyF13,          ///< The F13 key
    sfKeyF14,          ///< The F14 key
    sfKeyF15,          ///< The F15 key
    sfKeyPause,        ///< The Pause key
} sfKeyCode;

enum
{
    sfKeyCount = sfKeyPause + 1 ///< The total number of keyboard keys
};

////////////////////////////////////////////////////////////
/// \brief Scancodes
///
/// The enumerators are bound to a physical key and do not depend on
/// the keyboard layout used by the operating system. Usually, the AT-101
/// keyboard can be used as reference for the physical position of the keys.
///
////////////////////////////////////////////////////////////
typedef enum
{
    sfScanUnknown = -1, //!< Represents any scancode not present in this enum
    sfScanA       = 0,  //!< Keyboard a and A key
    sfScanB,            //!< Keyboard b and B key
    sfScanC,            //!< Keyboard c and C key
    sfScanD,            //!< Keyboard d and D key
    sfScanE,            //!< Keyboard e and E key
    sfScanF,            //!< Keyboard f and F key
    sfScanG,            //!< Keyboard g and G key
    sfScanH,            //!< Keyboard h and H key
    sfScanI,            //!< Keyboard i and I key
    sfScanJ,            //!< Keyboard j and J key
    sfScanK,            //!< Keyboard k and K key
    sfScanL,            //!< Keyboard l and L key
    sfScanM,            //!< Keyboard m and M key
    sfScanN,            //!< Keyboard n and N key
    sfScanO,            //!< Keyboard o and O key
    sfScanP,            //!< Keyboard p and P key
    sfScanQ,            //!< Keyboard q and Q key
    sfScanR,            //!< Keyboard r and R key
    sfScanS,            //!< Keyboard s and S key
    sfScanT,            //!< Keyboard t and T key
    sfScanU,            //!< Keyboard u and U key
    sfScanV,            //!< Keyboard v and V key
    sfScanW,            //!< Keyboard w and W key
    sfScanX,            //!< Keyboard x and X key
    sfScanY,            //!< Keyboard y and Y key
    sfScanZ,            //!< Keyboard z and Z key
    sfScanNum1,         //!< Keyboard 1 and ! key
    sfScanNum2,         //!< Keyboard 2 and @ key
    sfScanNum3,         //!< Keyboard 3 and # key
    sfScanNum4,         //!< Keyboard 4 and $ key
    sfScanNum5,         //!< Keyboard 5 and % key
    sfScanNum6,         //!< Keyboard 6 and ^ key
    sfScanNum7,         //!< Keyboard 7 and & key
    sfScanNum8,         //!< Keyboard 8 and * key
    sfScanNum9,         //!< Keyboard 9 and ) key
    sfScanNum0,         //!< Keyboard 0 and ) key
    sfScanEnter,        //!< Keyboard Enter/Return key
    sfScanEscape,       //!< Keyboard Escape key
    sfScanBackspace,    //!< Keyboard Backspace key
    sfScanTab,          //!< Keyboard Tab key
    sfScanSpace,        //!< Keyboard Space key
    sfScanHyphen,       //!< Keyboard - and _ key
    sfScanEqual,        //!< Keyboard = and +
    sfScanLBracket,     //!< Keyboard [ and { key
    sfScanRBracket,     //!< Keyboard ] and } key
    // For US keyboards mapped to key 29 (Microsoft Keyboard Scan Code Specification)
    // For Non-US keyboards mapped to key 42 (Microsoft Keyboard Scan Code Specification)
    // Typical language mappings: Belg:£µ` FrCa:<>} Dan:*' Dutch:`´ Fren:µ* Ger:'# Ital:§ù LatAm:[}` Nor:*@ Span:ç} Swed:*' Swiss:$£} UK:~# Brazil:}]
    sfScanBackslash,      //!< Keyboard \ and | key OR various keys for Non-US keyboards
    sfScanSemicolon,      //!< Keyboard ; and : key
    sfScanApostrophe,     //!< Keyboard ' and " key
    sfScanGrave,          //!< Keyboard ` and ~ key
    sfScanComma,          //!< Keyboard , and < key
    sfScanPeriod,         //!< Keyboard . and > key
    sfScanSlash,          //!< Keyboard / and ? key
    sfScanF1,             //!< Keyboard F1 key
    sfScanF2,             //!< Keyboard F2 key
    sfScanF3,             //!< Keyboard F3 key
    sfScanF4,             //!< Keyboard F4 key
    sfScanF5,             //!< Keyboard F5 key
    sfScanF6,             //!< Keyboard F6 key
    sfScanF7,             //!< Keyboard F7 key
    sfScanF8,             //!< Keyboard F8 key
    sfScanF9,             //!< Keyboard F9 key
    sfScanF10,            //!< Keyboard F10 key
    sfScanF11,            //!< Keyboard F11 key
    sfScanF12,            //!< Keyboard F12 key
    sfScanF13,            //!< Keyboard F13 key
    sfScanF14,            //!< Keyboard F14 key
    sfScanF15,            //!< Keyboard F15 key
    sfScanF16,            //!< Keyboard F16 key
    sfScanF17,            //!< Keyboard F17 key
    sfScanF18,            //!< Keyboard F18 key
    sfScanF19,            //!< Keyboard F19 key
    sfScanF20,            //!< Keyboard F20 key
    sfScanF21,            //!< Keyboard F21 key
    sfScanF22,            //!< Keyboard F22 key
    sfScanF23,            //!< Keyboard F23 key
    sfScanF24,            //!< Keyboard F24 key
    sfScanCapsLock,       //!< Keyboard Caps %Lock key
    sfScanPrintScreen,    //!< Keyboard Print Screen key
    sfScanScrollLock,     //!< Keyboard Scroll %Lock key
    sfScanPause,          //!< Keyboard Pause key
    sfScanInsert,         //!< Keyboard Insert key
    sfScanHome,           //!< Keyboard Home key
    sfScanPageUp,         //!< Keyboard Page Up key
    sfScanDelete,         //!< Keyboard Delete Forward key
    sfScanEnd,            //!< Keyboard End key
    sfScanPageDown,       //!< Keyboard Page Down key
    sfScanRight,          //!< Keyboard Right Arrow key
    sfScanLeft,           //!< Keyboard Left Arrow key
    sfScanDown,           //!< Keyboard Down Arrow key
    sfScanUp,             //!< Keyboard Up Arrow key
    sfScanNumLock,        //!< Keypad Num %Lock and Clear key
    sfScanNumpadDivide,   //!< Keypad / key
    sfScanNumpadMultiply, //!< Keypad * key
    sfScanNumpadMinus,    //!< Keypad - key
    sfScanNumpadPlus,     //!< Keypad + key
    sfScanNumpadEqual,    //!< keypad = key
    sfScanNumpadEnter,    //!< Keypad Enter/Return key
    sfScanNumpadDecimal,  //!< Keypad . and Delete key
    sfScanNumpad1,        //!< Keypad 1 and End key
    sfScanNumpad2,        //!< Keypad 2 and Down Arrow key
    sfScanNumpad3,        //!< Keypad 3 and Page Down key
    sfScanNumpad4,        //!< Keypad 4 and Left Arrow key
    sfScanNumpad5,        //!< Keypad 5 key
    sfScanNumpad6,        //!< Keypad 6 and Right Arrow key
    sfScanNumpad7,        //!< Keypad 7 and Home key
    sfScanNumpad8,        //!< Keypad 8 and Up Arrow key
    sfScanNumpad9,        //!< Keypad 9 and Page Up key
    sfScanNumpad0,        //!< Keypad 0 and Insert key
    // For US keyboards doesn't exist
    // For Non-US keyboards mapped to key 45 (Microsoft Keyboard Scan Code Specification)
    // Typical language mappings: Belg:<\> FrCa:«°» Dan:<\> Dutch:]|[ Fren:<> Ger:<|> Ital:<> LatAm:<> Nor:<> Span:<> Swed:<|> Swiss:<\> UK:\| Brazil: \|.
    sfScanNonUsBackslash,     //!< Keyboard Non-US \ and | key
    sfScanApplication,        //!< Keyboard Application key
    sfScanExecute,            //!< Keyboard Execute key
    sfScanModeChange,         //!< Keyboard Mode Change key
    sfScanHelp,               //!< Keyboard Help key
    sfScanMenu,               //!< Keyboard Menu key
    sfScanSelect,             //!< Keyboard Select key
    sfScanRedo,               //!< Keyboard Redo key
    sfScanUndo,               //!< Keyboard Undo key
    sfScanCut,                //!< Keyboard Cut key
    sfScanCopy,               //!< Keyboard Copy key
    sfScanPaste,              //!< Keyboard Paste key
    sfScanVolumeMute,         //!< Keyboard Volume Mute key
    sfScanVolumeUp,           //!< Keyboard Volume Up key
    sfScanVolumeDown,         //!< Keyboard Volume Down key
    sfScanMediaPlayPause,     //!< Keyboard Media Play Pause key
    sfScanMediaStop,          //!< Keyboard Media Stop key
    sfScanMediaNextTrack,     //!< Keyboard Media Next Track key
    sfScanMediaPreviousTrack, //!< Keyboard Media Previous Track key
    sfScanLControl,           //!< Keyboard Left Control key
    sfScanLShift,             //!< Keyboard Left Shift key
    sfScanLAlt,               //!< Keyboard Left Alt key
    sfScanLSystem,            //!< Keyboard Left System key
    sfScanRControl,           //!< Keyboard Right Control key
    sfScanRShift,             //!< Keyboard Right Shift key
    sfScanRAlt,               //!< Keyboard Right Alt key
    sfScanRSystem,            //!< Keyboard Right System key
    sfScanBack,               //!< Keyboard Back key
    sfScanForward,            //!< Keyboard Forward key
    sfScanRefresh,            //!< Keyboard Refresh key
    sfScanStop,               //!< Keyboard Stop key
    sfScanSearch,             //!< Keyboard Search key
    sfScanFavorites,          //!< Keyboard Favorites key
    sfScanHomePage,           //!< Keyboard Home Page key
    sfScanLaunchApplication1, //!< Keyboard Launch Application 1 key
    sfScanLaunchApplication2, //!< Keyboard Launch Application 2 key
    sfScanLaunchMail,         //!< Keyboard Launch Mail key
    sfScanLaunchMediaSelect,  //!< Keyboard Launch Media Select key
} sfScancode;

enum
{
    sfScancodeCount = sfScanLaunchMediaSelect + 1 //!< The total number of scancodes
};

////////////////////////////////////////////////////////////
/// \brief Check if a key is pressed
///
/// \param key Key to check
///
/// \return true if the key is pressed, false otherwise
///
/// \see sfKeyboard_isScancodePressed
///
////////////////////////////////////////////////////////////
CSFML_WINDOW_API bool sfKeyboard_isKeyPressed(sfKeyCode key);

////////////////////////////////////////////////////////////
/// \brief Check if a key is pressed
///
/// \param code Scancode to check
///
/// \return true if the physical key is pressed, false otherwise
///
/// \see sfKeyboard_isKeyPressed
///
////////////////////////////////////////////////////////////
CSFML_WINDOW_API bool sfKeyboard_isScancodePressed(sfScancode code);

////////////////////////////////////////////////////////////
/// \brief Localize a physical key to a logical one
///
/// \param code Scancode to localize
///
/// \return The key corresponding to the scancode under the current
///         keyboard layout used by the operating system, or
///         sfKeyUnknown when the scancode cannot be mapped
///         to a Key.
///
/// \see sfKeyboard_delocalize
///
////////////////////////////////////////////////////////////
CSFML_WINDOW_API sfKeyCode sfKeyboard_localize(sfScancode code);

////////////////////////////////////////////////////////////
/// \brief Identify the physical key corresponding to a logical one
///
/// \param key Key to "delocalize"
///
/// \return The scancode corresponding to the key under the current
///         keyboard layout used by the operating system, or
///         sfScanUnknown when the key cannot be mapped
///         to a sfScancode.
///
/// \see sfKeyboard_localize
///
////////////////////////////////////////////////////////////
CSFML_WINDOW_API sfScancode sfKeyboard_delocalize(sfKeyCode key);

////////////////////////////////////////////////////////////
/// \brief Provide a string representation for a given scancode
///
/// The returned string is a short, non-technical description of
/// the key represented with the given scancode. Most effectively
/// used in user interfaces, as the description for the key takes
/// the users keyboard layout into consideration.
///
/// \warning The result is OS-dependent: for example, sfScanLSystem
///          is "Left Meta" on Linux, "Left Windows" on Windows and
///          "Left Command" on macOS.
///
/// The current keyboard layout set by the operating system is used to
/// interpret the scancode: for example, sfKeySemicolon is
/// mapped to ";" for layout and to "é" for others.
///
/// The returned const char* owns the string and must be freed to
/// avoid memory leaks.
///
/// \param code Scancode to describe
///
/// \return The localized description of the code
///
////////////////////////////////////////////////////////////
CSFML_WINDOW_API const char* sfKeyboard_getDescription(sfScancode code);

////////////////////////////////////////////////////////////
/// \brief Show or hide the virtual keyboard.
///
/// \warning The virtual keyboard is not supported on all
///          systems. It will typically be implemented on mobile OSes
///          (Android, iOS) but not on desktop OSes (Windows, Linux, ...).
///
/// If the virtual keyboard is not available, this function does nothing.
///
/// \param visible True to show, false to hide
///
////////////////////////////////////////////////////////////
CSFML_WINDOW_API void sfKeyboard_setVirtualKeyboardVisible(bool visible);