Переглянути джерело

ImGuiInputTextFlags_CallbackCharFilter can return 1 to filter character

ocornut 10 роки тому
батько
коміт
2df4735904
2 змінених файлів з 4 додано та 3 видалено
  1. 3 2
      imgui.cpp
  2. 1 1
      imgui.h

+ 3 - 2
imgui.cpp

@@ -5255,7 +5255,8 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f
         callback_data.EventChar = c;
         callback_data.Flags = flags;
         callback_data.UserData = user_data;
-        callback(&callback_data);
+        if (callback(&callback_data) != 0)
+            return false;
         *p_char = callback_data.EventChar;
         if (!callback_data.EventChar)
             return false;
@@ -8352,7 +8353,7 @@ void ImGui::ShowTestWindow(bool* opened)
             static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal);
             static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
             static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase);
-            struct TextFilters { static int FilterNoSpace(ImGuiTextEditCallbackData* data) { if (data->EventChar == ' ') data->EventChar = 0; return 0; } };
+            struct TextFilters { static int FilterNoSpace(ImGuiTextEditCallbackData* data) { if (data->EventChar == ' ') return 1; return 0; } };
             static char buf5[64] = ""; ImGui::InputText("custom: no spaces", buf5, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterNoSpace);
             ImGui::TreePop();
         }

+ 1 - 1
imgui.h

@@ -394,7 +394,7 @@ enum ImGuiInputTextFlags_
     ImGuiInputTextFlags_CallbackCompletion  = 1 << 5,   // Call user function on pressing TAB (for completion handling)
     ImGuiInputTextFlags_CallbackHistory     = 1 << 6,   // Call user function on pressing Up/Down arrows (for history handling)
     ImGuiInputTextFlags_CallbackAlways      = 1 << 7,   // Call user function every time
-    ImGuiInputTextFlags_CallbackCharFilter  = 1 << 8    // Call user function to filter character. Modify data->EventChar to replace/filter input.
+    ImGuiInputTextFlags_CallbackCharFilter  = 1 << 8    // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character.
     //ImGuiInputTextFlags_AlignCenter       = 1 << 6,
 };