15#ifndef INPUT_GP_EV_QUEUE_H
16#define INPUT_GP_EV_QUEUE_H
18#include <input/gp_ev_feedback.h>
19#include <input/gp_event.h>
21#define GP_EVENT_QUEUE_SIZE 32
25 unsigned int screen_w;
26 unsigned int screen_h;
33 unsigned int queue_first;
34 unsigned int queue_last;
35 unsigned int queue_size;
41 gp_ev_feedback *feedbacks_list;
48 gp_events_state state;
50 gp_event events[GP_EVENT_QUEUE_SIZE];
53enum gp_ev_queue_flags {
54 GP_EVENT_QUEUE_LOAD_KEYMAP = 0x01,
63void gp_ev_queue_init(gp_ev_queue *self,
64 unsigned int screen_w,
unsigned int screen_h,
65 unsigned int queue_size,
int flags);
70void gp_ev_queue_set_screen_size(gp_ev_queue *self,
71 unsigned int w,
unsigned int h);
79static inline void gp_ev_queue_feedback_register(gp_ev_queue *self, gp_ev_feedback *feedback)
81 gp_ev_feedback_register(&self->feedbacks_list, feedback);
90static inline void gp_ev_queue_feedback_unregister(gp_ev_queue *self, gp_ev_feedback *feedback)
92 gp_ev_feedback_unregister(&self->feedbacks_list, feedback);
101static inline void gp_ev_queue_feedback_set_all(gp_ev_queue *self, gp_ev_feedback_op *op)
103 gp_ev_feedback_set_all(self->feedbacks_list, op);
109void gp_ev_queue_set_cursor_pos(gp_ev_queue *self,
110 unsigned int x,
unsigned int y);
115unsigned int gp_ev_queue_events(gp_ev_queue *self);
123static inline int gp_ev_queue_full(gp_ev_queue *self)
125 unsigned int next = (self->queue_last + 1) % self->queue_size;
127 return next == self->queue_first;
138gp_event *gp_ev_queue_get(gp_ev_queue *self);
148gp_event *gp_ev_queue_peek(gp_ev_queue *self);
156void gp_ev_queue_put(gp_ev_queue *self, gp_event *ev);
162void gp_ev_queue_put_back(gp_ev_queue *self, gp_event *ev);
171void gp_ev_queue_push_rel(gp_ev_queue *self,
172 int32_t rx, int32_t ry, uint64_t time);
179void gp_ev_queue_push_rel_to(gp_ev_queue *self,
180 uint32_t x, uint32_t y, uint64_t time);
187void gp_ev_queue_push_abs(gp_ev_queue *self,
188 uint32_t x, uint32_t y, uint32_t pressure,
189 uint32_t x_max, uint32_t y_max, uint32_t pressure_max,
200void gp_ev_queue_push_key(gp_ev_queue *self,
201 uint32_t key, uint8_t code,
211void gp_ev_queue_push_utf(gp_ev_queue *self, uint32_t utf_ch,
217void gp_ev_queue_push_resize(gp_ev_queue *self,
218 uint32_t w, uint32_t h, uint64_t time);
223void gp_ev_queue_push(gp_ev_queue *self,
224 uint16_t type, uint32_t code, int32_t value,
230static inline void gp_ev_queue_push_wheel(gp_ev_queue *self,
231 int32_t val, uint64_t time)
233 gp_ev_queue_push(self, GP_EV_REL, GP_EV_REL_WHEEL, val, time);