mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	InputText: Tweak ImGuiInputTextFlags_EscapeClearsAll handling so decision is taken on input buffer + Showcase a few more InputText() flags. (#5688, #2620)
This makes is more obvious that value_change==true when apply_new_text != NULL.
This commit is contained in:
		| @@ -50,6 +50,7 @@ Other changes: | ||||
|   (what now obsoleted io.ClearInputCharacters() did), as this is effectively the | ||||
|   desirable behavior. | ||||
| - Demo: Better showcase use of SetNextItemAllowOverlap(). (#6574, #6512, #3909, #517) | ||||
| - Demo: Showcase a few more InputText() flags. | ||||
|  | ||||
|  | ||||
| ----------------------------------------------------------------------- | ||||
|   | ||||
| @@ -1484,6 +1484,7 @@ static void ShowDemoWindowWidgets() | ||||
|             ImGui::TreePop(); | ||||
|         } | ||||
|  | ||||
|         IMGUI_DEMO_MARKER("Widgets/Text Input/Completion, History, Edit Callbacks"); | ||||
|         if (ImGui::TreeNode("Completion, History, Edit Callbacks")) | ||||
|         { | ||||
|             struct Funcs | ||||
| @@ -1583,6 +1584,18 @@ static void ShowDemoWindowWidgets() | ||||
|             ImGui::TreePop(); | ||||
|         } | ||||
|  | ||||
|         IMGUI_DEMO_MARKER("Widgets/Text Input/Miscellaneous"); | ||||
|         if (ImGui::TreeNode("Miscellaneous")) | ||||
|         { | ||||
|             static char buf1[16]; | ||||
|             static ImGuiInputTextFlags flags = ImGuiInputTextFlags_EscapeClearsAll; | ||||
|             ImGui::CheckboxFlags("ImGuiInputTextFlags_EscapeClearsAll", &flags, ImGuiInputTextFlags_EscapeClearsAll); | ||||
|             ImGui::CheckboxFlags("ImGuiInputTextFlags_ReadOnly", &flags, ImGuiInputTextFlags_ReadOnly); | ||||
|             ImGui::CheckboxFlags("ImGuiInputTextFlags_NoUndoRedo", &flags, ImGuiInputTextFlags_NoUndoRedo); | ||||
|             ImGui::InputText("Hello", buf1, IM_ARRAYSIZE(buf1), flags); | ||||
|             ImGui::TreePop(); | ||||
|         } | ||||
|  | ||||
|         ImGui::TreePop(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -4493,7 +4493,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | ||||
|         { | ||||
|             if (flags & ImGuiInputTextFlags_EscapeClearsAll) | ||||
|             { | ||||
|                 if (state->CurLenA > 0) | ||||
|                 if (buf[0] != 0) | ||||
|                 { | ||||
|                     revert_edit = true; | ||||
|                 } | ||||
| @@ -4581,9 +4581,10 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | ||||
|             if (flags & ImGuiInputTextFlags_EscapeClearsAll) | ||||
|             { | ||||
|                 // Clear input | ||||
|                 IM_ASSERT(buf[0] != 0); | ||||
|                 apply_new_text = ""; | ||||
|                 apply_new_text_length = 0; | ||||
|                 value_changed |= (buf[0] != 0); | ||||
|                 value_changed = true; | ||||
|                 STB_TEXTEDIT_CHARTYPE empty_string; | ||||
|                 stb_textedit_replace(state, &state->Stb, &empty_string, 0); | ||||
|             } | ||||
| @@ -4612,9 +4613,12 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | ||||
|             ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL); | ||||
|         } | ||||
|  | ||||
|         // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer before clearing ActiveId, even though strictly speaking it wasn't modified on this frame. | ||||
|         // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer | ||||
|         // before clearing ActiveId, even though strictly speaking it wasn't modified on this frame. | ||||
|         // If we didn't do that, code like InputInt() with ImGuiInputTextFlags_EnterReturnsTrue would fail. | ||||
|         // This also allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage (please note that if you use this property along ImGuiInputTextFlags_CallbackResize you can end up with your temporary string object unnecessarily allocating once a frame, either store your string data, either if you don't then don't use ImGuiInputTextFlags_CallbackResize). | ||||
|         // This also allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage | ||||
|         // (please note that if you use this property along ImGuiInputTextFlags_CallbackResize you can end up with your temporary string object | ||||
|         // unnecessarily allocating once a frame, either store your string data, either if you don't then don't use ImGuiInputTextFlags_CallbackResize). | ||||
|         const bool apply_edit_back_to_user_buffer = !revert_edit || (validated && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0); | ||||
|         if (apply_edit_back_to_user_buffer) | ||||
|         { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user