Browse Source

IO: Added simple (incomplete) filter for duplicates to reduce data spam. (#4921, #4858)

ocornut 3 years ago
parent
commit
9def2b04d7
1 changed files with 13 additions and 0 deletions
  1. 13 0
      imgui.cpp

+ 13 - 0
imgui.cpp

@@ -1280,6 +1280,19 @@ void ImGuiIO::AddKeyAnalogEvent(ImGuiKey key, bool down, float analog_value)
     if (ImGui::IsGamepadKey(key))
     if (ImGui::IsGamepadKey(key))
         BackendUsingLegacyNavInputArray = false;
         BackendUsingLegacyNavInputArray = false;
 
 
+    // Partial filter of duplicates (not strictly needed, but makes data neater in particular for key mods and gamepad values which are most commonly spmamed)
+    ImGuiKeyData* key_data = ImGui::GetKeyData(key);
+    if (key_data->Down == down && key_data->AnalogValue == analog_value)
+    {
+        bool found = false;
+        for (int n = g.InputEventsQueue.Size - 1; n >= 0 && !found; n--)
+            if (g.InputEventsQueue[n].Type == ImGuiInputEventType_Key && g.InputEventsQueue[n].Key.Key == key)
+                found = true;
+        if (!found)
+            return;
+    }
+
+    // Add event
     ImGuiInputEvent e;
     ImGuiInputEvent e;
     e.Type = ImGuiInputEventType_Key;
     e.Type = ImGuiInputEventType_Key;
     e.Source = ImGui::IsGamepadKey(key) ? ImGuiInputSource_Gamepad : ImGuiInputSource_Keyboard;
     e.Source = ImGui::IsGamepadKey(key) ? ImGuiInputSource_Gamepad : ImGuiInputSource_Keyboard;