#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include "helper.h" #ifndef aTHX_ #define aTHX_ #endif #include <SDL.h> #include <SDL_events.h> /* Static Memory for event filter call back */ static SV * eventfiltersv; int eventfilter_cb( const void * event) { dSP; int count; int filter_signal; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs( cpy2bag( (void *)event, sizeof(SDL_Event *), sizeof(SDL_Event), "SDL::Event" ) ); PUTBACK; /* printf ( "Eventref is %p. Event is %p. CopyEvent is %p \n", eventref, event, copyEvent); */ count = call_sv(eventfiltersv, G_SCALAR); SPAGAIN; if (count != 1 ) croak("callback returned more than 1 value\n"); filter_signal = POPi; FREETMPS; LEAVE; return filter_signal; } MODULE = SDL::Events PACKAGE = SDL::Events PREFIX = events_ =for documentation The Following are XS bindings to the Event category in the SDL API v2.1.13 Describe on the SDL API site. See: L<http:/*www.libsdl.org/cgi/docwiki.cgi/SDL_API#head-29746762ba51fc3fe8b888f8d314b13de27610e9> */ =cut void events_pump_events() CODE: SDL_PumpEvents(); int events_peep_events( events, numevents, action, mask ) SDL_Event *events int numevents int action Uint32 mask CODE: if(action != (action & (SDL_ADDEVENT | SDL_PEEKEVENT | SDL_GETEVENT))) { croak("Value of 'action' should be SDL_ADDEVENT, SDL_PEEKEVENT or SDL_GETEVENT."); } RETVAL = SDL_PeepEvents(events,numevents,action,mask); OUTPUT: RETVAL int events_poll_event( event ) SDL_Event *event CODE: RETVAL = SDL_PollEvent(event); OUTPUT: RETVAL int events_push_event(event) SDL_Event *event CODE: RETVAL = SDL_PushEvent(event); OUTPUT: RETVAL int events_wait_event(event = NULL) SDL_Event *event CODE: RETVAL = SDL_WaitEvent(event); OUTPUT: RETVAL void events_set_event_filter(callback) SV* callback CODE: eventfiltersv = callback; SDL_SetEventFilter((SDL_EventFilter) eventfilter_cb); AV * events_get_key_state() PREINIT: int value; CODE: Uint8* KeyArray = SDL_GetKeyState(&value); RETVAL = (AV*)sv_2mortal((SV*)newAV()); int i; for( i = 0; i <value; i++) { SV* scalar = newSViv( KeyArray[i] ); av_push( RETVAL, scalar); } OUTPUT: RETVAL SDLMod events_get_mod_state() CODE: RETVAL = SDL_GetModState(); OUTPUT: RETVAL void events_set_mod_state(mod) SDLMod mod CODE: SDL_SetModState(mod); Uint8 events_event_state(type, state) Uint8 type int state CODE: RETVAL=SDL_EventState(type, state); OUTPUT: RETVAL char * events_get_key_name(key) SDLKey key CODE: RETVAL = SDL_GetKeyName(key); OUTPUT: RETVAL int events_enable_unicode ( enable ) int enable CODE: RETVAL = SDL_EnableUNICODE(enable); OUTPUT: RETVAL int events_enable_key_repeat ( delay, interval ) int delay int interval CODE: RETVAL = SDL_EnableKeyRepeat(delay,interval); OUTPUT: RETVAL AV* events_get_mouse_state () CODE: Uint8 mask; int x; int y; mask = SDL_GetMouseState(&x,&y); RETVAL = (AV*)sv_2mortal((SV*)newAV()); av_push(RETVAL,newSViv(mask)); av_push(RETVAL,newSViv(x)); av_push(RETVAL,newSViv(y)); OUTPUT: RETVAL AV* events_get_relative_mouse_state () CODE: Uint8 mask; int x; int y; mask = SDL_GetRelativeMouseState(&x,&y); RETVAL = (AV*)sv_2mortal((SV*)newAV()); av_push(RETVAL,newSViv(mask)); av_push(RETVAL,newSViv(x)); av_push(RETVAL,newSViv(y)); OUTPUT: RETVAL Uint8 events_get_app_state () CODE: RETVAL = SDL_GetAppState(); OUTPUT: RETVAL int events_joystick_event_state (state) int state; CODE: RETVAL = SDL_JoystickEventState(state); OUTPUT: RETVAL