summaryrefslogtreecommitdiff
path: root/app.hpp
blob: 80d6cb067fdb54e1547e05aa0ba0475d74974b81 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef app_hpp
#define app_hpp

#define app_memory_size (4096 * 16)

struct Arena;

#define key_xmacro() \
	x(key_unknown) \
	x(key_A) \
	x(key_B) \
	x(key_C) \
	x(key_D) \
	x(key_E) \
	x(key_F) \
	x(key_G) \
	x(key_H) \
	x(key_I) \
	x(key_J) \
	x(key_K) \
	x(key_L) \
	x(key_M) \
	x(key_N) \
	x(key_O) \
	x(key_P) \
	x(key_Q) \
	x(key_R) \
	x(key_S) \
	x(key_T) \
	x(key_U) \
	x(key_V) \
	x(key_W) \
	x(key_X) \
	x(key_Y) \
	x(key_Z) \
	x(key_f1) \
	x(key_f2) \
	x(key_f3) \
	x(key_f4) \
	x(key_f5) \
	x(key_f6) \
	x(key_f7) \
	x(key_f8) \
	x(key_f9) \
	x(key_f10) \
	x(key_f11) \
	x(key_f12) \
	x(key_down) \
	x(key_left) \
	x(key_right) \
	x(key_up) \
	x(key_escape) \
	x(key_return) \
	x(key_backspace) \
	x(key_tab) \
	x(key_delete) \
	x(key_home) \
	x(key_end) \
	x(key_page_up) \
	x(key_page_down) \
	x(key_insert) \
	x(key_shift) \
	x(key_control) \
	x(key_super) \
	x(key_alt) \
	x(key_space) \
	x(key_period) \
	x(key_0) \
	x(key_1) \
	x(key_2) \
	x(key_3) \
	x(key_4) \
	x(key_5) \
	x(key_6) \
	x(key_7) \
	x(key_8) \
	x(key_9) \

enum Key {
#define x(name) name,
	key_xmacro()
#undef x
	key_count
};

enum Mbtn {
	mbtn_left,
	mbtn_middle,
	mbtn_right,
	mbtn_count
};

enum Key_State {
	key_state_pressed       = 1 << 0,
	key_state_just_pressed  = 1 << 1,
	key_state_just_released = 1 << 2
};

struct App {
	Arena* arena;
	int running, w, h;
	int mx, my;
	int scrollx, scrolly;
	unsigned char key_states[key_count];
	unsigned char mbtn_states[mbtn_count];

	static App* create(const char* name);
	void destroy();

	void begin();
	void end();

	Key_State ks(Key k);
	Key_State ms(Mbtn k);
	bool kp(Key k);
	bool kjp(Key k);
	bool kjr(Key k);
	bool mp(Mbtn k);
	bool mjp(Mbtn k);
	bool mjr(Mbtn k);
};

#endif