mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-23 15:31:16 +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_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"
|
||||||
)
|
)
|
||||||
|
|||||||
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 "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);
|
||||||
|
}
|
||||||
|
|||||||
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_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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user