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 }