summaryrefslogtreecommitdiff
path: root/src/platforms
diff options
context:
space:
mode:
authorjussi2023-11-24 20:09:34 +0200
committerjussi2023-11-24 20:09:34 +0200
commita1887aa86694208549bee0ef46758d602ba79696 (patch)
treede8b310c3f9bfce849a1e7aa9a8188f8597c1c9b /src/platforms
parent925afdf101d6993e35d6c32c52766c7c3f89ae5e (diff)
downloadreilua-enhanced-a1887aa86694208549bee0ef46758d602ba79696.tar.gz
reilua-enhanced-a1887aa86694208549bee0ef46758d602ba79696.tar.bz2
reilua-enhanced-a1887aa86694208549bee0ef46758d602ba79696.zip
SDL Events.
Diffstat (limited to 'src/platforms')
-rw-r--r--src/platforms/core_desktop.c4
-rw-r--r--src/platforms/core_desktop_sdl.c434
2 files changed, 392 insertions, 46 deletions
diff --git a/src/platforms/core_desktop.c b/src/platforms/core_desktop.c
index ca6b168..1f22f32 100644
--- a/src/platforms/core_desktop.c
+++ b/src/platforms/core_desktop.c
@@ -3,7 +3,7 @@
#include "core.h"
#include "platforms/core_desktop.h"
-static void definePlatformGlobals() {
+static void platformDefineGlobals() {
lua_State *L = state->luaState;
lua_getglobal( L, "RL" );
@@ -463,7 +463,7 @@ static void joystickInputEvent( int jid, int event ) {
lua_pop( L, -1 );
}
-void platformRegisterEvents() {
+static void platformRegisterEvents() {
/* Window events. */
state->raylibWindowSizeCallback = glfwSetWindowSizeCallback( GetWindowHandle(), windowSizeEvent );
#if !defined( PLATFORM_WEB )
diff --git a/src/platforms/core_desktop_sdl.c b/src/platforms/core_desktop_sdl.c
index 2649eac..aacccf5 100644
--- a/src/platforms/core_desktop_sdl.c
+++ b/src/platforms/core_desktop_sdl.c
@@ -3,19 +3,74 @@
#include "core.h"
#include "platforms/core_desktop_sdl.h"
-static void definePlatformGlobals() {
+static void platformDefineGlobals() {
lua_State *L = state->luaState;
lua_getglobal( L, "RL" );
- /* KeyboardKey */
- assignGlobalInt( SDL_KEYDOWN, "SDL_KEYDOWN" ); // key pressed
- assignGlobalInt( SDL_KEYUP, "SDL_KEYUP" ); // key released
- assignGlobalInt( SDL_PRESSED, "SDL_PRESSED" ); // key pressed
- assignGlobalInt( SDL_RELEASED, "SDL_RELEASED" ); // key released
- /* Keyboard Events. */
- assignGlobalInt( SDL_WINDOW_EVENT, "SDL_WINDOW_EVENT" ); // SDL Window Event
- assignGlobalInt( SDL_KEYBOARD_EVENT, "SDL_KEYBOARD_EVENT" ); // SDL Keyboard Event
+ /* KeyboardEvents */
+ assignGlobalInt( SDL_KEYDOWN, "SDL_KEYDOWN" ); // Key pressed
+ assignGlobalInt( SDL_KEYUP, "SDL_KEYUP" ); // Key released
+ /* WindowEvents */
+ assignGlobalInt( SDL_WINDOWEVENT, "SDL_WINDOWEVENT" ); // Window state change
+ /* MouseEvents */
+ assignGlobalInt( SDL_MOUSEMOTION, "SDL_MOUSEMOTION" ); // Mouse moved
+ assignGlobalInt( SDL_MOUSEBUTTONDOWN, "SDL_MOUSEBUTTONDOWN" ); // Mouse button pressed
+ assignGlobalInt( SDL_MOUSEBUTTONUP, "SDL_MOUSEBUTTONUP" ); // Mouse button released
+ assignGlobalInt( SDL_MOUSEWHEEL, "SDL_MOUSEWHEEL" ); // Mouse wheel motion
+ /* JoystickEvents */
+ assignGlobalInt( SDL_JOYAXISMOTION, "SDL_JOYAXISMOTION" ); // Joystick axis motion
+ assignGlobalInt( SDL_JOYBALLMOTION, "SDL_JOYBALLMOTION" ); // Joystick trackball motion
+ assignGlobalInt( SDL_JOYHATMOTION, "SDL_JOYHATMOTION" );
+ assignGlobalInt( SDL_JOYBUTTONDOWN, "SDL_JOYBUTTONDOWN" ); // Joystick button pressed
+ assignGlobalInt( SDL_JOYBUTTONUP, "SDL_JOYBUTTONUP" ); // Joystick button released
+ assignGlobalInt( SDL_JOYDEVICEADDED, "SDL_JOYDEVICEADDED" ); // Joystick connected
+ assignGlobalInt( SDL_JOYDEVICEREMOVED, "SDL_JOYDEVICEREMOVED" ); // Joystick disconnected
+ /* ControllerEvents */
+ assignGlobalInt( SDL_CONTROLLERAXISMOTION, "SDL_CONTROLLERAXISMOTION" ); // Controller axis motion
+ assignGlobalInt( SDL_CONTROLLERBUTTONDOWN, "SDL_CONTROLLERBUTTONDOWN" ); // Controller button pressed
+ assignGlobalInt( SDL_CONTROLLERBUTTONUP, "SDL_CONTROLLERBUTTONUP" ); // Controller button released
+ assignGlobalInt( SDL_CONTROLLERDEVICEADDED, "SDL_CONTROLLERDEVICEADDED" ); // Controller connected
+ assignGlobalInt( SDL_CONTROLLERDEVICEREMOVED, "SDL_CONTROLLERDEVICEREMOVED" ); // Controller disconnected
+ assignGlobalInt( SDL_CONTROLLERDEVICEREMAPPED, "SDL_CONTROLLERDEVICEREMAPPED" ); // Controller mapping updated
+ /* TouchEvents */
+ assignGlobalInt( SDL_FINGERDOWN, "SDL_FINGERDOWN" ); // User has touched input device
+ assignGlobalInt( SDL_FINGERUP, "SDL_FINGERUP" ); // User stopped touching input device
+ assignGlobalInt( SDL_FINGERMOTION, "SDL_FINGERMOTION" ); // User is dragging finger on input device
+ /* GestureEvents */
+ assignGlobalInt( SDL_DOLLARGESTURE, "SDL_DOLLARGESTURE" );
+ assignGlobalInt( SDL_DOLLARRECORD, "SDL_DOLLARRECORD" );
+ assignGlobalInt( SDL_MULTIGESTURE, "SDL_MULTIGESTURE" );
+ /* WindowEventIDs */
+ assignGlobalInt( SDL_WINDOWEVENT_SHOWN, "SDL_WINDOWEVENT_SHOWN" );
+ assignGlobalInt( SDL_WINDOWEVENT_HIDDEN, "SDL_WINDOWEVENT_HIDDEN" );
+ assignGlobalInt( SDL_WINDOWEVENT_EXPOSED, "SDL_WINDOWEVENT_EXPOSED" );
+ assignGlobalInt( SDL_WINDOWEVENT_MOVED, "SDL_WINDOWEVENT_MOVED" );
+ assignGlobalInt( SDL_WINDOWEVENT_RESIZED, "SDL_WINDOWEVENT_RESIZED" );
+ assignGlobalInt( SDL_WINDOWEVENT_SIZE_CHANGED, "SDL_WINDOWEVENT_SIZE_CHANGED" );
+ assignGlobalInt( SDL_WINDOWEVENT_MINIMIZED, "SDL_WINDOWEVENT_MINIMIZED" );
+ assignGlobalInt( SDL_WINDOWEVENT_MAXIMIZED, "SDL_WINDOWEVENT_MAXIMIZED" );
+ assignGlobalInt( SDL_WINDOWEVENT_RESTORED, "SDL_WINDOWEVENT_RESTORED" );
+ assignGlobalInt( SDL_WINDOWEVENT_ENTER, "SDL_WINDOWEVENT_ENTER" );
+ assignGlobalInt( SDL_WINDOWEVENT_LEAVE, "SDL_WINDOWEVENT_LEAVE" );
+ assignGlobalInt( SDL_WINDOWEVENT_FOCUS_GAINED, "SDL_WINDOWEVENT_FOCUS_GAINED" );
+ assignGlobalInt( SDL_WINDOWEVENT_FOCUS_LOST, "SDL_WINDOWEVENT_FOCUS_LOST" );
+ assignGlobalInt( SDL_WINDOWEVENT_CLOSE, "SDL_WINDOWEVENT_CLOSE" );
+ assignGlobalInt( SDL_WINDOWEVENT_TAKE_FOCUS, "SDL_WINDOWEVENT_TAKE_FOCUS" );
+ assignGlobalInt( SDL_WINDOWEVENT_HIT_TEST, "SDL_WINDOWEVENT_HIT_TEST" );
+ /* KeyboardAndMouseState */
+ assignGlobalInt( SDL_RELEASED, "SDL_RELEASED" );
+ assignGlobalInt( SDL_PRESSED, "SDL_PRESSED" );
+ /* JoystickHatMotion */
+ assignGlobalInt( SDL_HAT_LEFTUP, "SDL_HAT_LEFTUP" );
+ assignGlobalInt( SDL_HAT_UP, "SDL_HAT_UP" );
+ assignGlobalInt( SDL_HAT_RIGHTUP, "SDL_HAT_RIGHTUP" );
+ assignGlobalInt( SDL_HAT_LEFT, "SDL_HAT_LEFT" );
+ assignGlobalInt( SDL_HAT_CENTERED, "SDL_HAT_CENTERED" );
+ assignGlobalInt( SDL_HAT_RIGHT, "SDL_HAT_RIGHT" );
+ assignGlobalInt( SDL_HAT_LEFTDOWN, "SDL_HAT_LEFTDOWN" );
+ assignGlobalInt( SDL_HAT_DOWN, "SDL_HAT_DOWN" );
+ assignGlobalInt( SDL_HAT_RIGHTDOWN, "SDL_HAT_RIGHTDOWN" );
lua_pop( L, -1 );
}
@@ -69,59 +124,350 @@ static void luaPlatformRegister() {
/* Events. */
-//TODO Thinking of different implementation since this could run on different thread than Lua.
+/* This function is not thread safe so we don't use Lua inside it directly. It only adds events to another queue. */
static int SDLEventFilter( void *userdata, SDL_Event *event ) {
- /* Don't handle events if exiting. Prevent segfault. */
- if ( event->type == SDL_QUIT || !state->run ) {
- return 0;
+ /* SDL_EVENT_POLL_SENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */
+ if ( event->type != SDL_QUIT && event->type != 0x7F00 && state->SDL_eventQueueLen < PLATFORM_SDL_EVENT_QUEUE_LEN ) {
+ state->SDL_eventQueue[ state->SDL_eventQueueLen ] = *event;
+ state->SDL_eventQueueLen++;
+
+ // printf( "event %u state->SDL_eventQueueLen %d\n", event->type, state->SDL_eventQueueLen );
}
+}
+
+static void platformRegisterEvents() {
+ /* SDL Warning: Be very careful of what you do in the event filter function, as it may run in a different thread! */
+ SDL_AddEventWatch( SDLEventFilter, NULL );
+}
+
+static void platformSendEvents() {
lua_State *L = state->luaState;
lua_pushcfunction( L, luaTraceback );
int tracebackidx = lua_gettop( L );
+ /* If RL.event is not defined, we don't need to proceed. */
lua_getglobal( L, "RL" );
lua_getfield( L, -1, "event" );
if ( !lua_isfunction( L, -1 ) ) {
- return 0;
+ state->SDL_eventQueueLen = 0;
+ return;
}
- switch ( event->type ) {
- case SDL_KEYDOWN:
- case SDL_KEYUP:
- {
- lua_createtable( L, 7, 0 );
- lua_pushinteger( L, SDL_KEYBOARD_EVENT );
- lua_setfield( L, -2, "type" );
- lua_pushinteger( L, event->key.timestamp );
- lua_setfield( L, -2, "timestamp" );
- lua_pushinteger( L, event->key.state );
- lua_setfield( L, -2, "state" );
- lua_pushinteger( L, event->key.repeat );
- lua_setfield( L, -2, "repeat" );
- lua_pushinteger( L, event->key.keysym.scancode );
- lua_setfield( L, -2, "scancode" );
- lua_pushinteger( L, event->key.keysym.sym );
- lua_setfield( L, -2, "sym" );
- lua_pushinteger( L, event->key.keysym.mod );
- lua_setfield( L, -2, "mod" );
+ for ( int i = 0; i < state->SDL_eventQueueLen; i++ ) {
+ bool call = false;
+ lua_getglobal( L, "RL" );
+ lua_getfield( L, -1, "event" );
+
+ SDL_Event event = state->SDL_eventQueue[i];
+
+ switch ( event.type ) {
+ case SDL_KEYUP:
+ case SDL_KEYDOWN:
+ {
+ lua_createtable( L, 7, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.key.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.key.state );
+ lua_setfield( L, -2, "state" );
+ lua_pushinteger( L, event.key.repeat );
+ lua_setfield( L, -2, "repeating" ); /* repeat is Lua keyword. */
+ lua_pushinteger( L, event.key.keysym.scancode );
+ lua_setfield( L, -2, "scancode" );
+ lua_pushinteger( L, event.key.keysym.sym );
+ lua_setfield( L, -2, "sym" );
+ lua_pushinteger( L, event.key.keysym.mod );
+ lua_setfield( L, -2, "mod" );
+ call = true;
+ }
+ break;
+ case SDL_WINDOWEVENT:
+ {
+ lua_createtable( L, 5, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.window.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.window.event );
+ lua_setfield( L, -2, "event" );
+ lua_pushinteger( L, event.window.data1 );
+ lua_setfield( L, -2, "data1" );
+ lua_pushinteger( L, event.window.data2 );
+ lua_setfield( L, -2, "data2" );
+ call = true;
+ }
+ break;
+ case SDL_MOUSEMOTION:
+ {
+ lua_createtable( L, 8, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.motion.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.motion.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.motion.state );
+ lua_setfield( L, -2, "state" );
+ lua_pushinteger( L, event.motion.x );
+ lua_setfield( L, -2, "x" );
+ lua_pushinteger( L, event.motion.y );
+ lua_setfield( L, -2, "y" );
+ lua_pushinteger( L, event.motion.xrel );
+ lua_setfield( L, -2, "xrel" );
+ lua_pushinteger( L, event.motion.yrel );
+ lua_setfield( L, -2, "yrel" );
+ call = true;
+ }
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ case SDL_MOUSEBUTTONUP:
+ {
+ lua_createtable( L, 7, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.button.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.button.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.button.button );
+ lua_setfield( L, -2, "button" );
+ lua_pushinteger( L, event.button.state );
+ lua_setfield( L, -2, "state" );
+ lua_pushinteger( L, event.button.x );
+ lua_setfield( L, -2, "x" );
+ lua_pushinteger( L, event.button.y );
+ lua_setfield( L, -2, "y" );
+ call = true;
+ }
+ break;
+ case SDL_MOUSEWHEEL:
+ {
+ lua_createtable( L, 5, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.wheel.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.wheel.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.wheel.x );
+ lua_setfield( L, -2, "x" );
+ lua_pushinteger( L, event.wheel.y );
+ lua_setfield( L, -2, "y" );
+ call = true;
+ }
+ break;
+ case SDL_JOYAXISMOTION:
+ {
+ lua_createtable( L, 5, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.jaxis.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.jaxis.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.jaxis.axis );
+ lua_setfield( L, -2, "axis" );
+ lua_pushinteger( L, event.jaxis.value );
+ lua_setfield( L, -2, "value" );
+ call = true;
+ }
+ break;
+ case SDL_JOYBALLMOTION:
+ {
+ lua_createtable( L, 6, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.jball.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.jball.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.jball.ball );
+ lua_setfield( L, -2, "ball" );
+ lua_pushinteger( L, event.jball.xrel );
+ lua_setfield( L, -2, "xrel" );
+ lua_pushinteger( L, event.jball.yrel );
+ lua_setfield( L, -2, "yrel" );
+ call = true;
+ }
+ break;
+ case SDL_JOYHATMOTION:
+ {
+ lua_createtable( L, 5, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.jhat.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.jhat.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.jhat.hat );
+ lua_setfield( L, -2, "hat" );
+ lua_pushinteger( L, event.jhat.value );
+ lua_setfield( L, -2, "value" );
+ call = true;
+ }
+ break;
+ case SDL_JOYBUTTONDOWN:
+ case SDL_JOYBUTTONUP:
+ {
+ lua_createtable( L, 5, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.jbutton.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.jbutton.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.jbutton.button );
+ lua_setfield( L, -2, "button" );
+ lua_pushinteger( L, event.jbutton.state );
+ lua_setfield( L, -2, "state" );
+ call = true;
+ }
+ break;
+ case SDL_JOYDEVICEADDED:
+ case SDL_JOYDEVICEREMOVED:
+ {
+ lua_createtable( L, 3, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.jdevice.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.jdevice.which );
+ lua_setfield( L, -2, "which" );
+ call = true;
+ }
+ break;
+ case SDL_CONTROLLERAXISMOTION:
+ {
+ lua_createtable( L, 5, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.caxis.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.caxis.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.caxis.axis );
+ lua_setfield( L, -2, "axis" );
+ lua_pushinteger( L, event.caxis.value );
+ lua_setfield( L, -2, "value" );
+ call = true;
+ }
+ break;
+ case SDL_CONTROLLERBUTTONDOWN:
+ case SDL_CONTROLLERBUTTONUP:
+ {
+ lua_createtable( L, 5, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.cbutton.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.cbutton.which );
+ lua_setfield( L, -2, "which" );
+ lua_pushinteger( L, event.cbutton.button );
+ lua_setfield( L, -2, "button" );
+ lua_pushinteger( L, event.cbutton.state );
+ lua_setfield( L, -2, "state" );
+ call = true;
+ }
+ break;
+ case SDL_CONTROLLERDEVICEADDED:
+ case SDL_CONTROLLERDEVICEREMOVED:
+ case SDL_CONTROLLERDEVICEREMAPPED:
+ {
+ lua_createtable( L, 3, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.cdevice.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.cdevice.which );
+ lua_setfield( L, -2, "which" );
+ call = true;
+ }
+ break;
+ case SDL_FINGERMOTION:
+ case SDL_FINGERDOWN:
+ case SDL_FINGERUP:
+ {
+ lua_createtable( L, 9, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.tfinger.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.tfinger.touchId );
+ lua_setfield( L, -2, "touchId" );
+ lua_pushinteger( L, event.tfinger.fingerId );
+ lua_setfield( L, -2, "fingerId" );
+ lua_pushnumber( L, event.tfinger.x );
+ lua_setfield( L, -2, "x" );
+ lua_pushnumber( L, event.tfinger.y );
+ lua_setfield( L, -2, "y" );
+ lua_pushnumber( L, event.tfinger.dx );
+ lua_setfield( L, -2, "dx" );
+ lua_pushnumber( L, event.tfinger.dy );
+ lua_setfield( L, -2, "dy" );
+ lua_pushnumber( L, event.tfinger.pressure );
+ lua_setfield( L, -2, "pressure" );
+ call = true;
+ }
+ break;
+ case SDL_MULTIGESTURE:
+ {
+ lua_createtable( L, 8, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.mgesture.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.mgesture.touchId );
+ lua_setfield( L, -2, "touchId" );
+ lua_pushnumber( L, event.mgesture.dTheta );
+ lua_setfield( L, -2, "dTheta" );
+ lua_pushnumber( L, event.mgesture.dDist );
+ lua_setfield( L, -2, "dDist" );
+ lua_pushnumber( L, event.mgesture.x );
+ lua_setfield( L, -2, "x" );
+ lua_pushnumber( L, event.mgesture.y );
+ lua_setfield( L, -2, "y" );
+ lua_pushinteger( L, event.mgesture.numFingers );
+ lua_setfield( L, -2, "numFingers" );
+ call = true;
+ }
+ break;
+ case SDL_DOLLARGESTURE:
+ case SDL_DOLLARRECORD:
+ {
+ lua_createtable( L, 8, 0 );
+ lua_pushinteger( L, event.type );
+ lua_setfield( L, -2, "type" );
+ lua_pushinteger( L, event.dgesture.timestamp );
+ lua_setfield( L, -2, "timestamp" );
+ lua_pushinteger( L, event.dgesture.touchId );
+ lua_setfield( L, -2, "touchId" );
+ lua_pushinteger( L, event.dgesture.gestureId );
+ lua_setfield( L, -2, "gestureId" );
+ lua_pushinteger( L, event.dgesture.numFingers );
+ lua_setfield( L, -2, "numFingers" );
+ lua_pushnumber( L, event.dgesture.error );
+ lua_setfield( L, -2, "error" );
+ lua_pushnumber( L, event.dgesture.x );
+ lua_setfield( L, -2, "x" );
+ lua_pushnumber( L, event.dgesture.y );
+ lua_setfield( L, -2, "y" );
+ call = true;
+ }
+ break;
+ default:
+ break;
+ }
+ if ( call ) {
if ( lua_pcall( L, 1, 0, tracebackidx ) != 0 ) {
TraceLog( LOG_ERROR, "Lua error: %s", lua_tostring( L, -1 ) );
state->run = false;
}
- lua_pop( L, -1 );
}
- break;
- default:
- break;
+ lua_pop( L, -1 );
}
-}
-
-static void platformRegisterEvents() {
- /* Probably sould not use this since. SDL Warning:
- Be very careful of what you do in the event filter function, as it may run in a different thread!
- There has already being some undefined behavior with Lua! :o */
- // SDL_AddEventWatch( SDLEventFilter, NULL );
+ state->SDL_eventQueueLen = 0;
}