16#ifndef INPUT_GP_EVENT_H
17#define INPUT_GP_EVENT_H
22#include <input/gp_types.h>
23#include <input/gp_keys.h>
24#include <input/gp_event_keys.h>
36enum gp_event_key_code {
42enum gp_event_rel_code {
47enum gp_event_abs_code {
51enum gp_event_sys_code {
55 GP_EV_SYS_CLIPBOARD = 2,
66 uint32_t pressure, pressure_max;
81#define GP_EVENT_KEY_BITMAP_BYTES 56
83struct gp_events_state {
85 uint8_t keys_pressed[GP_EVENT_KEY_BITMAP_BYTES];
91 uint32_t saved_cursor_x;
92 uint32_t saved_cursor_y;
104 struct gp_ev_key key;
106 struct gp_ev_pos_rel rel;
107 struct gp_ev_pos_abs abs;
109 struct gp_ev_sys sys;
110 struct gp_ev_utf utf;
119 struct gp_events_state *st;
125static inline int gp_ev_utf_is_ctrl(gp_event *ev)
127 return ev->utf.ch < 0x20 && ev->utf.ch != 0x7f;
133static inline void gp_events_state_press(gp_events_state *self, uint32_t key)
135 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
138 self->keys_pressed[(key)/8] |= 1<<((key)%8);
141static inline int gp_events_state_pressed(gp_events_state *self, uint32_t key)
143 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
146 return !!(self->keys_pressed[(key)/8] & (1<<((key)%8)));
149static inline void gp_events_state_release(gp_events_state *self, uint32_t key)
151 if (key >= GP_EVENT_KEY_BITMAP_BYTES * 8)
154 self->keys_pressed[(key)/8] &= ~(1<<((key)%8));
157static inline void gp_events_state_release_all(gp_events_state *self)
159 memset(self->keys_pressed, 0,
sizeof(self->keys_pressed));
162static inline int gp_ev_key_pressed(gp_event *ev, uint32_t key)
167 return gp_events_state_pressed(ev->st, key);
170#define gp_ev_any_key_pressed(ev, ...) gp_ev_any_key_pressed_(ev, __VA_ARGS__, 0)
171#define gp_ev_all_keys_pressed(ev, ...) gp_ev_all_keys_pressed_(ev, __VA_ARGS__, 0)
176int gp_ev_any_key_pressed_(gp_event *ev, ...);
181int gp_ev_all_keys_pressed_(gp_event *ev, ...);
186void gp_ev_dump(gp_event *ev);