1 module d2d.toolkit.input.keyboard;
2 
3 import d2d.window.windowevent;
4 
5 struct Keyboard
6 {
7 	@disable this(this);
8 
9 	bool[256] keys;
10 	bool[uint] extendedKeys;
11 
12 	static Keyboard instance;
13 
14 	Keyboard dup()
15 	{
16 		return Keyboard(keys, extendedKeys.dup);
17 	}
18 
19 	bool isPressed(int key)
20 	{
21 		if (key < keys.length)
22 			return keys[key];
23 		else if (auto v = key in extendedKeys)
24 			return *v;
25 		else
26 			return false;
27 	}
28 
29 	void keyDown(int key)
30 	{
31 		if (key < keys.length)
32 			keys[key] = true;
33 		else
34 			extendedKeys[key] = true;
35 	}
36 
37 	void keyUp(int key)
38 	{
39 		if (key < keys.length)
40 			keys[key] = false;
41 		else
42 			extendedKeys[key] = false;
43 	}
44 
45 	void handle(Event event)
46 	{
47 		switch (event.type)
48 		{
49 		case Event.Type.KeyPressed:
50 			keyDown(event.key);
51 			break;
52 		case Event.Type.KeyReleased:
53 			keyUp(event.key);
54 			break;
55 		default:
56 			break;
57 		}
58 	}
59 }