From f0ae048d21e2a774dd30c6b6dca28d9862ffdd50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 6 Nov 2024 22:09:53 +0100 Subject: [PATCH] Fix mouse hover in SDL builds --- SDL/SDLMain.cpp | 21 ++++++++++++++------- UI/BackgroundAudio.h | 2 -- UI/DevScreens.cpp | 4 ++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp index 97ab21bbe5dc..7ef52538d470 100644 --- a/SDL/SDLMain.cpp +++ b/SDL/SDLMain.cpp @@ -195,7 +195,11 @@ static void UpdateScreenDPI(SDL_Window *window) { SDL_GL_GetDrawableSize(window, &drawable_width, NULL); else if (g_Config.iGPUBackend == (int)GPUBackend::VULKAN) SDL_Vulkan_GetDrawableSize(window, &drawable_width, NULL); - + else { + // If we add SDL support for more platforms, we'll end up here. + g_DesktopDPI = 1.0f; + return; + } // Round up a little otherwise there would be a gap sometimes // in fractional scaling g_DesktopDPI = ((float) drawable_width + 1.0f) / window_width; @@ -729,7 +733,7 @@ struct InputStateTracker { } } - bool mouseDown; + int mouseDown; // bitflags bool mouseCaptured; }; @@ -943,7 +947,7 @@ static void ProcessSDLEvent(SDL_Window *window, const SDL_Event &event, InputSta switch (event.button.button) { case SDL_BUTTON_LEFT: { - inputTracker->mouseDown = true; + inputTracker->mouseDown |= 1; TouchInput input{}; input.x = mx; input.y = my; @@ -957,6 +961,7 @@ static void ProcessSDLEvent(SDL_Window *window, const SDL_Event &event, InputSta break; case SDL_BUTTON_RIGHT: { + inputTracker->mouseDown |= 2; TouchInput input{}; input.x = mx; input.y = my; @@ -1018,21 +1023,22 @@ static void ProcessSDLEvent(SDL_Window *window, const SDL_Event &event, InputSta break; } case SDL_MOUSEMOTION: - if (inputTracker->mouseDown) { + { TouchInput input{}; input.x = mx; input.y = my; input.flags = TOUCH_MOVE | TOUCH_MOUSE; + input.buttons = inputTracker->mouseDown; input.id = 0; NativeTouch(input); + NativeMouseDelta(event.motion.xrel, event.motion.yrel); + break; } - NativeMouseDelta(event.motion.xrel, event.motion.yrel); - break; case SDL_MOUSEBUTTONUP: switch (event.button.button) { case SDL_BUTTON_LEFT: { - inputTracker->mouseDown = false; + inputTracker->mouseDown &= ~1; TouchInput input{}; input.x = mx; input.y = my; @@ -1045,6 +1051,7 @@ static void ProcessSDLEvent(SDL_Window *window, const SDL_Event &event, InputSta break; case SDL_BUTTON_RIGHT: { + inputTracker->mouseDown &= ~2; // Right button only emits mouse move events. This is weird, // but consistent with Windows. Needs cleanup. TouchInput input{}; diff --git a/UI/BackgroundAudio.h b/UI/BackgroundAudio.h index 1ad0e9eb8f39..30371171f496 100644 --- a/UI/BackgroundAudio.h +++ b/UI/BackgroundAudio.h @@ -46,8 +46,6 @@ class SoundEffectMixer { // This can be called on a thread. void LoadSamplesOnThread(); private: - bool samplesLoaded_ = false; - std::mutex mutex_; std::vector queue_; std::vector plays_; diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp index ea8612c5de66..c8bd8ba10db0 100644 --- a/UI/DevScreens.cpp +++ b/UI/DevScreens.cpp @@ -1149,8 +1149,8 @@ void TouchTestScreen::touch(const TouchInput &touch) { found = true; } } - if (!found) { - WARN_LOG(Log::System, "Move without touch down: %d", touch.id); + if (!found && touch.buttons) { + WARN_LOG(Log::System, "Move with buttons %d without touch down: %d", touch.buttons, touch.id); } } if (touch.flags & TOUCH_UP) {