#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
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;
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:
=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