46 lines
1.5 KiB
C
46 lines
1.5 KiB
C
/*
|
|
* FnixLib - cola de eventos.
|
|
*
|
|
* Además de las consultas de estado de input.h, cada ventana guarda los
|
|
* eventos recibidos en una cola que el programa puede vaciar con
|
|
* fnix_window_poll_event(). La cola conserva como máximo los 256 eventos más
|
|
* recientes: si el programa no la consulta, los más antiguos se descartan.
|
|
*/
|
|
#ifndef FNIX_EVENTS_H
|
|
#define FNIX_EVENTS_H
|
|
|
|
#include "fnix/input.h"
|
|
#include "fnix/types.h"
|
|
|
|
FNIX_BEGIN_DECLS
|
|
|
|
typedef enum FnixEventType {
|
|
FNIX_EVENT_NONE = 0,
|
|
FNIX_EVENT_WINDOW_CLOSE, /* el usuario pidió cerrar la ventana */
|
|
FNIX_EVENT_FOCUS_GAINED,
|
|
FNIX_EVENT_FOCUS_LOST,
|
|
FNIX_EVENT_KEY_DOWN, /* usa key y repeat */
|
|
FNIX_EVENT_KEY_UP, /* usa key */
|
|
FNIX_EVENT_MOUSE_BUTTON_DOWN, /* usa button, x, y */
|
|
FNIX_EVENT_MOUSE_BUTTON_UP, /* usa button, x, y */
|
|
FNIX_EVENT_MOUSE_MOVE, /* usa x, y */
|
|
FNIX_EVENT_MOUSE_WHEEL /* usa wheel, x, y */
|
|
} FnixEventType;
|
|
|
|
/* Solo son significativos los campos indicados para cada tipo; el resto vale 0. */
|
|
typedef struct FnixEvent {
|
|
FnixEventType type;
|
|
FnixKey key;
|
|
bool repeat; /* KEY_DOWN generado por autorepeat */
|
|
FnixMouseButton button;
|
|
int x, y;
|
|
int wheel; /* +1 arriba, -1 abajo */
|
|
} FnixEvent;
|
|
|
|
/* Saca el evento más antiguo de la cola. Devuelve false si está vacía. */
|
|
bool fnix_window_poll_event(FnixWindow *window, FnixEvent *event);
|
|
|
|
FNIX_END_DECLS
|
|
|
|
#endif /* FNIX_EVENTS_H */
|