From 336e8a7563ec849b1d36d4b30cbf6ca0dbb6efa5 Mon Sep 17 00:00:00 2001 From: rainmakerv3 <30595646+rainmakerv3@users.noreply.github.com> Date: Sun, 29 Jun 2025 06:01:03 +0800 Subject: [PATCH] Ugly solution to working with ImGUI --- src/imgui/renderer/imgui_impl_sdl3.cpp | 31 +++++++++++++++----------- src/qt_gui/control_settings.ui | 2 ++ src/sdl_window.cpp | 2 ++ src/sdl_window.h | 4 ++-- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/imgui/renderer/imgui_impl_sdl3.cpp b/src/imgui/renderer/imgui_impl_sdl3.cpp index bd0c1a5db..fd703ee19 100644 --- a/src/imgui/renderer/imgui_impl_sdl3.cpp +++ b/src/imgui/renderer/imgui_impl_sdl3.cpp @@ -7,6 +7,7 @@ #include "common/config.h" #include "core/debug_state.h" #include "imgui_impl_sdl3.h" +#include "sdl_window.h" // SDL #include @@ -730,21 +731,25 @@ static void UpdateGamepads() { ImGuiIO& io = ImGui::GetIO(); SdlData* bd = GetBackendData(); - /* - // Update list of gamepads to use - if (bd->want_update_gamepads_list && bd->gamepad_mode != ImGui_ImplSDL3_GamepadMode_Manual) { - CloseGamepads(); - int sdl_gamepads_count = 0; - const SDL_JoystickID* sdl_gamepads = SDL_GetGamepads(&sdl_gamepads_count); - for (int n = 0; n < sdl_gamepads_count; n++) - if (SDL_Gamepad* gamepad = SDL_OpenGamepad(sdl_gamepads[n])) { - bd->gamepads.push_back(gamepad); - if (bd->gamepad_mode == ImGui_ImplSDL3_GamepadMode_AutoFirst) - break; - } + SDL_Gamepad* SDLGamepad = Input::m_gamepad; + if (SDLGamepad) { + bd->gamepads.push_back(SDLGamepad); + } else { + // Update list of gamepads to use + if (bd->want_update_gamepads_list && + bd->gamepad_mode != ImGui_ImplSDL3_GamepadMode_Manual) { + CloseGamepads(); + int sdl_gamepads_count = 0; + const SDL_JoystickID* sdl_gamepads = SDL_GetGamepads(&sdl_gamepads_count); + for (int n = 0; n < sdl_gamepads_count; n++) + if (SDL_Gamepad* gamepad = SDL_OpenGamepad(sdl_gamepads[n])) { + bd->gamepads.push_back(gamepad); + if (bd->gamepad_mode == ImGui_ImplSDL3_GamepadMode_AutoFirst) + break; + } bd->want_update_gamepads_list = false; + } } - */ // FIXME: Technically feeding gamepad shouldn't depend on this now that they are regular inputs. if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0) diff --git a/src/qt_gui/control_settings.ui b/src/qt_gui/control_settings.ui index c8cdc655c..d620490ee 100644 --- a/src/qt_gui/control_settings.ui +++ b/src/qt_gui/control_settings.ui @@ -1,4 +1,6 @@ + ControlSettings diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp index 4d0715060..34f570626 100644 --- a/src/sdl_window.cpp +++ b/src/sdl_window.cpp @@ -31,6 +31,8 @@ namespace Input { +SDL_Gamepad* m_gamepad = nullptr; + using Libraries::Pad::OrbisPadButtonDataOffset; static OrbisPadButtonDataOffset SDLGamepadToOrbisButton(u8 button) { diff --git a/src/sdl_window.h b/src/sdl_window.h index ce79eedd0..3ea96c734 100644 --- a/src/sdl_window.h +++ b/src/sdl_window.h @@ -17,6 +17,8 @@ union SDL_Event; namespace Input { +extern SDL_Gamepad* m_gamepad; + class SDLInputEngine : public Engine { public: ~SDLInputEngine() override; @@ -28,8 +30,6 @@ public: State ReadState() override; private: - SDL_Gamepad* m_gamepad = nullptr; - float m_gyro_poll_rate = 0.0f; float m_accel_poll_rate = 0.0f; };