1 module nudsfml.window.keyboard; 2 3 import bindbc.sfml.window; 4 5 final abstract class Keyboard { 6 /// Key codes. 7 enum Key { 8 /// Unhandled key 9 Unknown = -1, 10 /// The A key 11 A = 0, 12 /// The B key 13 B, 14 /// The C key 15 C, 16 /// The D key 17 D, 18 /// The E key 19 E, 20 /// The F key 21 F, 22 /// The G key 23 G, 24 /// The H key 25 H, 26 /// The I key 27 I, 28 /// The J key 29 J, 30 /// The K key 31 K, 32 /// The L key 33 L, 34 /// The M key 35 M, 36 /// The N key 37 N, 38 /// The O key 39 O, 40 /// The P key 41 P, 42 /// The Q key 43 Q, 44 /// The R key 45 R, 46 /// The S key 47 S, 48 /// The T key 49 T, 50 /// The U key 51 U, 52 /// The V key 53 V, 54 /// The W key 55 W, 56 /// The X key 57 X, 58 /// The Y key 59 Y, 60 /// The Z key 61 Z, 62 /// The 0 key 63 Num0, 64 /// The 1 key 65 Num1, 66 /// The 2 key 67 Num2, 68 /// The 3 key 69 Num3, 70 /// The 4 key 71 Num4, 72 /// The 5 key 73 Num5, 74 /// The 6 key 75 Num6, 76 /// The 7 key 77 Num7, 78 /// The 8 key 79 Num8, 80 /// The 9 key 81 Num9, 82 /// The Escape key 83 Escape, 84 /// The left Control key 85 LControl, 86 /// The left Shift key 87 LShift, 88 /// The left Alt key 89 LAlt, 90 /// The left OS specific key: window (Windows and Linux), apple (MacOS X), ... 91 LSystem, 92 /// The right Control key 93 RControl, 94 /// The right Shift key 95 RShift, 96 /// The right Alt key 97 RAlt, 98 /// The right OS specific key: window (Windows and Linux), apple (MacOS X), ... 99 RSystem, 100 /// The Menu key 101 Menu, 102 /// The [ key 103 LBracket, 104 /// The ] key 105 RBracket, 106 /// The ; key 107 SemiColon, 108 /// The , key 109 Comma, 110 /// The . key 111 Period, 112 /// The ' key 113 Quote, 114 /// The / key 115 Slash, 116 /// The \ key 117 BackSlash, 118 /// The ~ key 119 Tilde, 120 /// The = key 121 Equal, 122 /// The - key 123 Dash, 124 /// The Space key 125 Space, 126 /// The Return key 127 Return, 128 /// The Backspace key 129 BackSpace, 130 /// The Tabulation key 131 Tab, 132 /// The Page up key 133 PageUp, 134 /// The Page down key 135 PageDown, 136 /// The End key 137 End, 138 /// The Home key 139 Home, 140 /// The Insert key 141 Insert, 142 /// The Delete key 143 Delete, 144 /// The + key 145 Add, 146 /// The - key 147 Subtract, 148 /// The * key 149 Multiply, 150 /// The / key 151 Divide, 152 /// Left arrow 153 Left, 154 /// Right arrow 155 Right, 156 /// Up arrow 157 Up, 158 /// Down arrow 159 Down, 160 /// The numpad 0 key 161 Numpad0, 162 /// The numpad 1 key 163 Numpad1, 164 /// The numpad 2 key 165 Numpad2, 166 /// The numpad 3 key 167 Numpad3, 168 /// The numpad 4 key 169 Numpad4, 170 /// The numpad 5 key 171 Numpad5, 172 /// The numpad 6 key 173 Numpad6, 174 /// The numpad 7 key 175 Numpad7, 176 /// The numpad 8 key 177 Numpad8, 178 /// The numpad 9 key 179 Numpad9, 180 /// The F1 key 181 F1, 182 /// The F2 key 183 F2, 184 /// The F3 key 185 F3, 186 /// The F4 key 187 F4, 188 /// The F5 key 189 F5, 190 /// The F6 key 191 F6, 192 /// The F7 key 193 F7, 194 /// The F8 key 195 F8, 196 /// The F9 key 197 F9, 198 /// The F10 key 199 F10, 200 /// The F11 key 201 F11, 202 /// The F12 key 203 F12, 204 /// The F13 key 205 F13, 206 /// The F14 key 207 F14, 208 /// The F15 key 209 F15, 210 /// The Pause key 211 Pause, 212 213 /// Keep last -- the total number of keyboard keys 214 KeyCount 215 } 216 217 /** 218 * Check if a key is pressed. 219 * 220 * Params: 221 * key = Key to check 222 * 223 * Returns: true if the key is pressed, false otherwise. 224 */ 225 static bool isKeyPressed(Key key) { 226 sfKeyCode code = cast(sfKeyCode)key; 227 return (sfKeyboard_isKeyPressed(code)) > 0; 228 } 229 } 230 231 //known bugs: 232 //cannot press two keys at once for this unit test 233 unittest { 234 version(DSFML_Unittest_Window) { 235 import std.stdio; 236 237 writeln("Unit test for Keyboard realtime input"); 238 239 bool running = true; 240 241 writeln("Press any key for real time input. Press esc to exit."); 242 243 string[int] keys; 244 //in its own scope for code folding 245 { 246 keys[-1] = "Unknown"; 247 keys[0] = "A"; 248 keys[1] = "B"; 249 keys[2] = "C"; 250 keys[3] = "D"; 251 keys[4] = "E"; 252 keys[5] = "F"; 253 keys[6] = "G"; 254 keys[7] = "H"; 255 keys[8] = "I"; 256 keys[9] = "J"; 257 keys[10] = "K"; 258 keys[11] = "L"; 259 keys[12] = "M"; 260 keys[13] = "N"; 261 keys[14] = "O"; 262 keys[15] = "P"; 263 keys[16] = "Q"; 264 keys[17] = "R"; 265 keys[18] = "S"; 266 keys[19] = "T"; 267 keys[20] = "U"; 268 keys[21] = "V"; 269 keys[22] = "W"; 270 keys[23] = "X"; 271 keys[24] = "Y"; 272 keys[25] = "Z"; 273 keys[26] = "Num0"; 274 keys[26] = "Num1"; 275 keys[28] = "Num2"; 276 keys[29] = "Num3"; 277 keys[30] = "Num4"; 278 keys[31] = "Num5"; 279 keys[32] = "Num6"; 280 keys[33] = "Num7"; 281 keys[34] = "Num8"; 282 keys[35] = "Num9"; 283 keys[36] = "Escape"; 284 keys[37] = "LControl"; 285 keys[38] = "LShift"; 286 keys[39] = "LAlt"; 287 keys[40] = "LSystem"; 288 keys[41] = "RControl"; 289 keys[42] = "RShift"; 290 keys[43] = "RAlt"; 291 keys[44] = "RSystem"; 292 keys[45] = "Menu"; 293 keys[46] = "LBracket"; 294 keys[47] = "RBracket"; 295 keys[48] = "SemiColon"; 296 keys[49] = "Comma"; 297 keys[50] = "Period"; 298 keys[51] = "Quote"; 299 keys[52] = "Slash"; 300 keys[53] = "BackSlash"; 301 keys[54] = "Tilde"; 302 keys[55] = "Equal"; 303 keys[56] = "Dash"; 304 keys[57] = "Space"; 305 keys[58] = "Return"; 306 keys[59] = "BackSpace"; 307 keys[60] = "Tab"; 308 keys[61] = "PageUp"; 309 keys[62] = "PageDown"; 310 keys[63] = "End"; 311 keys[64] = "Home"; 312 keys[65] = "Insert"; 313 keys[66] = "Delete"; 314 keys[67] = "Add"; 315 keys[68] = "Subtract"; 316 keys[69] = "Multiply"; 317 keys[70] = "Divide"; 318 keys[71] = "Left"; 319 keys[72] = "Right"; 320 keys[73] = "Up"; 321 keys[74] = "Down"; 322 keys[75] = "Numpad0"; 323 keys[76] = "Numpad1"; 324 keys[77] = "Numpad2"; 325 keys[78] = "Numpad3"; 326 keys[79] = "Numpad4"; 327 keys[80] = "Numpad5"; 328 keys[81] = "Numpad6"; 329 keys[82] = "Numpad7"; 330 keys[83] = "Numpad8"; 331 keys[84] = "Numpad9"; 332 keys[85] = "F1"; 333 keys[86] = "F2"; 334 keys[87] = "F3"; 335 keys[88] = "F4"; 336 keys[89] = "F5"; 337 keys[90] = "F6"; 338 keys[91] = "F7"; 339 keys[92] = "F8"; 340 keys[93] = "F9"; 341 keys[94] = "F10"; 342 keys[95] = "F11"; 343 keys[96] = "F12"; 344 keys[97] = "F13"; 345 keys[98] = "F14"; 346 keys[99] = "F15"; 347 keys[100] = "Pause"; 348 } 349 350 //must check for each possible key 351 while(running) { 352 for(int i =-1;i<101;++i) { 353 if(Keyboard.isKeyPressed(cast(Keyboard.Key)i)) { 354 if(i in keys){ 355 writeln("Key "~ keys[i] ~ " was pressed."); 356 } else { 357 writeln(i); 358 } 359 if(i == 36){ 360 running = false; 361 } 362 } 363 } 364 } 365 } 366 }