GFXprim
2D bitmap graphics library with emphasis on speed and correctness
Loading...
Searching...
No Matches
gp_event.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2/*
3 * Copyright (C) 2009-2021 Cyril Hrubis <metan@ucw.cz>
4 */
5
14#ifndef INPUT_GP_EVENT_H
15#define INPUT_GP_EVENT_H
16
17#include <stdint.h>
18#include <string.h>
19
20#include <input/gp_types.h>
21#include <input/gp_keys.h>
22#include <input/gp_event_keys.h>
23
41
55
63
69
103
106 int32_t rx;
107 int32_t ry;
108};
109
112 uint32_t x, x_max;
113 uint32_t y, y_max;
114 uint32_t pressure, pressure_max;
115};
116
117struct gp_ev_key {
118 uint32_t key;
119};
120
122struct gp_ev_sys {
124 uint32_t w;
126 uint32_t h;
127};
128
130struct gp_ev_utf {
132 uint32_t ch;
133};
134
135#define GP_EVENT_KEY_BITMAP_BYTES 56
136
144 uint8_t keys_pressed[GP_EVENT_KEY_BITMAP_BYTES];
145
147 uint32_t cursor_x;
149 uint32_t cursor_y;
150
155};
156
160struct gp_event {
162 uint16_t type;
164 uint16_t code;
166 union {
168 int32_t val;
170 struct gp_ev_key key;
181 };
182
184 uint64_t time;
185
188};
189
196static inline int gp_ev_utf_is_ctrl(gp_event *ev)
197{
198 return ev->utf.ch < 0x20 && ev->utf.ch != 0x7f;
199}
200
207static inline void gp_events_state_press(gp_events_state *self, uint32_t key)
208{
209 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
210 return;
211
212 self->keys_pressed[(key)/8] |= 1<<((key)%8);
213}
214
223static inline int gp_events_state_pressed(gp_events_state *self, uint32_t key)
224{
225 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
226 return 0;
227
228 return !!(self->keys_pressed[(key)/8] & (1<<((key)%8)));
229}
230
237static inline void gp_events_state_release(gp_events_state *self, uint32_t key)
238{
239 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
240 return;
241
242 self->keys_pressed[(key)/8] &= ~(1<<((key)%8));
243}
244
251{
252 memset(self->keys_pressed, 0, sizeof(self->keys_pressed));
253}
254
263static inline int gp_ev_key_pressed(gp_event *ev, uint32_t key)
264{
265 if (!ev->st)
266 return 0;
267
268 return gp_events_state_pressed(ev->st, key);
269}
270
279#define gp_ev_any_key_pressed(ev, ...) gp_ev_any_key_pressed_(ev, __VA_ARGS__, 0)
280int gp_ev_any_key_pressed_(gp_event *ev, ...);
281
289#define gp_ev_all_keys_pressed(ev, ...) gp_ev_all_keys_pressed_(ev, __VA_ARGS__, 0)
290int gp_ev_all_keys_pressed_(gp_event *ev, ...);
291
298
299#endif /* INPUT_GP_EVENT_H */
static void gp_events_state_press(gp_events_state *self, uint32_t key)
Helper to set key bit in the event state.
Definition gp_event.h:207
gp_ev_key_code
A key event type.
Definition gp_event.h:43
@ GP_EV_KEY_UP
Key released.
Definition gp_event.h:45
@ GP_EV_KEY_REPEAT
Key repeated.
Definition gp_event.h:53
@ GP_EV_KEY_DOWN
Key pressed.
Definition gp_event.h:47
static void gp_events_state_release(gp_events_state *self, uint32_t key)
Helper to reset key bit in the event state.
Definition gp_event.h:237
gp_ev_sys_code
System events.
Definition gp_event.h:71
@ GP_EV_SYS_CLIPBOARD
Clipboard request is ready.
Definition gp_event.h:94
@ GP_EV_SYS_RESIZE
User resized the applicaton window.
Definition gp_event.h:86
@ GP_EV_SYS_BACKLIGHT
Backlight brightness change.
Definition gp_event.h:101
@ GP_EV_SYS_QUIT
User requested application to quit.
Definition gp_event.h:78
void gp_ev_dump(gp_event *ev)
Dumps event into a stdout.
gp_ev_rel_code
A relative event type.
Definition gp_event.h:57
@ GP_EV_REL_WHEEL
A mouse wheel.
Definition gp_event.h:61
@ GP_EV_REL_POS
A relative position.
Definition gp_event.h:59
static int gp_ev_utf_is_ctrl(gp_event *ev)
Checks if a character is not printable.
Definition gp_event.h:196
static int gp_ev_key_pressed(gp_event *ev, uint32_t key)
Checks if key is being pressed.
Definition gp_event.h:263
gp_ev_type
An event type.
Definition gp_event.h:25
@ GP_EV_SYS
A system events, window close, resize, etc.
Definition gp_event.h:33
@ GP_EV_UTF
An unicode character typed on a keyboard.
Definition gp_event.h:37
@ GP_EV_ABS
An absolute event, e.g. touchscreen touch.
Definition gp_event.h:31
@ GP_EV_REL
A relative event, e.g. mouse cursor movement.
Definition gp_event.h:29
@ GP_EV_MAX
Last used event type.
Definition gp_event.h:39
@ GP_EV_KEY
A key or button press event.
Definition gp_event.h:27
@ GP_EV_TMR
A timer expired.
Definition gp_event.h:35
static void gp_events_state_release_all(gp_events_state *self)
Helper to reset all key bits in the event state.
Definition gp_event.h:250
static int gp_events_state_pressed(gp_events_state *self, uint32_t key)
Helper to get key bit from the event state.
Definition gp_event.h:223
gp_ev_abs_code
An absolute event type.
Definition gp_event.h:65
@ GP_EV_ABS_POS
An absolute position.
Definition gp_event.h:67
Key event values.
A key utility functions.
An absolute cursor position.
Definition gp_event.h:111
A relative cursor position change.
Definition gp_event.h:105
An system event value.
Definition gp_event.h:122
uint32_t w
New width for a window resize event.
Definition gp_event.h:124
uint32_t h
New height for a window resize event.
Definition gp_event.h:126
An unicode event value.
Definition gp_event.h:130
uint32_t ch
An unicode character.
Definition gp_event.h:132
An input event.
Definition gp_event.h:160
struct gp_ev_pos_abs abs
An absolute position.
Definition gp_event.h:174
gp_timer * tmr
A timer expired event.
Definition gp_event.h:180
int32_t val
A generic integer value.
Definition gp_event.h:168
uint16_t code
enum gp_event_*_code
Definition gp_event.h:164
struct gp_ev_key key
A keyboard or mouse key.
Definition gp_event.h:170
struct gp_ev_utf utf
An unicode input event.
Definition gp_event.h:178
struct gp_events_state * st
Pointer to overall state, pressed keys, cursor position etc.
Definition gp_event.h:187
struct gp_ev_sys sys
A system event.
Definition gp_event.h:176
uint16_t type
enum gp_event_type
Definition gp_event.h:162
struct gp_ev_pos_rel rel
A relative change in position.
Definition gp_event.h:172
uint64_t time
An event timestamp.
Definition gp_event.h:184
An input events state.
Definition gp_event.h:142
uint32_t saved_cursor_x
Saved cursor x coordinate.
Definition gp_event.h:152
uint8_t keys_pressed[56]
Bitmap of pressed keys including mouse buttons.
Definition gp_event.h:144
uint32_t saved_cursor_y
Saved cursor y coordinate.
Definition gp_event.h:154
uint32_t cursor_y
Current cursor y coordinate.
Definition gp_event.h:149
uint32_t cursor_x
Current cursor x coordinate.
Definition gp_event.h:147
A timer.
Definition gp_timer.h:26