Annotation of sbbs/include/sdl/sdl_events.h, revision 1.1.1.1

1.1       root        1: /*
                      2:     SDL - Simple DirectMedia Layer
                      3:     Copyright (C) 1997-2004 Sam Lantinga
                      4: 
                      5:     This library is free software; you can redistribute it and/or
                      6:     modify it under the terms of the GNU Library General Public
                      7:     License as published by the Free Software Foundation; either
                      8:     version 2 of the License, or (at your option) any later version.
                      9: 
                     10:     This library is distributed in the hope that it will be useful,
                     11:     but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12:     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     13:     Library General Public License for more details.
                     14: 
                     15:     You should have received a copy of the GNU Library General Public
                     16:     License along with this library; if not, write to the Free
                     17:     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     18: 
                     19:     Sam Lantinga
                     20:     [email protected]
                     21: */
                     22: 
                     23: #ifdef SAVE_RCSID
                     24: static char rcsid =
                     25:  "@(#) $Id: SDL_events.h,v 1.1.1.1 2005/11/18 23:23:29 rswindell Exp $";
                     26: #endif
                     27: 
                     28: /* Include file for SDL event handling */
                     29: 
                     30: #ifndef _SDL_events_h
                     31: #define _SDL_events_h
                     32: 
                     33: #include "SDL_types.h"
                     34: #include "SDL_active.h"
                     35: #include "SDL_keyboard.h"
                     36: #include "SDL_mouse.h"
                     37: #include "SDL_joystick.h"
                     38: #include "SDL_quit.h"
                     39: 
                     40: #include "begin_code.h"
                     41: /* Set up for C function definitions, even when using C++ */
                     42: #ifdef __cplusplus
                     43: extern "C" {
                     44: #endif
                     45: 
                     46: /* Event enumerations */
                     47: enum { SDL_NOEVENT = 0,                        /* Unused (do not remove) */
                     48:        SDL_ACTIVEEVENT,                        /* Application loses/gains visibility */
                     49:        SDL_KEYDOWN,                    /* Keys pressed */
                     50:        SDL_KEYUP,                      /* Keys released */
                     51:        SDL_MOUSEMOTION,                        /* Mouse moved */
                     52:        SDL_MOUSEBUTTONDOWN,            /* Mouse button pressed */
                     53:        SDL_MOUSEBUTTONUP,              /* Mouse button released */
                     54:        SDL_JOYAXISMOTION,              /* Joystick axis motion */
                     55:        SDL_JOYBALLMOTION,              /* Joystick trackball motion */
                     56:        SDL_JOYHATMOTION,               /* Joystick hat position change */
                     57:        SDL_JOYBUTTONDOWN,              /* Joystick button pressed */
                     58:        SDL_JOYBUTTONUP,                        /* Joystick button released */
                     59:        SDL_QUIT,                       /* User-requested quit */
                     60:        SDL_SYSWMEVENT,                 /* System specific event */
                     61:        SDL_EVENT_RESERVEDA,            /* Reserved for future use.. */
                     62:        SDL_EVENT_RESERVEDB,            /* Reserved for future use.. */
                     63:        SDL_VIDEORESIZE,                        /* User resized video mode */
                     64:        SDL_VIDEOEXPOSE,                        /* Screen needs to be redrawn */
                     65:        SDL_EVENT_RESERVED2,            /* Reserved for future use.. */
                     66:        SDL_EVENT_RESERVED3,            /* Reserved for future use.. */
                     67:        SDL_EVENT_RESERVED4,            /* Reserved for future use.. */
                     68:        SDL_EVENT_RESERVED5,            /* Reserved for future use.. */
                     69:        SDL_EVENT_RESERVED6,            /* Reserved for future use.. */
                     70:        SDL_EVENT_RESERVED7,            /* Reserved for future use.. */
                     71:        /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
                     72:        SDL_USEREVENT = 24,
                     73:        /* This last event is only for bounding internal arrays
                     74:          It is the number of bits in the event mask datatype -- Uint32
                     75:         */
                     76:        SDL_NUMEVENTS = 32
                     77: };
                     78: 
                     79: /* Predefined event masks */
                     80: #define SDL_EVENTMASK(X)       (1<<(X))
                     81: enum {
                     82:        SDL_ACTIVEEVENTMASK     = SDL_EVENTMASK(SDL_ACTIVEEVENT),
                     83:        SDL_KEYDOWNMASK         = SDL_EVENTMASK(SDL_KEYDOWN),
                     84:        SDL_KEYUPMASK           = SDL_EVENTMASK(SDL_KEYUP),
                     85:        SDL_MOUSEMOTIONMASK     = SDL_EVENTMASK(SDL_MOUSEMOTION),
                     86:        SDL_MOUSEBUTTONDOWNMASK = SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN),
                     87:        SDL_MOUSEBUTTONUPMASK   = SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
                     88:        SDL_MOUSEEVENTMASK      = SDL_EVENTMASK(SDL_MOUSEMOTION)|
                     89:                                  SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN)|
                     90:                                  SDL_EVENTMASK(SDL_MOUSEBUTTONUP),
                     91:        SDL_JOYAXISMOTIONMASK   = SDL_EVENTMASK(SDL_JOYAXISMOTION),
                     92:        SDL_JOYBALLMOTIONMASK   = SDL_EVENTMASK(SDL_JOYBALLMOTION),
                     93:        SDL_JOYHATMOTIONMASK    = SDL_EVENTMASK(SDL_JOYHATMOTION),
                     94:        SDL_JOYBUTTONDOWNMASK   = SDL_EVENTMASK(SDL_JOYBUTTONDOWN),
                     95:        SDL_JOYBUTTONUPMASK     = SDL_EVENTMASK(SDL_JOYBUTTONUP),
                     96:        SDL_JOYEVENTMASK        = SDL_EVENTMASK(SDL_JOYAXISMOTION)|
                     97:                                  SDL_EVENTMASK(SDL_JOYBALLMOTION)|
                     98:                                  SDL_EVENTMASK(SDL_JOYHATMOTION)|
                     99:                                  SDL_EVENTMASK(SDL_JOYBUTTONDOWN)|
                    100:                                  SDL_EVENTMASK(SDL_JOYBUTTONUP),
                    101:        SDL_VIDEORESIZEMASK     = SDL_EVENTMASK(SDL_VIDEORESIZE),
                    102:        SDL_VIDEOEXPOSEMASK     = SDL_EVENTMASK(SDL_VIDEOEXPOSE),
                    103:        SDL_QUITMASK            = SDL_EVENTMASK(SDL_QUIT),
                    104:        SDL_SYSWMEVENTMASK      = SDL_EVENTMASK(SDL_SYSWMEVENT)
                    105: };
                    106: #define SDL_ALLEVENTS          0xFFFFFFFF
                    107: 
                    108: /* Application visibility event structure */
                    109: typedef struct SDL_ActiveEvent {
                    110:        Uint8 type;     /* SDL_ACTIVEEVENT */
                    111:        Uint8 gain;     /* Whether given states were gained or lost (1/0) */
                    112:        Uint8 state;    /* A mask of the focus states */
                    113: } SDL_ActiveEvent;
                    114: 
                    115: /* Keyboard event structure */
                    116: typedef struct SDL_KeyboardEvent {
                    117:        Uint8 type;     /* SDL_KEYDOWN or SDL_KEYUP */
                    118:        Uint8 which;    /* The keyboard device index */
                    119:        Uint8 state;    /* SDL_PRESSED or SDL_RELEASED */
                    120:        SDL_keysym keysym;
                    121: } SDL_KeyboardEvent;
                    122: 
                    123: /* Mouse motion event structure */
                    124: typedef struct SDL_MouseMotionEvent {
                    125:        Uint8 type;     /* SDL_MOUSEMOTION */
                    126:        Uint8 which;    /* The mouse device index */
                    127:        Uint8 state;    /* The current button state */
                    128:        Uint16 x, y;    /* The X/Y coordinates of the mouse */
                    129:        Sint16 xrel;    /* The relative motion in the X direction */
                    130:        Sint16 yrel;    /* The relative motion in the Y direction */
                    131: } SDL_MouseMotionEvent;
                    132: 
                    133: /* Mouse button event structure */
                    134: typedef struct SDL_MouseButtonEvent {
                    135:        Uint8 type;     /* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
                    136:        Uint8 which;    /* The mouse device index */
                    137:        Uint8 button;   /* The mouse button index */
                    138:        Uint8 state;    /* SDL_PRESSED or SDL_RELEASED */
                    139:        Uint16 x, y;    /* The X/Y coordinates of the mouse at press time */
                    140: } SDL_MouseButtonEvent;
                    141: 
                    142: /* Joystick axis motion event structure */
                    143: typedef struct SDL_JoyAxisEvent {
                    144:        Uint8 type;     /* SDL_JOYAXISMOTION */
                    145:        Uint8 which;    /* The joystick device index */
                    146:        Uint8 axis;     /* The joystick axis index */
                    147:        Sint16 value;   /* The axis value (range: -32768 to 32767) */
                    148: } SDL_JoyAxisEvent;
                    149: 
                    150: /* Joystick trackball motion event structure */
                    151: typedef struct SDL_JoyBallEvent {
                    152:        Uint8 type;     /* SDL_JOYBALLMOTION */
                    153:        Uint8 which;    /* The joystick device index */
                    154:        Uint8 ball;     /* The joystick trackball index */
                    155:        Sint16 xrel;    /* The relative motion in the X direction */
                    156:        Sint16 yrel;    /* The relative motion in the Y direction */
                    157: } SDL_JoyBallEvent;
                    158: 
                    159: /* Joystick hat position change event structure */
                    160: typedef struct SDL_JoyHatEvent {
                    161:        Uint8 type;     /* SDL_JOYHATMOTION */
                    162:        Uint8 which;    /* The joystick device index */
                    163:        Uint8 hat;      /* The joystick hat index */
                    164:        Uint8 value;    /* The hat position value:
                    165:                            SDL_HAT_LEFTUP   SDL_HAT_UP       SDL_HAT_RIGHTUP
                    166:                            SDL_HAT_LEFT     SDL_HAT_CENTERED SDL_HAT_RIGHT
                    167:                            SDL_HAT_LEFTDOWN SDL_HAT_DOWN     SDL_HAT_RIGHTDOWN
                    168:                           Note that zero means the POV is centered.
                    169:                        */
                    170: } SDL_JoyHatEvent;
                    171: 
                    172: /* Joystick button event structure */
                    173: typedef struct SDL_JoyButtonEvent {
                    174:        Uint8 type;     /* SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */
                    175:        Uint8 which;    /* The joystick device index */
                    176:        Uint8 button;   /* The joystick button index */
                    177:        Uint8 state;    /* SDL_PRESSED or SDL_RELEASED */
                    178: } SDL_JoyButtonEvent;
                    179: 
                    180: /* The "window resized" event
                    181:    When you get this event, you are responsible for setting a new video
                    182:    mode with the new width and height.
                    183:  */
                    184: typedef struct SDL_ResizeEvent {
                    185:        Uint8 type;     /* SDL_VIDEORESIZE */
                    186:        int w;          /* New width */
                    187:        int h;          /* New height */
                    188: } SDL_ResizeEvent;
                    189: 
                    190: /* The "screen redraw" event */
                    191: typedef struct SDL_ExposeEvent {
                    192:        Uint8 type;     /* SDL_VIDEOEXPOSE */
                    193: } SDL_ExposeEvent;
                    194: 
                    195: /* The "quit requested" event */
                    196: typedef struct SDL_QuitEvent {
                    197:        Uint8 type;     /* SDL_QUIT */
                    198: } SDL_QuitEvent;
                    199: 
                    200: /* A user-defined event type */
                    201: typedef struct SDL_UserEvent {
                    202:        Uint8 type;     /* SDL_USEREVENT through SDL_NUMEVENTS-1 */
                    203:        int code;       /* User defined event code */
                    204:        void *data1;    /* User defined data pointer */
                    205:        void *data2;    /* User defined data pointer */
                    206: } SDL_UserEvent;
                    207: 
                    208: /* If you want to use this event, you should include SDL_syswm.h */
                    209: struct SDL_SysWMmsg;
                    210: typedef struct SDL_SysWMmsg SDL_SysWMmsg;
                    211: typedef struct SDL_SysWMEvent {
                    212:        Uint8 type;
                    213:        SDL_SysWMmsg *msg;
                    214: } SDL_SysWMEvent;
                    215: 
                    216: /* General event structure */
                    217: typedef union {
                    218:        Uint8 type;
                    219:        SDL_ActiveEvent active;
                    220:        SDL_KeyboardEvent key;
                    221:        SDL_MouseMotionEvent motion;
                    222:        SDL_MouseButtonEvent button;
                    223:        SDL_JoyAxisEvent jaxis;
                    224:        SDL_JoyBallEvent jball;
                    225:        SDL_JoyHatEvent jhat;
                    226:        SDL_JoyButtonEvent jbutton;
                    227:        SDL_ResizeEvent resize;
                    228:        SDL_ExposeEvent expose;
                    229:        SDL_QuitEvent quit;
                    230:        SDL_UserEvent user;
                    231:        SDL_SysWMEvent syswm;
                    232: } SDL_Event;
                    233: 
                    234: 
                    235: /* Function prototypes */
                    236: 
                    237: /* Pumps the event loop, gathering events from the input devices.
                    238:    This function updates the event queue and internal input device state.
                    239:    This should only be run in the thread that sets the video mode.
                    240: */
                    241: extern DECLSPEC void SDLCALL SDL_PumpEvents(void);
                    242: 
                    243: /* Checks the event queue for messages and optionally returns them.
                    244:    If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to
                    245:    the back of the event queue.
                    246:    If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front
                    247:    of the event queue, matching 'mask', will be returned and will not
                    248:    be removed from the queue.
                    249:    If 'action' is SDL_GETEVENT, up to 'numevents' events at the front 
                    250:    of the event queue, matching 'mask', will be returned and will be
                    251:    removed from the queue.
                    252:    This function returns the number of events actually stored, or -1
                    253:    if there was an error.  This function is thread-safe.
                    254: */
                    255: typedef enum {
                    256:        SDL_ADDEVENT,
                    257:        SDL_PEEKEVENT,
                    258:        SDL_GETEVENT
                    259: } SDL_eventaction;
                    260: /* */
                    261: extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents,
                    262:                                SDL_eventaction action, Uint32 mask);
                    263: 
                    264: /* Polls for currently pending events, and returns 1 if there are any pending
                    265:    events, or 0 if there are none available.  If 'event' is not NULL, the next
                    266:    event is removed from the queue and stored in that area.
                    267:  */
                    268: extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event);
                    269: 
                    270: /* Waits indefinitely for the next available event, returning 1, or 0 if there
                    271:    was an error while waiting for events.  If 'event' is not NULL, the next
                    272:    event is removed from the queue and stored in that area.
                    273:  */
                    274: extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event);
                    275: 
                    276: /* Add an event to the event queue.
                    277:    This function returns 0 on success, or -1 if the event queue was full
                    278:    or there was some other error.
                    279:  */
                    280: extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event);
                    281: 
                    282: /*
                    283:   This function sets up a filter to process all events before they
                    284:   change internal state and are posted to the internal event queue.
                    285: 
                    286:   The filter is protypted as:
                    287: */
                    288: typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event);
                    289: /*
                    290:   If the filter returns 1, then the event will be added to the internal queue.
                    291:   If it returns 0, then the event will be dropped from the queue, but the 
                    292:   internal state will still be updated.  This allows selective filtering of
                    293:   dynamically arriving events.
                    294: 
                    295:   WARNING:  Be very careful of what you do in the event filter function, as 
                    296:             it may run in a different thread!
                    297: 
                    298:   There is one caveat when dealing with the SDL_QUITEVENT event type.  The
                    299:   event filter is only called when the window manager desires to close the
                    300:   application window.  If the event filter returns 1, then the window will
                    301:   be closed, otherwise the window will remain open if possible.
                    302:   If the quit event is generated by an interrupt signal, it will bypass the
                    303:   internal queue and be delivered to the application at the next event poll.
                    304: */
                    305: extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter);
                    306: 
                    307: /*
                    308:   Return the current event filter - can be used to "chain" filters.
                    309:   If there is no event filter set, this function returns NULL.
                    310: */
                    311: extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void);
                    312: 
                    313: /*
                    314:   This function allows you to set the state of processing certain events.
                    315:   If 'state' is set to SDL_IGNORE, that event will be automatically dropped
                    316:   from the event queue and will not event be filtered.
                    317:   If 'state' is set to SDL_ENABLE, that event will be processed normally.
                    318:   If 'state' is set to SDL_QUERY, SDL_EventState() will return the 
                    319:   current processing state of the specified event.
                    320: */
                    321: #define SDL_QUERY      -1
                    322: #define SDL_IGNORE      0
                    323: #define SDL_DISABLE     0
                    324: #define SDL_ENABLE      1
                    325: extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state);
                    326: 
                    327: 
                    328: /* Ends C function definitions when using C++ */
                    329: #ifdef __cplusplus
                    330: }
                    331: #endif
                    332: #include "close_code.h"
                    333: 
                    334: #endif /* _SDL_events_h */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.