ISLE_DEBUG support and event changes

This commit is contained in:
Kylie C 2025-10-18 02:20:20 -04:00
parent 98249834ff
commit 333867eb38
4 changed files with 115 additions and 3 deletions

View File

@ -67,9 +67,19 @@ if(ISLE_DEBUG)
${imgui_SOURCE_DIR}/imgui_tables.cpp ${imgui_SOURCE_DIR}/imgui_tables.cpp
${imgui_SOURCE_DIR}/imgui_widgets.cpp ${imgui_SOURCE_DIR}/imgui_widgets.cpp
${imgui_SOURCE_DIR}/imgui_demo.cpp ${imgui_SOURCE_DIR}/imgui_demo.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_sdl3.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.cpp
) )
if(USE_SDL2)
target_sources(imgui PRIVATE
${imgui_SOURCE_DIR}/backends/imgui_impl_sdl2.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer2.cpp
)
else()
target_sources(imgui PRIVATE
${imgui_SOURCE_DIR}/backends/imgui_impl_sdl3.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.cpp
)
endif()
target_include_directories(imgui PUBLIC ${imgui_SOURCE_DIR}) target_include_directories(imgui PUBLIC ${imgui_SOURCE_DIR})
target_link_libraries(imgui PUBLIC SDL3::Headers) target_link_libraries(imgui PUBLIC SDL3::Headers)
target_link_libraries(imgui PRIVATE SDL3::SDL3) target_link_libraries(imgui PRIVATE SDL3::SDL3)
@ -123,6 +133,7 @@ if(USE_SDL2)
) )
target_link_libraries(SDL3_shim PRIVATE SDL2::SDL2) target_link_libraries(SDL3_shim PRIVATE SDL2::SDL2)
target_include_directories(SDL3_shim PUBLIC target_include_directories(SDL3_shim PUBLIC
${SDL2_INCLUDE_DIRS}
"${CMAKE_CURRENT_SOURCE_DIR}/sdl3-shim" "${CMAKE_CURRENT_SOURCE_DIR}/sdl3-shim"
"${CMAKE_CURRENT_BINARY_DIR}/sdl3-shim" "${CMAKE_CURRENT_BINARY_DIR}/sdl3-shim"
) )

View File

@ -3,6 +3,7 @@
#include "SDL.h" #include "SDL.h"
#include <SDL2/SDL_events.h> #include <SDL2/SDL_events.h>
#include <SDL2/SDL_video.h>
// https://wiki.libsdl.org/SDL3/README-migration#sdl_eventsh // https://wiki.libsdl.org/SDL3/README-migration#sdl_eventsh
@ -66,3 +67,60 @@
#define touchID touchId #define touchID touchId
#define gaxis caxis #define gaxis caxis
#define gbutton cbutton #define gbutton cbutton
inline SDL_Window* SDL_GetWindowFromEvent(const SDL_Event* event)
{
Uint32 windowID = 0;
if (event->type >= SDL_USEREVENT && event->type <= SDL_LASTEVENT) {
windowID = event->user.windowID;
}
else {
switch (event->type) {
case SDL_WINDOWEVENT:
windowID = event->window.windowID;
break;
case SDL_KEYDOWN:
case SDL_KEYUP:
case SDL_KEYMAPCHANGED:
windowID = event->key.windowID;
break;
case SDL_TEXTEDITING:
windowID = event->edit.windowID;
break;
case SDL_TEXTINPUT:
windowID = event->text.windowID;
break;
case SDL_TEXTEDITING_EXT:
windowID = event->editExt.windowID;
break;
case SDL_MOUSEMOTION:
windowID = event->motion.windowID;
break;
case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
windowID = event->button.windowID;
break;
case SDL_MOUSEWHEEL:
windowID = event->wheel.windowID;
break;
case SDL_FINGERDOWN:
case SDL_FINGERUP:
case SDL_FINGERMOTION:
windowID = event->tfinger.windowID;
break;
case SDL_DROPFILE:
case SDL_DROPTEXT:
case SDL_DROPBEGIN:
case SDL_DROPCOMPLETE:
windowID = event->drop.windowID;
break;
}
}
return SDL_GetWindowFromID(windowID);
}

View File

