#ifndef __al_included_allegro5_events_h #define __al_included_allegro5_events_h #include "allegro5/altime.h" #ifdef __cplusplus extern "C" { #endif /* Type: ALLEGRO_EVENT_TYPE */ typedef unsigned int ALLEGRO_EVENT_TYPE; enum { ALLEGRO_EVENT_JOYSTICK_AXIS = 1, ALLEGRO_EVENT_JOYSTICK_BUTTON_DOWN = 2, ALLEGRO_EVENT_JOYSTICK_BUTTON_UP = 3, ALLEGRO_EVENT_JOYSTICK_CONFIGURATION = 4, ALLEGRO_EVENT_KEY_DOWN = 10, ALLEGRO_EVENT_KEY_CHAR = 11, ALLEGRO_EVENT_KEY_UP = 12, ALLEGRO_EVENT_MOUSE_AXES = 20, ALLEGRO_EVENT_MOUSE_BUTTON_DOWN = 21, ALLEGRO_EVENT_MOUSE_BUTTON_UP = 22, ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY = 23, ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY = 24, ALLEGRO_EVENT_MOUSE_WARPED = 25, ALLEGRO_EVENT_TIMER = 30, ALLEGRO_EVENT_DISPLAY_EXPOSE = 40, ALLEGRO_EVENT_DISPLAY_RESIZE = 41, ALLEGRO_EVENT_DISPLAY_CLOSE = 42, ALLEGRO_EVENT_DISPLAY_LOST = 43, ALLEGRO_EVENT_DISPLAY_FOUND = 44, ALLEGRO_EVENT_DISPLAY_SWITCH_IN = 45, ALLEGRO_EVENT_DISPLAY_SWITCH_OUT = 46, ALLEGRO_EVENT_DISPLAY_ORIENTATION = 47 }; /* Function: ALLEGRO_EVENT_TYPE_IS_USER * * 1 <= n < 512 - builtin events * 512 <= n < 1024 - reserved user events (for addons) * 1024 <= n - unreserved user events */ #define ALLEGRO_EVENT_TYPE_IS_USER(t) ((t) >= 512) /* Function: ALLEGRO_GET_EVENT_TYPE */ #define ALLEGRO_GET_EVENT_TYPE(a, b, c, d) AL_ID(a, b, c, d) /* Type: ALLEGRO_EVENT_SOURCE */ typedef struct ALLEGRO_EVENT_SOURCE ALLEGRO_EVENT_SOURCE; struct ALLEGRO_EVENT_SOURCE { int __pad[32]; }; /* * Event structures * * All event types have the following fields in common. * * type -- the type of event this is * timestamp -- when this event was generated * source -- which event source generated this event * * For people writing event sources: The common fields must be at the * very start of each event structure, i.e. put _AL_EVENT_HEADER at the * front. */ #define _AL_EVENT_HEADER(srctype) \ ALLEGRO_EVENT_TYPE type; \ srctype *source; \ double timestamp; typedef struct ALLEGRO_ANY_EVENT { _AL_EVENT_HEADER(ALLEGRO_EVENT_SOURCE) } ALLEGRO_ANY_EVENT; typedef struct ALLEGRO_DISPLAY_EVENT { _AL_EVENT_HEADER(struct ALLEGRO_DISPLAY) int x, y; int width, height; int orientation; } ALLEGRO_DISPLAY_EVENT; typedef struct ALLEGRO_JOYSTICK_EVENT { _AL_EVENT_HEADER(struct ALLEGRO_JOYSTICK) struct ALLEGRO_JOYSTICK *id; int stick; int axis; float pos; int button; } ALLEGRO_JOYSTICK_EVENT; typedef struct ALLEGRO_KEYBOARD_EVENT { _AL_EVENT_HEADER(struct ALLEGRO_KEYBOARD) struct ALLEGRO_DISPLAY *display; /* the window the key was pressed in */ int keycode; /* the physical key pressed */ int unichar; /* unicode character or negative */ unsigned int modifiers; /* bitfield */ bool repeat; /* auto-repeated or not */ } ALLEGRO_KEYBOARD_EVENT; typedef struct ALLEGRO_MOUSE_EVENT { _AL_EVENT_HEADER(struct ALLEGRO_MOUSE) struct ALLEGRO_DISPLAY *display; /* (display) Window the event originate from * (x, y) Primary mouse position * (z) Mouse wheel position (1D 'wheel'), or, * (w, z) Mouse wheel position (2D 'ball') * (pressure) The pressure applied, for stylus (0 or 1 for normal mouse) */ int x, y, z, w; int dx, dy, dz, dw; unsigned int button; float pressure; } ALLEGRO_MOUSE_EVENT; typedef struct ALLEGRO_TIMER_EVENT { _AL_EVENT_HEADER(struct ALLEGRO_TIMER) int64_t count; double error; } ALLEGRO_TIMER_EVENT; /* Type: ALLEGRO_USER_EVENT */ typedef struct ALLEGRO_USER_EVENT ALLEGRO_USER_EVENT; struct ALLEGRO_USER_EVENT { _AL_EVENT_HEADER(struct ALLEGRO_EVENT_SOURCE) struct ALLEGRO_USER_EVENT_DESCRIPTOR *__internal__descr; intptr_t data1; intptr_t data2; intptr_t data3; intptr_t data4; }; /* Type: ALLEGRO_EVENT */ typedef union ALLEGRO_EVENT ALLEGRO_EVENT; union ALLEGRO_EVENT { /* This must be the same as the first field of _AL_EVENT_HEADER. */ ALLEGRO_EVENT_TYPE type; /* `any' is to allow the user to access the other fields which are * common to all event types, without using some specific type * structure. */ ALLEGRO_ANY_EVENT any; ALLEGRO_DISPLAY_EVENT display; ALLEGRO_JOYSTICK_EVENT joystick; ALLEGRO_KEYBOARD_EVENT keyboard; ALLEGRO_MOUSE_EVENT mouse; ALLEGRO_TIMER_EVENT timer; ALLEGRO_USER_EVENT user; }; /* Event sources */ AL_FUNC(void, al_init_user_event_source, (ALLEGRO_EVENT_SOURCE *)); AL_FUNC(void, al_destroy_user_event_source, (ALLEGRO_EVENT_SOURCE *)); /* The second argument is ALLEGRO_EVENT instead of ALLEGRO_USER_EVENT * to prevent users passing a pointer to a too-short structure. */ AL_FUNC(bool, al_emit_user_event, (ALLEGRO_EVENT_SOURCE *, ALLEGRO_EVENT *, void (*dtor)(ALLEGRO_USER_EVENT *))); AL_FUNC(void, al_unref_user_event, (ALLEGRO_USER_EVENT *)); AL_FUNC(void, al_set_event_source_data, (ALLEGRO_EVENT_SOURCE*, intptr_t data)); AL_FUNC(intptr_t, al_get_event_source_data, (const ALLEGRO_EVENT_SOURCE*)); /* Event queues */ /* Type: ALLEGRO_EVENT_QUEUE */ typedef struct ALLEGRO_EVENT_QUEUE ALLEGRO_EVENT_QUEUE; AL_FUNC(ALLEGRO_EVENT_QUEUE*, al_create_event_queue, (void)); AL_FUNC(void, al_destroy_event_queue, (ALLEGRO_EVENT_QUEUE*)); AL_FUNC(void, al_register_event_source, (ALLEGRO_EVENT_QUEUE*, ALLEGRO_EVENT_SOURCE*)); AL_FUNC(void, al_unregister_event_source, (ALLEGRO_EVENT_QUEUE*, ALLEGRO_EVENT_SOURCE*)); AL_FUNC(bool, al_is_event_queue_empty, (ALLEGRO_EVENT_QUEUE*)); AL_FUNC(bool, al_get_next_event, (ALLEGRO_EVENT_QUEUE*, ALLEGRO_EVENT *ret_event)); AL_FUNC(bool, al_peek_next_event, (ALLEGRO_EVENT_QUEUE*, ALLEGRO_EVENT *ret_event)); AL_FUNC(bool, al_drop_next_event, (ALLEGRO_EVENT_QUEUE*)); AL_FUNC(void, al_flush_event_queue, (ALLEGRO_EVENT_QUEUE*)); AL_FUNC(void, al_wait_for_event, (ALLEGRO_EVENT_QUEUE*, ALLEGRO_EVENT *ret_event)); AL_FUNC(bool, al_wait_for_event_timed, (ALLEGRO_EVENT_QUEUE*, ALLEGRO_EVENT *ret_event, float secs)); AL_FUNC(bool, al_wait_for_event_until, (ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event, ALLEGRO_TIMEOUT *timeout)); #ifdef __cplusplus } #endif #endif /* vim: set sts=3 sw=3 et: */