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

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