From c0c63745398714b0fe56f06dbf77d227753379a0 Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 20 Apr 2025 17:37:05 -0400 Subject: [PATCH] Refactor event handling in Controller::OnInput to use SDL_WaitEvent instead of polling; improves efficiency by reducing CPU usage during event processing. --- src/app/core/controller.cc | 51 +++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/app/core/controller.cc b/src/app/core/controller.cc index 16c74075..74ecf011 100644 --- a/src/app/core/controller.cc +++ b/src/app/core/controller.cc @@ -64,33 +64,32 @@ void Controller::OnInput() { ImGuiIO &io = ImGui::GetIO(); SDL_Event event; - while (SDL_PollEvent(&event)) { - ImGui_ImplSDL2_ProcessEvent(&event); - switch (event.type) { - case SDL_KEYDOWN: - case SDL_KEYUP: { - io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); - io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); - io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); - io.KeySuper = ((SDL_GetModState() & KMOD_GUI) != 0); - break; - } - case SDL_WINDOWEVENT: - switch (event.window.event) { - case SDL_WINDOWEVENT_CLOSE: - active_ = false; - break; - case SDL_WINDOWEVENT_SIZE_CHANGED: - io.DisplaySize.x = static_cast(event.window.data1); - io.DisplaySize.y = static_cast(event.window.data2); - break; - default: - break; - } - break; - default: - break; + SDL_WaitEvent(&event); + ImGui_ImplSDL2_ProcessEvent(&event); + switch (event.type) { + case SDL_KEYDOWN: + case SDL_KEYUP: { + io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); + io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); + io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); + io.KeySuper = ((SDL_GetModState() & KMOD_GUI) != 0); + break; } + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_CLOSE: + active_ = false; + break; + case SDL_WINDOWEVENT_SIZE_CHANGED: + io.DisplaySize.x = static_cast(event.window.data1); + io.DisplaySize.y = static_cast(event.window.data2); + break; + default: + break; + } + break; + default: + break; } int mouseX;