mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-13 11:11:15 +00:00
ISLE_DEBUG support and event changes
This commit is contained in:
parent
98249834ff
commit
333867eb38
15
3rdparty/CMakeLists.txt
vendored
15
3rdparty/CMakeLists.txt
vendored
@ -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"
|
||||
)
|
||||
|
||||
58
3rdparty/sdl3-shim/SDL3/SDL_events.h
vendored
58
3rdparty/sdl3-shim/SDL3/SDL_events.h
vendored
@ -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);
|
||||
}
|
||||
|
||||
10
3rdparty/sdl3-shim/main.cpp
vendored
10
3rdparty/sdl3-shim/main.cpp
vendored
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user