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_widgets.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_link_libraries(imgui PUBLIC SDL3::Headers)
target_link_libraries(imgui PRIVATE SDL3::SDL3)
@ -123,6 +133,7 @@ if(USE_SDL2)
)
target_link_libraries(SDL3_shim PRIVATE SDL2::SDL2)
target_include_directories(SDL3_shim PUBLIC
${SDL2_INCLUDE_DIRS}
"${CMAKE_CURRENT_SOURCE_DIR}/sdl3-shim"
"${CMAKE_CURRENT_BINARY_DIR}/sdl3-shim"
)

View File

@ -3,6 +3,7 @@
#include "SDL.h"
#include <SDL2/SDL_events.h>
#include <SDL2/SDL_video.h>
// https://wiki.libsdl.org/SDL3/README-migration#sdl_eventsh
@ -66,3 +67,60 @@
#define touchID touchId
#define gaxis caxis
#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_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[]) {
void *appstate = NULL;
if (SDL_AppInit(&appstate, argc, argv) != 0) {
@ -11,6 +20,7 @@ int main(int argc, char *argv[]) {
SDL_Event e;
while (!SDL_AppIterate(appstate)) {
while (SDL_PollEvent(&e)) {
TranslateSDLEvents(&e);
SDL_AppEvent(appstate, &e);
}
}

View File

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