|
@@ -21,6 +21,7 @@
|
|
|
|
|
|
// CHANGELOG
|
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
|
+// 2025-09-23: Inputs: Minor optimization not submitting gamepad input if packet number has not changed.
|
|
|
// 2025-09-18: Call platform_io.ClearPlatformHandlers() on shutdown.
|
|
|
// 2025-04-30: Inputs: Fixed an issue where externally losing mouse capture (due to e.g. focus loss) would fail to claim it again the next subsequent click. (#8594)
|
|
|
// 2025-03-10: When dealing with OEM keys, use scancodes instead of translated keycodes to choose ImGuiKey values. (#7136, #7201, #7206, #7306, #7670, #7672, #8468)
|
|
@@ -124,6 +125,7 @@ struct ImGui_ImplWin32_Data
|
|
|
HMODULE XInputDLL;
|
|
|
PFN_XInputGetCapabilities XInputGetCapabilities;
|
|
|
PFN_XInputGetState XInputGetState;
|
|
|
+ DWORD XInputPacketNumber;
|
|
|
#endif
|
|
|
|
|
|
ImGui_ImplWin32_Data() { memset((void*)this, 0, sizeof(*this)); }
|
|
@@ -355,6 +357,9 @@ static void ImGui_ImplWin32_UpdateGamepads(ImGuiIO& io)
|
|
|
if (!bd->HasGamepad || bd->XInputGetState == nullptr || bd->XInputGetState(0, &xinput_state) != ERROR_SUCCESS)
|
|
|
return;
|
|
|
io.BackendFlags |= ImGuiBackendFlags_HasGamepad;
|
|
|
+ if (bd->XInputPacketNumber != 0 && bd->XInputPacketNumber == xinput_state.dwPacketNumber)
|
|
|
+ return;
|
|
|
+ bd->XInputPacketNumber = xinput_state.dwPacketNumber;
|
|
|
|
|
|
#define IM_SATURATE(V) (V < 0.0f ? 0.0f : V > 1.0f ? 1.0f : V)
|
|
|
#define MAP_BUTTON(KEY_NO, BUTTON_ENUM) { io.AddKeyEvent(KEY_NO, (gamepad.wButtons & BUTTON_ENUM) != 0); }
|