SDL3 Events.

This commit is contained in:
jussi
2025-03-14 22:06:34 +02:00
parent 63f3c1781c
commit 7d59796907
8 changed files with 1435 additions and 344 deletions

View File

@@ -4,6 +4,7 @@ Release: ReiLua version 0.9.0 Using raylib 5.5 and Forked Raygui 4.0
KEY CHANGES: KEY CHANGES:
- CHANGE: Switch to raylib 5.5. - CHANGE: Switch to raylib 5.5.
- CHANGE: InitWindow is not called anymore before main.lua is called, but still is before RL.init. - CHANGE: InitWindow is not called anymore before main.lua is called, but still is before RL.init.
- ADDED: SDL3 Support.
DETAILED CHANGES: DETAILED CHANGES:
- CHANGE: Is*Ready to Is*Valid functions. - CHANGE: Is*Ready to Is*Valid functions.
@@ -41,6 +42,7 @@ DETAILED CHANGES:
- FIXED: uluaPushTransform translation field name fix. - FIXED: uluaPushTransform translation field name fix.
- FIXED: Added rlDisableShader for SetShaderValue* functions to prevent bugs. - FIXED: Added rlDisableShader for SetShaderValue* functions to prevent bugs.
Should be removed if added back in raylib. Should be removed if added back in raylib.
- ADDED: SDL3 Events.
------------------------------------------------------------------------ ------------------------------------------------------------------------
Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0 Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0

View File

