-
Notifications
You must be signed in to change notification settings - Fork 1
/
loax_event.h
209 lines (189 loc) · 5.18 KB
/
loax_event.h
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/*
* Copyright (c) 2013 Jeff Boody
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/
#ifndef loax_event_H
#define loax_event_H
// type
#define LOAX_EVENT_KEYDOWN 0
#define LOAX_EVENT_KEYUP 1
#define LOAX_EVENT_BUTTONDOWN 2
#define LOAX_EVENT_BUTTONUP 3
#define LOAX_EVENT_AXISMOVE 4
#define LOAX_EVENT_RESIZE 5
#define LOAX_EVENT_TOUCHDOWN 6
#define LOAX_EVENT_TOUCHUP 7
#define LOAX_EVENT_TOUCHMOVE 8
#define LOAX_EVENT_ACCELEROMETER 9
#define LOAX_EVENT_MAGNETOMETER 10
#define LOAX_EVENT_GPS 11
#define LOAX_EVENT_GYROSCOPE 12
// meta key mask
#define LOAX_KEY_ALT 0x00000032
#define LOAX_KEY_ALT_L 0x00000010
#define LOAX_KEY_ALT_R 0x00000020
#define LOAX_KEY_CTRL 0x00007000
#define LOAX_KEY_CTRL_L 0x00002000
#define LOAX_KEY_CTRL_R 0x00004000
#define LOAX_KEY_SHIFT 0x000000C1
#define LOAX_KEY_SHIFT_L 0x00000040
#define LOAX_KEY_SHIFT_R 0x00000080
#define LOAX_KEY_CAPS 0x00100000
// special keys
#define LOAX_KEY_ENTER 0x00D
#define LOAX_KEY_ESCAPE 0x01B
#define LOAX_KEY_BACKSPACE 0x008
#define LOAX_KEY_DELETE 0x07F
#define LOAX_KEY_UP 0x100
#define LOAX_KEY_DOWN 0x101
#define LOAX_KEY_LEFT 0x102
#define LOAX_KEY_RIGHT 0x103
#define LOAX_KEY_HOME 0x104
#define LOAX_KEY_END 0x105
#define LOAX_KEY_PGUP 0x106
#define LOAX_KEY_PGDOWN 0x107
#define LOAX_KEY_INSERT 0x108
// button ids
#define LOAX_BUTTON_1 0xBC
#define LOAX_BUTTON_2 0xBD
#define LOAX_BUTTON_3 0xBE
#define LOAX_BUTTON_4 0xBF
#define LOAX_BUTTON_5 0xC0
#define LOAX_BUTTON_6 0xC1
#define LOAX_BUTTON_7 0xC2
#define LOAX_BUTTON_8 0xC3
#define LOAX_BUTTON_9 0xC4
#define LOAX_BUTTON_10 0xC5
#define LOAX_BUTTON_11 0xC6
#define LOAX_BUTTON_12 0xC7
#define LOAX_BUTTON_13 0xC8
#define LOAX_BUTTON_14 0xC9
#define LOAX_BUTTON_15 0xCA
#define LOAX_BUTTON_16 0xCB
#define LOAX_BUTTON_A 0x60
#define LOAX_BUTTON_B 0x61
#define LOAX_BUTTON_C 0x62
#define LOAX_BUTTON_L1 0x66
#define LOAX_BUTTON_R1 0x67
#define LOAX_BUTTON_L2 0x68
#define LOAX_BUTTON_R2 0x69
#define LOAX_BUTTON_MODE 0x6E
#define LOAX_BUTTON_SELECT 0x6D
#define LOAX_BUTTON_START 0x6C
#define LOAX_BUTTON_THUMBL 0x6A
#define LOAX_BUTTON_THUMBR 0x6B
#define LOAX_BUTTON_X 0x63
#define LOAX_BUTTON_Y 0x64
#define LOAX_BUTTON_Z 0x65
#define LOAX_BUTTON_UP 0x13
#define LOAX_BUTTON_DOWN 0x14
#define LOAX_BUTTON_LEFT 0x15
#define LOAX_BUTTON_RIGHT 0x16
#define LOAX_BUTTON_CENTER 0x17
// axis ids
#define LOAX_AXIS_X1 0x00
#define LOAX_AXIS_Y1 0x01
#define LOAX_AXIS_X2 0x0B
#define LOAX_AXIS_Y2 0x0E
#define LOAX_AXIS_HX 0x0F
#define LOAX_AXIS_HY 0x10
// max touch events supported
#define LOAX_EVENT_TOUCHMAX 4
typedef struct
{
int keycode;
int meta;
} loax_eventkey_t;
typedef struct
{
int keycode;
int id;
} loax_eventbutton_t;
typedef struct
{
int id;
int axis;
float value;
} loax_eventaxis_t;
typedef struct
{
float ax;
float ay;
float az;
int rotation;
} loax_eventaccelerometer_t;
typedef struct
{
float mx;
float my;
float mz;
} loax_eventmagnetometer_t;
typedef struct
{
double lat;
double lon;
float accuracy;
float altitude;
float speed;
float bearing;
} loax_eventgps_t;
typedef struct
{
float ax;
float ay;
float az;
} loax_eventgyroscope_t;
typedef struct
{
int w;
int h;
} loax_eventresize_t;
typedef struct
{
float x;
float y;
} loax_eventcoord_t;
typedef struct
{
int count;
loax_eventcoord_t coord[LOAX_EVENT_TOUCHMAX];
} loax_eventtouch_t;
typedef struct
{
int type;
double utime;
union
{
loax_eventkey_t event_key;
loax_eventbutton_t event_button;
loax_eventaxis_t event_axis;
loax_eventaccelerometer_t event_accelerometer;
loax_eventmagnetometer_t event_magnetometer;
loax_eventgps_t event_gps;
loax_eventgyroscope_t event_gyroscope;
loax_eventresize_t event_resize;
loax_eventtouch_t event_touch;
};
} loax_event_t;
const char* loax_eventkey_keystring(loax_eventkey_t* self);
const char* loax_eventbutton_keystring(loax_eventbutton_t* self);
const char* loax_eventaxis_axisstring(loax_eventaxis_t* self);
#endif