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-2025 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 <utils/gp_types.h>
21#include <input/gp_types.h>
22#include <input/gp_keys.h>
23#include <input/gp_event_keys.h>
24
42
56
64
70
142
158
161 int32_t rx;
162 int32_t ry;
163};
164
167 uint32_t x, x_max;
168 uint32_t y, y_max;
169 uint32_t pressure, pressure_max;
170};
171
175struct gp_ev_key {
182 uint32_t key;
189 uint32_t utf;
190};
191
195 uint32_t w;
197 uint32_t h;
198};
199
200#define GP_EVENT_KEY_BITMAP_BYTES 56
201
209 uint8_t keys_pressed[GP_EVENT_KEY_BITMAP_BYTES];
210
212 uint32_t cursor_x;
214 uint32_t cursor_y;
215
220};
221
225struct gp_event {
227 uint16_t type;
229 uint16_t code;
231 union {
233 int32_t val;
243 uint16_t pixel_type;
248 };
249
251 uint64_t time;
252
255};
256
263static inline int gp_ev_utf_is_ctrl(const gp_event *ev)
264{
265 if (!ev->key.utf)
266 return 0;
267
268 return ev->key.utf < 0x20 && ev->key.utf != 0x7f;
269}
270
277static inline void gp_events_state_press(gp_events_state *self, uint32_t key)
278{
279 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
280 return;
281
282 self->keys_pressed[(key)/8] |= 1<<((key)%8);
283}
284
293static inline int gp_events_state_pressed(const gp_events_state *self, uint32_t key)
294{
295 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
296 return 0;
297
298 return !!(self->keys_pressed[(key)/8] & (1<<((key)%8)));
299}
300
307static inline void gp_events_state_release(gp_events_state *self, uint32_t key)
308{
309 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
310 return;
311
312 self->keys_pressed[(key)/8] &= ~(1<<((key)%8));
313}
314
321{
322 memset(self->keys_pressed, 0, sizeof(self->keys_pressed));
323}
324
333static inline int gp_ev_key_pressed(const gp_event *ev, uint32_t key)
334{
335 if (!ev->st)
336 return 0;
337
338 return gp_events_state_pressed(ev->st, key);
339}
340
349#define gp_ev_any_key_pressed(ev, ...) gp_ev_any_key_pressed_(ev, __VA_ARGS__, 0)
350int gp_ev_any_key_pressed_(const gp_event *ev, ...);
351
359#define gp_ev_all_keys_pressed(ev, ...) gp_ev_all_keys_pressed_(ev, __VA_ARGS__, 0)
360int gp_ev_all_keys_pressed_(const gp_event *ev, ...);
361
367void gp_ev_dump(const gp_event *ev);
368
369#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:277
static int gp_events_state_pressed(const gp_events_state *self, uint32_t key)
Helper to get key bit from the event state.
Definition gp_event.h:293
gp_ev_key_code
A key event type.
Definition gp_event.h:44
@ GP_EV_KEY_UP
Key released.
Definition gp_event.h:46
@ GP_EV_KEY_REPEAT
Key repeated.
Definition gp_event.h:54
@ GP_EV_KEY_DOWN
Key pressed.
Definition gp_event.h:48
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:307
gp_ev_sys_focus_val
Values for the GP_EV_SYS_FOCUS event.
Definition gp_event.h:152
@ GP_EV_SYS_FOCUS_OUT
Application was focused out.
Definition gp_event.h:154
@ GP_EV_SYS_FOCUS_IN
Appliaction was focused in.
Definition gp_event.h:156
gp_ev_sys_code
System events.
Definition gp_event.h:72
@ GP_EV_SYS_RENDER_STOP
Stops rendering.
Definition gp_event.h:125
@ GP_EV_SYS_CLIPBOARD
Clipboard request is ready.
Definition gp_event.h:99
@ GP_EV_SYS_RENDER_PIXEL_TYPE
Pixel type for the rendering.
Definition gp_event.h:140
@ GP_EV_SYS_RENDER_START
Starts rendering.
Definition gp_event.h:132
@ GP_EV_SYS_FOCUS
A focus in or focus out event.
Definition gp_event.h:113
@ GP_EV_SYS_RENDER_RESIZE
The backend was resized.
Definition gp_event.h:91
@ GP_EV_SYS_BACKLIGHT
Backlight brightness change.
Definition gp_event.h:106
@ GP_EV_SYS_QUIT
User requested application to quit.
Definition gp_event.h:79
static int gp_ev_utf_is_ctrl(const gp_event *ev)
Checks if a character is not printable.
Definition gp_event.h:263
gp_ev_rel_code
A relative event type.
Definition gp_event.h:58
@ GP_EV_REL_WHEEL
A mouse wheel.
Definition gp_event.h:62
@ GP_EV_REL_POS
A relative position.
Definition gp_event.h:60
gp_ev_type
An event type.
Definition gp_event.h:26
@ GP_EV_SYS
A system events, window close, resize, etc.
Definition gp_event.h:34
@ GP_EV_ABS
An absolute event, e.g. touchscreen touch.
Definition gp_event.h:32
@ GP_EV_REL
A relative event, e.g. mouse cursor movement.
Definition gp_event.h:30
@ GP_EV_MAX
Last used event type.
Definition gp_event.h:40
@ GP_EV_KEY
A key or button press event.
Definition gp_event.h:28
@ GP_EV_FD
A poll event on a filescriptor.
Definition gp_event.h:38
@ GP_EV_TMR
A timer expired.
Definition gp_event.h:36
static int gp_ev_key_pressed(const gp_event *ev, uint32_t key)
Checks if key is being pressed.
Definition gp_event.h:333
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:320
void gp_ev_dump(const gp_event *ev)
Dumps event into a stdout.
gp_ev_abs_code
An absolute event type.
Definition gp_event.h:66
@ GP_EV_ABS_POS
An absolute position.
Definition gp_event.h:68
Key event values.
A key utility functions.
A key press/release/repeat event.
Definition gp_event.h:175
uint32_t key
One of enum gp_event_key_value.
Definition gp_event.h:182
uint32_t utf
Unicode character (finalized) by this keystroke.
Definition gp_event.h:189
An absolute cursor position.
Definition gp_event.h:166
A relative cursor position change.
Definition gp_event.h:160
A value for the GP_EV_SYS_RENDER_RESIZE event.
Definition gp_event.h:193
uint32_t h
New height for a window resize event.
Definition gp_event.h:197
uint32_t w
New width for a window resize event.
Definition gp_event.h:195
An input event.
Definition gp_event.h:225
struct gp_ev_pos_abs abs
An absolute position.
Definition gp_event.h:239
gp_timer * tmr
A timer expired event.
Definition gp_event.h:245
int32_t val
A generic integer value.
Definition gp_event.h:233
uint16_t code
enum gp_event_*_code
Definition gp_event.h:229
uint16_t pixel_type
A value for the GP_EV_SYS_RENDER_PIXEL_TYPE event.
Definition gp_event.h:243
gp_fd * fd
A poll fd event.
Definition gp_event.h:247
struct gp_ev_sys_resize resize
A value for the GP_EV_SYS_RENDER_RESIZE event.
Definition gp_event.h:241
struct gp_ev_key key
A keyboard or mouse key.
Definition gp_event.h:235
struct gp_events_state * st
Pointer to overall state, pressed keys, cursor position etc.
Definition gp_event.h:254
uint16_t type
enum gp_event_type
Definition gp_event.h:227
struct gp_ev_pos_rel rel
A relative change in position.
Definition gp_event.h:237
uint64_t time
An event timestamp.
Definition gp_event.h:251
An input events state.
Definition gp_event.h:207
uint32_t saved_cursor_x
Saved cursor x coordinate.
Definition gp_event.h:217
uint8_t keys_pressed[56]
Bitmap of pressed keys including mouse buttons.
Definition gp_event.h:209
uint32_t saved_cursor_y
Saved cursor y coordinate.
Definition gp_event.h:219
uint32_t cursor_y
Current cursor y coordinate.
Definition gp_event.h:214
uint32_t cursor_x
Current cursor x coordinate.
Definition gp_event.h:212
An epoll file descriptor.
Definition gp_poll.h:70
A timer.
Definition gp_timer.h:26
Common header for types.