@ -2,6 +2,15 @@
#include "SDL3/SDL_events.h" #include "SDL3/SDL_events.h"
#include "SDL3/SDL_main.h" #include "SDL3/SDL_main.h"
static void TranslateSDLEvents(SDL_Event* e)
{
// Extend to SDL_DISPLAYEVENT & fully replace the event object passed to AppEvent
// if wanting to drop the ifs on key, mouse and keyboard events.
if (e->type == SDL_WINDOWEVENT) {
e->type = SDL_WINDOWEVENT + 2 + e->window.event;
}
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
void *appstate = NULL; void *appstate = NULL;
if (SDL_AppInit(&appstate, argc, argv) != 0) { if (SDL_AppInit(&appstate, argc, argv) != 0) {
@ -11,6 +20,7 @@ int main(int argc, char *argv[]) {
SDL_Event e; SDL_Event e;
while (!SDL_AppIterate(appstate)) { while (!SDL_AppIterate(appstate)) {
while (SDL_PollEvent(&e)) { while (SDL_PollEvent(&e)) {
TranslateSDLEvents(&e);
SDL_AppEvent(appstate, &e); SDL_AppEvent(appstate, &e);
} }
} }

View File

@ -12,8 +12,13 @@
#include "mxticklemanager.h" #include "mxticklemanager.h"
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
#if SDL_MAJOR_VERSION >= 3
#include <backends/imgui_impl_sdl3.h> #include <backends/imgui_impl_sdl3.h>
#include <backends/imgui_impl_sdlrenderer3.h> #include <backends/imgui_impl_sdlrenderer3.h>
#else
#include <backends/imgui_impl_sdl2.h>
#include <backends/imgui_impl_sdlrenderer2.h>
#endif
#include <imgui.h> #include <imgui.h>
#ifdef ISLE_VALGRIND #ifdef ISLE_VALGRIND
@ -176,7 +181,11 @@ void IsleDebug_Init()
ImGui::CreateContext(); ImGui::CreateContext();
ImGui::StyleColorsDark(); ImGui::StyleColorsDark();
#if SDL_MAJOR_VERSION >= 3
if (!ImGui_ImplSDL3_InitForSDLRenderer(g_debugWindow, g_debugRenderer)) { if (!ImGui_ImplSDL3_InitForSDLRenderer(g_debugWindow, g_debugRenderer)) {
#else
if (!ImGui_ImplSDL2_InitForSDLRenderer(g_debugWindow, g_debugRenderer)) {
#endif
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ImGui_ImplSDL3_InitForSDLRenderer failed"); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ImGui_ImplSDL3_InitForSDLRenderer failed");
g_debugEnabled = false; g_debugEnabled = false;
break; break;
@ -188,7 +197,11 @@ void IsleDebug_Init()
#else #else
SDL_SetTextureScaleMode(g_videoPalette, SDL_SCALEMODE_NEAREST); SDL_SetTextureScaleMode(g_videoPalette, SDL_SCALEMODE_NEAREST);
#endif #endif
#if SDL_MAJOR_VERSION >= 3
if (!ImGui_ImplSDLRenderer3_Init(g_debugRenderer)) { if (!ImGui_ImplSDLRenderer3_Init(g_debugRenderer)) {
#else
if (!ImGui_ImplSDLRenderer2_Init(g_debugRenderer)) {
#endif
g_debugEnabled = false; g_debugEnabled = false;
break; break;
} }
@ -221,7 +234,11 @@ bool IsleDebug_Event(SDL_Event* event)
return false; return false;
} }
if (event->type == SDL_EVENT_KEY_DOWN) { if (event->type == SDL_EVENT_KEY_DOWN) {
#if SDL_MAJOR_VERSION >= 3
if (event->key.scancode == SCANCODE_KEY_PAUSE) { if (event->key.scancode == SCANCODE_KEY_PAUSE) {
#else
if (event->key.keysym.scancode == SCANCODE_KEY_PAUSE) {
#endif
if (!g_debugPaused) { if (!g_debugPaused) {
IsleDebug_SetPaused(true); IsleDebug_SetPaused(true);
} }
@ -230,7 +247,11 @@ bool IsleDebug_Event(SDL_Event* event)
} }
return true; return true;
} }
#if SDL_MAJOR_VERSION >= 3
if (event->key.scancode == SCANCODE_KEY_RESUME) { if (event->key.scancode == SCANCODE_KEY_RESUME) {
#else
if (event->key.keysym.scancode == SCANCODE_KEY_RESUME) {
#endif
g_debugDoStep = false; g_debugDoStep = false;
if (g_debugPaused) { if (g_debugPaused) {
IsleDebug_SetPaused(false); IsleDebug_SetPaused(false);
@ -241,7 +262,11 @@ bool IsleDebug_Event(SDL_Event* event)
if (SDL_GetWindowFromEvent(event) != g_debugWindow) { if (SDL_GetWindowFromEvent(event) != g_debugWindow) {
return false; return false;
} }
#if SDL_MAJOR_VERSION >= 3
ImGui_ImplSDL3_ProcessEvent(event); ImGui_ImplSDL3_ProcessEvent(event);
#else
ImGui_ImplSDL2_ProcessEvent(event);
#endif
return true; return true;
} }
@ -251,9 +276,13 @@ void IsleDebug_Render()
return; return;
} }
const ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); const ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
#if SDL_MAJOR_VERSION >= 3
ImGui_ImplSDLRenderer3_NewFrame(); ImGui_ImplSDLRenderer3_NewFrame();
ImGui_ImplSDL3_NewFrame(); ImGui_ImplSDL3_NewFrame();
#else
ImGui_ImplSDLRenderer2_NewFrame();
ImGui_ImplSDL2_NewFrame();
#endif
ImGui::NewFrame(); ImGui::NewFrame();
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
{ {
@ -346,7 +375,11 @@ void IsleDebug_Render()
(Uint8) (clear_color.z * 255), (Uint8) (clear_color.z * 255),
(Uint8) (clear_color.w * 255) (Uint8) (clear_color.w * 255)
); );
#if SDL_MAJOR_VERSION >= 3
ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), g_debugRenderer); ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), g_debugRenderer);
#else
ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData(), g_debugRenderer);
#endif
SDL_RenderPresent(g_debugRenderer); SDL_RenderPresent(g_debugRenderer);
} }