GFXprim
2D bitmap graphics library with emphasis on speed and correctness
Loading...
Searching...
No Matches
gp_ev_queue.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2/*
3 * Copyright (C) 2009-2024 Cyril Hrubis <metan@ucw.cz>
4 */
5
14#ifndef INPUT_GP_EV_QUEUE_H
15#define INPUT_GP_EV_QUEUE_H
16
18#include <input/gp_event.h>
19
21#define GP_EVENT_QUEUE_SIZE 32
22
26 unsigned int screen_w;
28 unsigned int screen_h;
29
31 uint32_t cursor_x;
33 uint32_t cursor_y;
35 void (*cursor_move)(void *priv, uint32_t x, uint32_t y);
38
39 /* event queue */
40 unsigned int queue_first;
41 unsigned int queue_last;
42 unsigned int queue_size;
43
51 gp_keymap *keymap;
52
54 gp_ev_feedback *feedbacks_list;
55
64
67};
68
80
98 unsigned int screen_w, unsigned int screen_h,
99 unsigned int queue_size,
100 void (*cursor_move)(void *cursor_priv, uint32_t x, uint32_t y),
101 void *cursor_priv,
102 enum gp_ev_queue_flags flags);
103
110
122 unsigned int w, unsigned int h);
123
130static inline void gp_ev_queue_feedback_register(gp_ev_queue *self, gp_ev_feedback *feedback)
131{
132 gp_ev_feedback_register(&self->feedbacks_list, feedback);
133}
134
141static inline void gp_ev_queue_feedback_unregister(gp_ev_queue *self, gp_ev_feedback *feedback)
142{
144}
145
152static inline void gp_ev_queue_feedback_set_all(gp_ev_queue *self, gp_ev_feedback_op *op)
153{
155}
156
165 unsigned int x, unsigned int y);
166
173unsigned int gp_ev_queue_events(gp_ev_queue *self);
174
181static inline int gp_ev_queue_full(gp_ev_queue *self)
182{
183 unsigned int next = (self->queue_last + 1) % self->queue_size;
184
185 return next == self->queue_first;
186}
187
202
215
226
237
247 int32_t rx, int32_t ry, uint64_t time);
248
258 uint32_t x, uint32_t y, uint64_t time);
259
275 uint32_t x, uint32_t y, uint32_t pressure,
276 uint32_t x_max, uint32_t y_max, uint32_t pressure_max,
277 uint64_t time);
278
293 uint32_t key, uint8_t code,
294 uint64_t time);
295
303void gp_ev_queue_push_utf(gp_ev_queue *self, uint32_t utf_ch,
304 uint64_t time);
305
320 uint32_t new_w, uint32_t new_h, uint64_t time);
321
334 uint16_t type, uint32_t code, int32_t value,
335 uint64_t time);
336
344static inline void gp_ev_queue_push_wheel(gp_ev_queue *self,
345 int32_t val, uint64_t time)
346{
347 gp_ev_queue_push(self, GP_EV_REL, GP_EV_REL_WHEEL, val, time);
348}
349
350#endif /* INPUT_GP_EV_QUEUE_H */
An input event feedback, e.g. keyboard leds.
void gp_ev_feedback_unregister(gp_ev_feedback **root, gp_ev_feedback *self)
Removes a feedback from a feedback queue.
void gp_ev_feedback_set_all(gp_ev_feedback *root, gp_ev_feedback_op *op)
Passes an opeartion to all registered feedbacks.
void gp_ev_feedback_register(gp_ev_feedback **root, gp_ev_feedback *self)
Adds a feedback to a feedback queue.
void gp_ev_queue_put_back(gp_ev_queue *self, gp_event *ev)
Pushes back an event to the event queue.
void gp_ev_queue_push_resize(gp_ev_queue *self, uint32_t new_w, uint32_t new_h, uint64_t time)
Pushes a window resize event to the queue.
void gp_ev_queue_set_cursor_pos(gp_ev_queue *self, unsigned int x, unsigned int y)
Sets a cursor postion.
void gp_ev_queue_push_rel(gp_ev_queue *self, int32_t rx, int32_t ry, uint64_t time)
Pushes a relative event that moves cursor by rx and ry.
gp_event * gp_ev_queue_peek(gp_ev_queue *self)
Peeks at a top event from the queue.
static int gp_ev_queue_full(gp_ev_queue *self)
Returns true if queue is full.
gp_ev_queue_flags
An event queue init flags.
Definition gp_ev_queue.h:70
@ GP_EVENT_QUEUE_LOAD_KEYMAP
Load keymap during initialization.
Definition gp_ev_queue.h:78
void gp_ev_queue_put(gp_ev_queue *self, gp_event *ev)
Pushes an event to the event queue.
#define GP_EVENT_QUEUE_SIZE
Maximal number of events the queue can hold.
Definition gp_ev_queue.h:21
gp_event * gp_ev_queue_get(gp_ev_queue *self)
Remoes and returns pointer to a top event from the queue.
void gp_ev_queue_push_key(gp_ev_queue *self, uint32_t key, uint8_t code, uint64_t time)
Pushes a key event into the event queue.
void gp_ev_queue_push_abs(gp_ev_queue *self, uint32_t x, uint32_t y, uint32_t pressure, uint32_t x_max, uint32_t y_max, uint32_t pressure_max, uint64_t time)
Pushes an absolute event into the queue.
void gp_ev_queue_push_rel_to(gp_ev_queue *self, uint32_t x, uint32_t y, uint64_t time)
Pushes a relative event that moves cursor to the point x, y.
void gp_ev_queue_push_utf(gp_ev_queue *self, uint32_t utf_ch, uint64_t time)
Pushes an unicode character typed on keyboard into the queue.
unsigned int gp_ev_queue_events(gp_ev_queue *self)
Returns number of events queued in the queue.
void gp_ev_queue_push(gp_ev_queue *self, uint16_t type, uint32_t code, int32_t value, uint64_t time)
Push a generic event into the queue.
void gp_ev_queue_flush(gp_ev_queue *self)
Removes all events from the queue.
static void gp_ev_queue_feedback_unregister(gp_ev_queue *self, gp_ev_feedback *feedback)
Unregisters an input device feedback callback.
void gp_ev_queue_set_screen_size(gp_ev_queue *self, unsigned int w, unsigned int h)
Sets screen (window) size.
static void gp_ev_queue_push_wheel(gp_ev_queue *self, int32_t val, uint64_t time)
Pushes a mouse wheel movement into the queue.
static void gp_ev_queue_feedback_register(gp_ev_queue *self, gp_ev_feedback *feedback)
Registers an input device feedback callback.
static void gp_ev_queue_feedback_set_all(gp_ev_queue *self, gp_ev_feedback_op *op)
Calls a all feedback handlers with a specified value.
void gp_ev_queue_init(gp_ev_queue *self, unsigned int screen_w, unsigned int screen_h, unsigned int queue_size, void(*cursor_move)(void *cursor_priv, uint32_t x, uint32_t y), void *cursor_priv, enum gp_ev_queue_flags flags)
Initializes event queue.
An (input) event layer.
@ GP_EV_REL_WHEEL
A mouse wheel.
Definition gp_event.h:61
@ GP_EV_REL
A relative event, e.g. mouse cursor movement.
Definition gp_event.h:29
An event queue.
Definition gp_ev_queue.h:24
uint32_t cursor_y
A cursor y position valid for the last event in the queue.
Definition gp_ev_queue.h:33
gp_event events[32]
A circular buffer for input events.
Definition gp_ev_queue.h:66
uint32_t cursor_x
A cursor x position valid for the last event in the queue.
Definition gp_ev_queue.h:31
gp_keymap * keymap
A keymap.
Definition gp_ev_queue.h:51
void(* cursor_move)(void *priv, uint32_t x, uint32_t y)
A callback to move a cursor for backends that render cursor.
Definition gp_ev_queue.h:35
gp_ev_feedback * feedbacks_list
A list of callbacks to turn on/off leds, e.g. caps lock, and other feedback.
Definition gp_ev_queue.h:54
gp_events_state state
An accumulated state.
Definition gp_ev_queue.h:63
unsigned int screen_h
A display/window/screen height.
Definition gp_ev_queue.h:28
void * cursor_priv
A pointer passed to the cursor_move() callback.
Definition gp_ev_queue.h:37
unsigned int screen_w
A display/window/screen width.
Definition gp_ev_queue.h:26
An input event.
Definition gp_event.h:160
An input events state.
Definition gp_event.h:142