@@ -10,7 +10,6 @@ Backlog {
* Platform desktop SDL * Platform desktop SDL
* Text input not working on gui. Could this be Raylib issue? * Text input not working on gui. Could this be Raylib issue?
* Haptic functions. * Haptic functions.
* SDL3 Pen.
* SDL3 GPU? * SDL3 GPU?
* Audio * Audio
* AudioStream. * AudioStream.

View File

@@ -8,6 +8,9 @@ function RL.init()
RL.SetWindowState( RL.FLAG_VSYNC_HINT ) RL.SetWindowState( RL.FLAG_VSYNC_HINT )
RL.SetTextLineSpacing( 24 ) RL.SetTextLineSpacing( 24 )
-- RL.EnableEventWaiting()
-- RL.DisableEventWaiting()
end end
local function getEventType( event ) local function getEventType( event )
@@ -67,46 +70,54 @@ end
local mousePos = { 0, 0 } local mousePos = { 0, 0 }
local cursorMode = 1 local cursorMode = 1
function RL.event( event ) local pen = {
text = "Event: "..getEventType( event ).."\n" state = RL.SDL_EVENT_PEN_UP,
pos = { 0, 0 },
pressure = 0,
down = false,
eraser = false,
}
if event.type == RL.GLFW_WINDOW_SIZE_EVENT then function RL.event( event )
text = text.."width: "..event.width.." height: "..event.height -- text = "Event: "..getEventType( event ).."\n"
elseif event.type == RL.GLFW_WINDOW_MAXIMIZE_EVENT then
text = text.."maximized: "..event.maximized -- if event.type == RL.GLFW_WINDOW_SIZE_EVENT then
elseif event.type == RL.GLFW_WINDOW_ICONYFY_EVENT then -- text = text.."width: "..event.width.." height: "..event.height
text = text.."iconified: "..event.iconified -- elseif event.type == RL.GLFW_WINDOW_MAXIMIZE_EVENT then
elseif event.type == RL.GLFW_WINDOW_FOCUS_EVENT then -- text = text.."maximized: "..event.maximized
text = text.."focused: "..event.focused -- elseif event.type == RL.GLFW_WINDOW_ICONYFY_EVENT then
elseif event.type == RL.GLFW_WINDOW_DROP_EVENT then -- text = text.."iconified: "..event.iconified
text = text.."count: "..event.count.."\n" -- elseif event.type == RL.GLFW_WINDOW_FOCUS_EVENT then
for _, path in ipairs( event.paths ) do -- text = text.."focused: "..event.focused
text = text..path.."\n" -- elseif event.type == RL.GLFW_WINDOW_DROP_EVENT then
end -- text = text.."count: "..event.count.."\n"
elseif event.type == RL.GLFW_KEY_EVENT then -- for _, path in ipairs( event.paths ) do
text = text.."key: "..event.key.." scancode: "..event.scancode.." action: "..getAction( event.action ).." mods: "..event.mods -- text = text..path.."\n"
text = text .."\nkeyName: "..keyName( event.key ) -- end
elseif event.type == RL.GLFW_CHAR_EVENT then -- elseif event.type == RL.GLFW_KEY_EVENT then
text = text.."key: "..event.key -- text = text.."key: "..event.key.." scancode: "..event.scancode.." action: "..getAction( event.action ).." mods: "..event.mods
-- text = text .."\nchar: "..string.char( event.key ) -- text = text .."\nkeyName: "..keyName( event.key )
text = text .."\nchar: "..utf8.char( event.key ) -- elseif event.type == RL.GLFW_CHAR_EVENT then
elseif event.type == RL.GLFW_MOUSE_BUTTON_EVENT then -- text = text.."key: "..event.key
text = text.."button: "..event.button.." action: "..getAction( event.action ).." mods: "..event.mods -- -- text = text .."\nchar: "..string.char( event.key )
elseif event.type == RL.GLFW_MOUSE_CURSOR_POS_EVENT then -- text = text .."\nchar: "..utf8.char( event.key )
text = text.."x: "..event.x.." y: "..event.y -- elseif event.type == RL.GLFW_MOUSE_BUTTON_EVENT then
elseif event.type == RL.GLFW_MOUSE_SCROLL_EVENT then -- text = text.."button: "..event.button.." action: "..getAction( event.action ).." mods: "..event.mods
text = text.."xoffset: "..event.xoffset.." yoffset: "..event.yoffset -- elseif event.type == RL.GLFW_MOUSE_CURSOR_POS_EVENT then
elseif event.type == RL.GLFW_CURSOR_ENTER_EVENT then -- text = text.."x: "..event.x.." y: "..event.y
text = text.."enter: "..event.enter -- elseif event.type == RL.GLFW_MOUSE_SCROLL_EVENT then
cursorIn = event.enter -- text = text.."xoffset: "..event.xoffset.." yoffset: "..event.yoffset
elseif event.type == RL.EVENT_JOYSTICK then -- elseif event.type == RL.GLFW_CURSOR_ENTER_EVENT then
text = text.."jid: "..event.jid.." event: "..event.event -- text = text.."enter: "..event.enter
if event.event == RL.GLFW_CONNECTED then -- cursorIn = event.enter
text = text.."\nConnected" -- elseif event.type == RL.EVENT_JOYSTICK then
elseif event.event == RL.GLFW_DISCONNECTED then -- text = text.."jid: "..event.jid.." event: "..event.event
text = text.."\nDisconnected" -- if event.event == RL.GLFW_CONNECTED then
end -- text = text.."\nConnected"
end -- elseif event.event == RL.GLFW_DISCONNECTED then
-- text = text.."\nDisconnected"
-- end
-- end
-- Some SDL events. -- Some SDL events.
@@ -148,6 +159,45 @@ function RL.event( event )
-- elseif event.type == RL.GLFW_PEN_TABLET_PROXIMITY_EVENT then -- elseif event.type == RL.GLFW_PEN_TABLET_PROXIMITY_EVENT then
-- print( event.state ) -- print( event.state )
-- end -- end
-- Some SDL3 events.
text = event.type.."\n\n"
if event.type == RL.SDL_EVENT_KEY_DOWN or event.type == RL.SDL_EVENT_KEY_UP then
text = text.."key: "..event.key.." repeat: "..tostring( event.repeating )
elseif event.type == RL.SDL_EVENT_PEN_AXIS then
text = text.."pen_state: "..event.pen_state.." axis: "..event.axis.." value: "..event.value
pen.pressure = event.value
pen.state = event.pen_state
pen.pos[1] = event.x
pen.pos[2] = event.y
elseif event.type == RL.SDL_EVENT_PEN_MOTION then
text = text.."pen_state: "..event.pen_state.." pos: "..event.x..", "..event.y
pen.pos[1] = event.x
pen.pos[2] = event.y
elseif event.type == RL.SDL_EVENT_PEN_DOWN or event.type == RL.SDL_EVENT_PEN_UP then
pen.down = event.down
pen.eraser = event.eraser
elseif event.type == RL.SDL_EVENT_CLIPBOARD_UPDATE then
print( "SDL_EVENT_CLIPBOARD_UPDATE:" )
for i, t in ipairs( event.mime_types ) do
print( i, t )
end
elseif event.type == RL.SDL_EVENT_GAMEPAD_AXIS_MOTION then
text = text.."axis: "..event.axis.."value: "..event.value
print( "axis: "..event.axis.." value: "..event.value )
elseif event.type == RL.SDL_EVENT_GAMEPAD_ADDED then
print( "SDL_EVENT_GAMEPAD_ADDED" )
end
end
local function drawSDL3PenCircle()
RL.DrawCircleLines( pen.pos, 32, RL.GREEN )
if pen.down then
RL.DrawCircle( pen.pos, pen.pressure * 32, pen.eraser and RL.YELLOW or RL.BLUE )
end
end end
function RL.draw() function RL.draw()
@@ -157,5 +207,7 @@ function RL.draw()
RL.ClearBackground( RL.RED ) RL.ClearBackground( RL.RED )
end end
drawSDL3PenCircle()
RL.DrawText( text, textPos, 20, RL.BLACK ) RL.DrawText( text, textPos, 20, RL.BLACK )
end end

View File

@@ -1,6 +1,6 @@
#pragma once #pragma once
#ifdef PLATFORM_DESKTOP_SDL2 #if defined PLATFORM_DESKTOP_SDL2 || defined PLATFORM_DESKTOP_SDL3
#define PLATFORM_SDL_EVENT_QUEUE_LEN 128 #define PLATFORM_SDL_EVENT_QUEUE_LEN 128
#endif #endif
@@ -39,7 +39,7 @@ typedef struct {
GLFWpentabletdatafun glfwTabletDataCallback; GLFWpentabletdatafun glfwTabletDataCallback;
GLFWpentabletcursorfun glfwTabletCursorCallback; GLFWpentabletcursorfun glfwTabletCursorCallback;
GLFWpentabletproximityfun glfwTabletProximityCallback; GLFWpentabletproximityfun glfwTabletProximityCallback;
#elif PLATFORM_DESKTOP_SDL2 #elif defined PLATFORM_DESKTOP_SDL2 || defined PLATFORM_DESKTOP_SDL3
int SDL_eventQueueLen; int SDL_eventQueueLen;
SDL_Event* SDL_eventQueue; SDL_Event* SDL_eventQueue;
#endif #endif

View File

@@ -1453,7 +1453,8 @@ void luaCallInit() {
void luaCallUpdate() { void luaCallUpdate() {
#if defined PLATFORM_DESKTOP_SDL2 && defined LUA_EVENTS // #if defined PLATFORM_DESKTOP_SDL2 && defined LUA_EVENTS
#if ( defined PLATFORM_DESKTOP_SDL2 || defined PLATFORM_DESKTOP_SDL3 ) && defined LUA_EVENTS
platformSendEvents(); platformSendEvents();
#endif #endif
lua_State* L = state->luaState; lua_State* L = state->luaState;

View File

@@ -161,377 +161,378 @@ static void platformSendEvents() {
Event occurs whenever a user presses or releases a button on a keyboard. Type SDL_KEYUP or SDL_KEYDOWN Event occurs whenever a user presses or releases a button on a keyboard. Type SDL_KEYUP or SDL_KEYDOWN
*/ */
case SDL_KEYUP: case SDL_KEYUP:
case SDL_KEYDOWN: case SDL_KEYDOWN:
{ {
lua_createtable( L, 7, 0 ); lua_createtable( L, 7, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.key.timestamp ); lua_pushinteger( L, event.key.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.key.state ); lua_pushinteger( L, event.key.state );
lua_setfield( L, -2, "state" ); lua_setfield( L, -2, "state" );
lua_pushinteger( L, event.key.repeat ); lua_pushinteger( L, event.key.repeat );
lua_setfield( L, -2, "repeating" ); /* repeat is Lua keyword. */ lua_setfield( L, -2, "repeating" ); /* repeat is Lua keyword. */
lua_pushinteger( L, event.key.keysym.scancode ); lua_pushinteger( L, event.key.keysym.scancode );
lua_setfield( L, -2, "scancode" ); lua_setfield( L, -2, "scancode" );
lua_pushinteger( L, event.key.keysym.sym ); lua_pushinteger( L, event.key.keysym.sym );
lua_setfield( L, -2, "sym" ); lua_setfield( L, -2, "sym" );
lua_pushinteger( L, event.key.keysym.mod ); lua_pushinteger( L, event.key.keysym.mod );
lua_setfield( L, -2, "mod" ); lua_setfield( L, -2, "mod" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_WindowEvent = { int type, int timestamp, int event, int data1, int data2 } > SDL_WindowEvent = { int type, int timestamp, int event, int data1, int data2 }
Event occurs when an event of type SDL_WINDOWEVENT is reported. Type SDL_WINDOWEVENT Event occurs when an event of type SDL_WINDOWEVENT is reported. Type SDL_WINDOWEVENT
*/ */
case SDL_WINDOWEVENT: case SDL_WINDOWEVENT:
{ {
lua_createtable( L, 5, 0 ); lua_createtable( L, 5, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.window.timestamp ); lua_pushinteger( L, event.window.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.window.event ); lua_pushinteger( L, event.window.event );
lua_setfield( L, -2, "event" ); lua_setfield( L, -2, "event" );
lua_pushinteger( L, event.window.data1 ); lua_pushinteger( L, event.window.data1 );
lua_setfield( L, -2, "data1" ); lua_setfield( L, -2, "data1" );
lua_pushinteger( L, event.window.data2 ); lua_pushinteger( L, event.window.data2 );
lua_setfield( L, -2, "data2" ); lua_setfield( L, -2, "data2" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_MouseMotionEvent = { int type, int timestamp, int which, int state, int x, int y, int xrel, int yrel } > SDL_MouseMotionEvent = { int type, int timestamp, int which, int state, int x, int y, int xrel, int yrel }
Event occurs whenever a user moves the mouse within the application window or when SDL_WarpMouseInWindow() is called. Type SDL_MOUSEMOTION Event occurs whenever a user moves the mouse within the application window or when SDL_WarpMouseInWindow() is called. Type SDL_MOUSEMOTION
*/ */
case SDL_MOUSEMOTION: case SDL_MOUSEMOTION:
{ {
lua_createtable( L, 8, 0 ); lua_createtable( L, 8, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.motion.timestamp ); lua_pushinteger( L, event.motion.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.motion.which ); lua_pushinteger( L, event.motion.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.motion.state ); lua_pushinteger( L, event.motion.state );
lua_setfield( L, -2, "state" ); lua_setfield( L, -2, "state" );
lua_pushinteger( L, event.motion.x ); lua_pushinteger( L, event.motion.x );
lua_setfield( L, -2, "x" ); lua_setfield( L, -2, "x" );
lua_pushinteger( L, event.motion.y ); lua_pushinteger( L, event.motion.y );
lua_setfield( L, -2, "y" ); lua_setfield( L, -2, "y" );
lua_pushinteger( L, event.motion.xrel ); lua_pushinteger( L, event.motion.xrel );
lua_setfield( L, -2, "xrel" ); lua_setfield( L, -2, "xrel" );
lua_pushinteger( L, event.motion.yrel ); lua_pushinteger( L, event.motion.yrel );
lua_setfield( L, -2, "yrel" ); lua_setfield( L, -2, "yrel" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_MouseButtonEvent = { int type, int timestamp, int which, int button, int state, int x, int y } > SDL_MouseButtonEvent = { int type, int timestamp, int which, int button, int state, int x, int y }
Event occurs whenever a user presses or releases a button on a mouse. Type SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP Event occurs whenever a user presses or releases a button on a mouse. Type SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP
*/ */
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONUP:
{ {
lua_createtable( L, 7, 0 ); lua_createtable( L, 7, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.button.timestamp ); lua_pushinteger( L, event.button.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.button.which ); lua_pushinteger( L, event.button.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.button.button ); lua_pushinteger( L, event.button.button );
lua_setfield( L, -2, "button" ); lua_setfield( L, -2, "button" );
lua_pushinteger( L, event.button.state ); lua_pushinteger( L, event.button.state );
lua_setfield( L, -2, "state" ); lua_setfield( L, -2, "state" );
lua_pushinteger( L, event.button.x ); lua_pushinteger( L, event.button.x );
lua_setfield( L, -2, "x" ); lua_setfield( L, -2, "x" );
lua_pushinteger( L, event.button.y ); lua_pushinteger( L, event.button.y );
lua_setfield( L, -2, "y" ); lua_setfield( L, -2, "y" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_MouseWheelEvent = { int type, int timestamp, int which, int x, int y } > SDL_MouseWheelEvent = { int type, int timestamp, int which, int x, int y }
Event occurs whenever a user moves the mouse wheel. Type SDL_MOUSEWHEEL Event occurs whenever a user moves the mouse wheel. Type SDL_MOUSEWHEEL
*/ */
case SDL_MOUSEWHEEL: case SDL_MOUSEWHEEL:
{ {
lua_createtable( L, 5, 0 ); lua_createtable( L, 5, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.wheel.timestamp ); lua_pushinteger( L, event.wheel.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.wheel.which ); lua_pushinteger( L, event.wheel.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.wheel.x ); lua_pushinteger( L, event.wheel.x );
lua_setfield( L, -2, "x" ); lua_setfield( L, -2, "x" );
lua_pushinteger( L, event.wheel.y ); lua_pushinteger( L, event.wheel.y );
lua_setfield( L, -2, "y" ); lua_setfield( L, -2, "y" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_JoyAxisEvent = { int type, int timestamp, int which, int axis, int value } > SDL_JoyAxisEvent = { int type, int timestamp, int which, int axis, int value }
Event occurs whenever a user moves an axis on the joystick. Type SDL_JOYAXISMOTION Event occurs whenever a user moves an axis on the joystick. Type SDL_JOYAXISMOTION
*/ */
case SDL_JOYAXISMOTION: case SDL_JOYAXISMOTION:
{ {
lua_createtable( L, 5, 0 ); lua_createtable( L, 5, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.jaxis.timestamp ); lua_pushinteger( L, event.jaxis.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.jaxis.which ); lua_pushinteger( L, event.jaxis.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.jaxis.axis ); lua_pushinteger( L, event.jaxis.axis );
lua_setfield( L, -2, "axis" ); lua_setfield( L, -2, "axis" );
lua_pushinteger( L, event.jaxis.value ); lua_pushinteger( L, event.jaxis.value );
lua_setfield( L, -2, "value" ); lua_setfield( L, -2, "value" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_JoyBallEvent = { int type, int timestamp, int which, int ball, int xrel, int yrel } > SDL_JoyBallEvent = { int type, int timestamp, int which, int ball, int xrel, int yrel }
Event occurs when a user moves a trackball on the joystick. Type SDL_JOYBALLMOTION Event occurs when a user moves a trackball on the joystick. Type SDL_JOYBALLMOTION
*/ */
case SDL_JOYBALLMOTION: case SDL_JOYBALLMOTION:
{ {
lua_createtable( L, 6, 0 ); lua_createtable( L, 6, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.jball.timestamp ); lua_pushinteger( L, event.jball.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.jball.which ); lua_pushinteger( L, event.jball.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.jball.ball ); lua_pushinteger( L, event.jball.ball );
lua_setfield( L, -2, "ball" ); lua_setfield( L, -2, "ball" );
lua_pushinteger( L, event.jball.xrel ); lua_pushinteger( L, event.jball.xrel );
lua_setfield( L, -2, "xrel" ); lua_setfield( L, -2, "xrel" );
lua_pushinteger( L, event.jball.yrel ); lua_pushinteger( L, event.jball.yrel );
lua_setfield( L, -2, "yrel" ); lua_setfield( L, -2, "yrel" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_JoyHatEvent = { int type, int timestamp, int which, int hat, int value } > SDL_JoyHatEvent = { int type, int timestamp, int which, int hat, int value }
Event occurs whenever a user moves a hat on the joystick. Type SDL_JOYHATMOTION Event occurs whenever a user moves a hat on the joystick. Type SDL_JOYHATMOTION
*/ */
case SDL_JOYHATMOTION: case SDL_JOYHATMOTION:
{ {
lua_createtable( L, 5, 0 ); lua_createtable( L, 5, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.jhat.timestamp ); lua_pushinteger( L, event.jhat.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.jhat.which ); lua_pushinteger( L, event.jhat.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.jhat.hat ); lua_pushinteger( L, event.jhat.hat );
lua_setfield( L, -2, "hat" ); lua_setfield( L, -2, "hat" );
lua_pushinteger( L, event.jhat.value ); lua_pushinteger( L, event.jhat.value );
lua_setfield( L, -2, "value" ); lua_setfield( L, -2, "value" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_JoyButtonEvent = { int type, int timestamp, int which, int button, int state } > SDL_JoyButtonEvent = { int type, int timestamp, int which, int button, int state }
Event occurs whenever a user presses or releases a button on a joystick. Type SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP Event occurs whenever a user presses or releases a button on a joystick. Type SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP
*/ */
case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONDOWN:
case SDL_JOYBUTTONUP: case SDL_JOYBUTTONUP:
{ {
lua_createtable( L, 5, 0 ); lua_createtable( L, 5, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.jbutton.timestamp ); lua_pushinteger( L, event.jbutton.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.jbutton.which ); lua_pushinteger( L, event.jbutton.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.jbutton.button ); lua_pushinteger( L, event.jbutton.button );
lua_setfield( L, -2, "button" ); lua_setfield( L, -2, "button" );
lua_pushinteger( L, event.jbutton.state ); lua_pushinteger( L, event.jbutton.state );
lua_setfield( L, -2, "state" ); lua_setfield( L, -2, "state" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_JoyDeviceEvent = { int type, int timestamp, int which } > SDL_JoyDeviceEvent = { int type, int timestamp, int which }
Event occurs whenever a user connects or disconnects a joystick. Type SDL_JOYDEVICEADDED or SDL_JOYDEVICEREMOVED Event occurs whenever a user connects or disconnects a joystick. Type SDL_JOYDEVICEADDED or SDL_JOYDEVICEREMOVED
*/ */
case SDL_JOYDEVICEADDED: case SDL_JOYDEVICEADDED:
case SDL_JOYDEVICEREMOVED: case SDL_JOYDEVICEREMOVED:
{ {
lua_createtable( L, 3, 0 ); lua_createtable( L, 3, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.jdevice.timestamp ); lua_pushinteger( L, event.jdevice.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.jdevice.which ); lua_pushinteger( L, event.jdevice.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_ControllerAxisEvent = { int type, int timestamp, int which, int axis, int value } > SDL_ControllerAxisEvent = { int type, int timestamp, int which, int axis, int value }
Event occurs whenever a user moves an axis on the controller. Type SDL_CONTROLLERAXISMOTION Event occurs whenever a user moves an axis on the controller. Type SDL_CONTROLLERAXISMOTION
*/ */
case SDL_CONTROLLERAXISMOTION: case SDL_CONTROLLERAXISMOTION:
{ {
lua_createtable( L, 5, 0 ); lua_createtable( L, 5, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.caxis.timestamp ); lua_pushinteger( L, event.caxis.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.caxis.which ); lua_pushinteger( L, event.caxis.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.caxis.axis ); lua_pushinteger( L, event.caxis.axis );
lua_setfield( L, -2, "axis" ); lua_setfield( L, -2, "axis" );
lua_pushinteger( L, event.caxis.value ); lua_pushinteger( L, event.caxis.value );
lua_setfield( L, -2, "value" ); lua_setfield( L, -2, "value" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_ControllerButtonEvent = { int type, int timestamp, int which, int button, int state } > SDL_ControllerButtonEvent = { int type, int timestamp, int which, int button, int state }
Event occurs whenever a user presses or releases a button on a controller. Type SDL_CONTROLLERBUTTONDOWN or SDL_CONTROLLERBUTTONUP Event occurs whenever a user presses or releases a button on a controller. Type SDL_CONTROLLERBUTTONDOWN or SDL_CONTROLLERBUTTONUP
*/ */
case SDL_CONTROLLERBUTTONDOWN: case SDL_CONTROLLERBUTTONDOWN:
case SDL_CONTROLLERBUTTONUP: case SDL_CONTROLLERBUTTONUP:
{ {
lua_createtable( L, 5, 0 ); lua_createtable( L, 5, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.cbutton.timestamp ); lua_pushinteger( L, event.cbutton.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.cbutton.which ); lua_pushinteger( L, event.cbutton.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
lua_pushinteger( L, event.cbutton.button ); lua_pushinteger( L, event.cbutton.button );
lua_setfield( L, -2, "button" ); lua_setfield( L, -2, "button" );
lua_pushinteger( L, event.cbutton.state ); lua_pushinteger( L, event.cbutton.state );
lua_setfield( L, -2, "state" ); lua_setfield( L, -2, "state" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_ControllerDeviceEvent = { int type, int timestamp, int which } > SDL_ControllerDeviceEvent = { int type, int timestamp, int which }
Event occurs whenever a user connects, disconnects or remaps a controller. Type SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED or SDL_CONTROLLERDEVICEREMAPPED Event occurs whenever a user connects, disconnects or remaps a controller. Type SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED or SDL_CONTROLLERDEVICEREMAPPED
*/ */
case SDL_CONTROLLERDEVICEADDED: case SDL_CONTROLLERDEVICEADDED:
case SDL_CONTROLLERDEVICEREMOVED: case SDL_CONTROLLERDEVICEREMOVED:
case SDL_CONTROLLERDEVICEREMAPPED: case SDL_CONTROLLERDEVICEREMAPPED:
{ {
lua_createtable( L, 3, 0 ); lua_createtable( L, 3, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.cdevice.timestamp ); lua_pushinteger( L, event.cdevice.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.cdevice.which ); lua_pushinteger( L, event.cdevice.which );
lua_setfield( L, -2, "which" ); lua_setfield( L, -2, "which" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_TouchFingerEvent = { int type, int timestamp, int touchId, int fingerId, float x, float y, float dx, float dy, float pressure } > SDL_TouchFingerEvent = { int type, int timestamp, int touchId, int fingerId, float x, float y, float dx, float dy, float pressure }
Event occurs when an event of type SDL_FINGERMOTION, SDL_FINGERDOWN, or SDL_FINGERUP is reported. Type SDL_FINGERMOTION, SDL_FINGERDOWN or SDL_FINGERUP Event occurs when an event of type SDL_FINGERMOTION, SDL_FINGERDOWN, or SDL_FINGERUP is reported. Type SDL_FINGERMOTION, SDL_FINGERDOWN or SDL_FINGERUP
*/ */
case SDL_FINGERMOTION: case SDL_FINGERMOTION:
case SDL_FINGERDOWN: case SDL_FINGERDOWN:
case SDL_FINGERUP: case SDL_FINGERUP:
{ {
lua_createtable( L, 9, 0 ); lua_createtable( L, 9, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.tfinger.timestamp ); lua_pushinteger( L, event.tfinger.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.tfinger.touchId ); lua_pushinteger( L, event.tfinger.touchId );
lua_setfield( L, -2, "touchId" ); lua_setfield( L, -2, "touchId" );
lua_pushinteger( L, event.tfinger.fingerId ); lua_pushinteger( L, event.tfinger.fingerId );
lua_setfield( L, -2, "fingerId" ); lua_setfield( L, -2, "fingerId" );
lua_pushnumber( L, event.tfinger.x ); lua_pushnumber( L, event.tfinger.x );
lua_setfield( L, -2, "x" ); lua_setfield( L, -2, "x" );
lua_pushnumber( L, event.tfinger.y ); lua_pushnumber( L, event.tfinger.y );
lua_setfield( L, -2, "y" ); lua_setfield( L, -2, "y" );
lua_pushnumber( L, event.tfinger.dx ); lua_pushnumber( L, event.tfinger.dx );
lua_setfield( L, -2, "dx" ); lua_setfield( L, -2, "dx" );
lua_pushnumber( L, event.tfinger.dy ); lua_pushnumber( L, event.tfinger.dy );
lua_setfield( L, -2, "dy" ); lua_setfield( L, -2, "dy" );
lua_pushnumber( L, event.tfinger.pressure ); lua_pushnumber( L, event.tfinger.pressure );
lua_setfield( L, -2, "pressure" ); lua_setfield( L, -2, "pressure" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_MultiGestureEvent = { int type, int timestamp, int touchId, float dTheta, float dDist, float x, float y, int numFingers } > SDL_MultiGestureEvent = { int type, int timestamp, int touchId, float dTheta, float dDist, float x, float y, int numFingers }
Event occurs when type SDL_MULTIGESTURE is reported. Type SDL_MULTIGESTURE Event occurs when type SDL_MULTIGESTURE is reported. Type SDL_MULTIGESTURE
*/ */
case SDL_MULTIGESTURE: case SDL_MULTIGESTURE:
{ {
lua_createtable( L, 8, 0 ); lua_createtable( L, 8, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.mgesture.timestamp ); lua_pushinteger( L, event.mgesture.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.mgesture.touchId ); lua_pushinteger( L, event.mgesture.touchId );
lua_setfield( L, -2, "touchId" ); lua_setfield( L, -2, "touchId" );
lua_pushnumber( L, event.mgesture.dTheta ); lua_pushnumber( L, event.mgesture.dTheta );
lua_setfield( L, -2, "dTheta" ); lua_setfield( L, -2, "dTheta" );
lua_pushnumber( L, event.mgesture.dDist ); lua_pushnumber( L, event.mgesture.dDist );
lua_setfield( L, -2, "dDist" ); lua_setfield( L, -2, "dDist" );
lua_pushnumber( L, event.mgesture.x ); lua_pushnumber( L, event.mgesture.x );
lua_setfield( L, -2, "x" ); lua_setfield( L, -2, "x" );
lua_pushnumber( L, event.mgesture.y ); lua_pushnumber( L, event.mgesture.y );
lua_setfield( L, -2, "y" ); lua_setfield( L, -2, "y" );
lua_pushinteger( L, event.mgesture.numFingers ); lua_pushinteger( L, event.mgesture.numFingers );
lua_setfield( L, -2, "numFingers" ); lua_setfield( L, -2, "numFingers" );
call = true; call = true;
} }
break; break;
/* /*
> SDL_DollarGestureEvent = { int type, int timestamp, int touchId, int gestureId, int numFingers, float error, float x, float y } > SDL_DollarGestureEvent = { int type, int timestamp, int touchId, int gestureId, int numFingers, float error, float x, float y }
Event occurs an event of type SDL_DOLLARGESTURE or SDL_DOLLARRECORD is reported. Type SDL_DOLLARGESTURE or SDL_DOLLARRECORD Event occurs an event of type SDL_DOLLARGESTURE or SDL_DOLLARRECORD is reported. Type SDL_DOLLARGESTURE or SDL_DOLLARRECORD
*/ */
case SDL_DOLLARGESTURE: case SDL_DOLLARGESTURE:
case SDL_DOLLARRECORD: case SDL_DOLLARRECORD:
{ {
lua_createtable( L, 8, 0 ); lua_createtable( L, 8, 0 );
lua_pushinteger( L, event.type ); lua_pushinteger( L, event.type );
lua_setfield( L, -2, "type" ); lua_setfield( L, -2, "type" );
lua_pushinteger( L, event.dgesture.timestamp ); lua_pushinteger( L, event.dgesture.timestamp );
lua_setfield( L, -2, "timestamp" ); lua_setfield( L, -2, "timestamp" );
lua_pushinteger( L, event.dgesture.touchId ); lua_pushinteger( L, event.dgesture.touchId );
lua_setfield( L, -2, "touchId" ); lua_setfield( L, -2, "touchId" );
lua_pushinteger( L, event.dgesture.gestureId ); lua_pushinteger( L, event.dgesture.gestureId );
lua_setfield( L, -2, "gestureId" ); lua_setfield( L, -2, "gestureId" );
lua_pushinteger( L, event.dgesture.numFingers ); lua_pushinteger( L, event.dgesture.numFingers );
lua_setfield( L, -2, "numFingers" ); lua_setfield( L, -2, "numFingers" );
lua_pushnumber( L, event.dgesture.error ); lua_pushnumber( L, event.dgesture.error );
lua_setfield( L, -2, "error" ); lua_setfield( L, -2, "error" );
lua_pushnumber( L, event.dgesture.x ); lua_pushnumber( L, event.dgesture.x );
lua_setfield( L, -2, "x" ); lua_setfield( L, -2, "x" );
lua_pushnumber( L, event.dgesture.y ); lua_pushnumber( L, event.dgesture.y );
lua_setfield( L, -2, "y" ); lua_setfield( L, -2, "y" );
call = true; call = true;
} }
break; break;
default: /* End of events. */
break; default:
break;
} }
if ( call ) { if ( call ) {

File diff suppressed because it is too large Load Diff

View File

@@ -18,6 +18,11 @@ bool stateInit( int argn, const char** argc, const char* basePath ) {
state->mouseOffset = (Vector2){ 0, 0 }; state->mouseOffset = (Vector2){ 0, 0 };
state->mouseScale = (Vector2){ 1, 1 }; state->mouseScale = (Vector2){ 1, 1 };
#if defined PLATFORM_DESKTOP_SDL2 || defined PLATFORM_DESKTOP_SDL3
state->SDL_eventQueue = malloc( PLATFORM_SDL_EVENT_QUEUE_LEN * sizeof( SDL_Event ) );
state->SDL_eventQueueLen = 0;
#endif
return state->run; return state->run;
} }
@@ -29,10 +34,6 @@ void stateContextInit() {
state->defaultTexture = (Texture){ 1, 1, 1, 1, 7 }; state->defaultTexture = (Texture){ 1, 1, 1, 1, 7 };
state->shapesTexture = (Texture){ 1, 1, 1, 1, 7 }; state->shapesTexture = (Texture){ 1, 1, 1, 1, 7 };
state->RLGLcurrentShaderLocs = malloc( RL_MAX_SHADER_LOCATIONS * sizeof( int ) ); state->RLGLcurrentShaderLocs = malloc( RL_MAX_SHADER_LOCATIONS * sizeof( int ) );
#ifdef PLATFORM_DESKTOP_SDL2
state->SDL_eventQueue = malloc( PLATFORM_SDL_EVENT_QUEUE_LEN * sizeof( SDL_Event ) );
state->SDL_eventQueueLen = 0;
#endif
int* defaultShaderLocs = rlGetShaderLocsDefault(); int* defaultShaderLocs = rlGetShaderLocsDefault();
for ( int i = 0; i < RL_MAX_SHADER_LOCATIONS; i++ ) { for ( int i = 0; i < RL_MAX_SHADER_LOCATIONS; i++ ) {