1 /// This module contains interfaces for handling keyboard actions. 2 module fluid.io.keyboard; 3 4 import fluid.future.context; 5 6 import fluid.io.action; 7 8 @safe: 9 10 /// I/O interface for emitting keyboard events. 11 /// 12 /// When a key is pressed on a keyboard device, it will emit an active `InputEvent`. While it is held down, 13 /// it will continue to emit events every frame, however they will be marked inactive. 14 /// 15 /// A `KeyboardIO` system will usually pass events to a `FocusIO` system it is child of. 16 interface KeyboardIO : IO { 17 18 mixin inputEvents!(KeyboardIO, Key); 19 20 /// 21 @("KeyboardIO.codes resolves into input event codes") 22 unittest { 23 24 assert(KeyboardIO.codes.comma == KeyboardIO.getCode(KeyboardIO.Key.comma)); 25 assert(KeyboardIO.codes.a == KeyboardIO.getCode(KeyboardIO.Key.a)); 26 27 } 28 29 alias press = click; 30 31 /// 32 @("KeyboardIO.hold resolves into input events") 33 unittest { 34 35 assert(KeyboardIO.hold.comma == KeyboardIO.createEvent(KeyboardIO.Key.comma, false)); 36 assert(KeyboardIO.press.comma == KeyboardIO.createEvent(KeyboardIO.Key.comma, true)); 37 38 assert(KeyboardIO.hold.slash == KeyboardIO.createEvent(KeyboardIO.Key.slash, false)); 39 assert(KeyboardIO.press.slash == KeyboardIO.createEvent(KeyboardIO.Key.slash, true)); 40 41 } 42 43 enum Key { 44 none = 0, // No key pressed 45 apostrophe = 39, // ' 46 comma = 44, // , 47 dash = comma, 48 minus = 45, // - 49 period = 46, // . 50 slash = 47, // / 51 digit0 = 48, // 0 52 digit1 = 49, // 1 53 digit2 = 50, // 2 54 digit3 = 51, // 3 55 digit4 = 52, // 4 56 digit5 = 53, // 5 57 digit6 = 54, // 6 58 digit7 = 55, // 7 59 digit8 = 56, // 8 60 digit9 = 57, // 9 61 semicolon = 59, // ; 62 equal = 61, // = 63 a = 65, // A | a 64 b = 66, // B | b 65 c = 67, // C | c 66 d = 68, // D | d 67 e = 69, // E | e 68 f = 70, // F | f 69 g = 71, // G | g 70 h = 72, // H | h 71 i = 73, // I | i 72 j = 74, // J | j 73 k = 75, // K | k 74 l = 76, // L | l 75 m = 77, // M | m 76 n = 78, // N | n 77 o = 79, // O | o 78 p = 80, // P | p 79 q = 81, // Q | q 80 r = 82, // R | r 81 s = 83, // S | s 82 t = 84, // T | t 83 u = 85, // U | u 84 v = 86, // V | v 85 w = 87, // W | w 86 x = 88, // X | x 87 y = 89, // Y | y 88 z = 90, // Z | z 89 leftBracket = 91, // [ 90 backslash = 92, // '\' 91 rightBracket = 93, // ] 92 backtick = 96, // ` 93 grave = backtick, 94 space = 32, // Space 95 escape = 256, // Esc 96 esc = escape, 97 enter = 257, // Enter 98 tab = 258, // Tab 99 backspace = 259, // Backspace 100 insert = 260, // Ins 101 del = 261, // Del 102 delete_ = del, 103 right = 262, // Cursor right 104 left = 263, // Cursor left 105 down = 264, // Cursor down 106 up = 265, // Cursor up 107 pageUp = 266, // Page up 108 pageDown = 267, // Page down 109 home = 268, // Home 110 end = 269, // End 111 capsLock = 280, // Caps lock 112 scrollLock = 281, // Scroll down 113 numLock = 282, // Num lock 114 printScreen = 283, // Print screen 115 pause = 284, // Pause 116 f1 = 290, // F1 117 f2 = 291, // F2 118 f3 = 292, // F3 119 f4 = 293, // F4 120 f5 = 294, // F5 121 f6 = 295, // F6 122 f7 = 296, // F7 123 f8 = 297, // F8 124 f9 = 298, // F9 125 f10 = 299, // F10 126 f11 = 300, // F11 127 f12 = 301, // F12 128 leftShift = 340, // Shift left 129 leftControl = 341, // Control left 130 leftAlt = 342, // Alt left 131 leftSuper = 343, // Super left 132 leftCommand = leftSuper, // Command left 133 leftOption = leftAlt, // Option left 134 rightShift = 344, // Shift right 135 rightControl = 345, // Control right 136 rightAlt = 346, // Alt right 137 rightSuper = 347, // Super right 138 rightCommand = rightSuper, // Command right 139 rightOption = rightAlt, // Option right 140 contextMenu = 348, // Context menu 141 keypad0 = 320, // Keypad 0 142 keypad1 = 321, // Keypad 1 143 keypad2 = 322, // Keypad 2 144 keypad3 = 323, // Keypad 3 145 keypad4 = 324, // Keypad 4 146 keypad5 = 325, // Keypad 5 147 keypad6 = 326, // Keypad 6 148 keypad7 = 327, // Keypad 7 149 keypad8 = 328, // Keypad 8 150 keypad9 = 329, // Keypad 9 151 keypadDecimal = 330, // Keypad . 152 keypadDivide = 331, // Keypad / 153 keypadMultiply = 332, // Keypad * 154 keypadSubtract = 333, // Keypad - 155 keypadSum = 334, // Keypad + 156 keypadEnter = 335, // Keypad Enter 157 keypadEqual = 336, // Keypad = 158 androidBack = 4, // Android back button 159 androidMenu = 82, // Android menu button 160 volumeUp = 24, // Android volume up button 161 volumeDown = 25 // Android volume down button 162 // Function keys for volume? 163 164 } 165 166 }