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 }