mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Internals: InputTextEx() renames for correctness. enter_pressed -> validated, is_validate_enter -> is_enter_pressed
This commit is contained in:
		| @@ -757,6 +757,7 @@ struct ImDrawDataBuilder | |||||||
| // This is going to be exposed in imgui.h when stabilized enough. | // This is going to be exposed in imgui.h when stabilized enough. | ||||||
| enum ImGuiItemFlags_ | enum ImGuiItemFlags_ | ||||||
| { | { | ||||||
|  |     // Controlled by user | ||||||
|     ImGuiItemFlags_None                     = 0, |     ImGuiItemFlags_None                     = 0, | ||||||
|     ImGuiItemFlags_NoTabStop                = 1 << 0,  // false     // Disable keyboard tabbing (FIXME: should merge with _NoNav) |     ImGuiItemFlags_NoTabStop                = 1 << 0,  // false     // Disable keyboard tabbing (FIXME: should merge with _NoNav) | ||||||
|     ImGuiItemFlags_ButtonRepeat             = 1 << 1,  // false     // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings. |     ImGuiItemFlags_ButtonRepeat             = 1 << 1,  // false     // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings. | ||||||
| @@ -766,6 +767,8 @@ enum ImGuiItemFlags_ | |||||||
|     ImGuiItemFlags_SelectableDontClosePopup = 1 << 5,  // false     // Disable MenuItem/Selectable() automatically closing their popup window |     ImGuiItemFlags_SelectableDontClosePopup = 1 << 5,  // false     // Disable MenuItem/Selectable() automatically closing their popup window | ||||||
|     ImGuiItemFlags_MixedValue               = 1 << 6,  // false     // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets) |     ImGuiItemFlags_MixedValue               = 1 << 6,  // false     // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets) | ||||||
|     ImGuiItemFlags_ReadOnly                 = 1 << 7,  // false     // [ALPHA] Allow hovering interactions but underlying value is not changed. |     ImGuiItemFlags_ReadOnly                 = 1 << 7,  // false     // [ALPHA] Allow hovering interactions but underlying value is not changed. | ||||||
|  |  | ||||||
|  |     // Controlled by widget code | ||||||
|     ImGuiItemFlags_Inputable                = 1 << 8   // false     // [WIP] Auto-activate input mode when tab focused. Currently only used and supported by a few items before it becomes a generic feature. |     ImGuiItemFlags_Inputable                = 1 << 8   // false     // [WIP] Auto-activate input mode when tab focused. Currently only used and supported by a few items before it becomes a generic feature. | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3595,7 +3595,7 @@ bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, co | |||||||
|  |  | ||||||
| bool ImGui::InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) | bool ImGui::InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) | ||||||
| { | { | ||||||
|     IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline() |     IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline() or  InputTextEx() manually if you need multi-line + hint. | ||||||
|     return InputTextEx(label, hint, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data); |     return InputTextEx(label, hint, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -4171,7 +4171,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|     const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active); |     const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active); | ||||||
|     bool render_selection = state && (state->HasSelection() || select_all) && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor); |     bool render_selection = state && (state->HasSelection() || select_all) && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor); | ||||||
|     bool value_changed = false; |     bool value_changed = false; | ||||||
|     bool enter_pressed = false; |     bool validated = false; | ||||||
|  |  | ||||||
|     // When read-only we always use the live data passed to the function |     // When read-only we always use the live data passed to the function | ||||||
|     // FIXME-OPT: Because our selection/cursor code currently needs the wide text we need to convert it when active, which is not ideal :( |     // FIXME-OPT: Because our selection/cursor code currently needs the wide text we need to convert it when active, which is not ideal :( | ||||||
| @@ -4338,7 +4338,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|         const bool is_redo  = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressed(ImGuiKey_Z))) && !is_readonly && is_undoable; |         const bool is_redo  = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressed(ImGuiKey_Z))) && !is_readonly && is_undoable; | ||||||
|  |  | ||||||
|         // We allow validate/cancel with Nav source (gamepad) to makes it easier to undo an accidental NavInput press with no keyboard wired, but otherwise it isn't very useful. |         // We allow validate/cancel with Nav source (gamepad) to makes it easier to undo an accidental NavInput press with no keyboard wired, but otherwise it isn't very useful. | ||||||
|         const bool is_validate_enter = IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_KeypadEnter); |         const bool is_enter_pressed = IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_KeypadEnter); | ||||||
|         const bool is_validate_nav = (IsNavInputTest(ImGuiNavInput_Activate, ImGuiNavReadMode_Pressed) && !IsKeyPressed(ImGuiKey_Space)) || IsNavInputTest(ImGuiNavInput_Input, ImGuiNavReadMode_Pressed); |         const bool is_validate_nav = (IsNavInputTest(ImGuiNavInput_Activate, ImGuiNavReadMode_Pressed) && !IsKeyPressed(ImGuiKey_Space)) || IsNavInputTest(ImGuiNavInput_Input, ImGuiNavReadMode_Pressed); | ||||||
|         const bool is_cancel = IsKeyPressed(ImGuiKey_Escape) || IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed); |         const bool is_cancel = IsKeyPressed(ImGuiKey_Escape) || IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed); | ||||||
|  |  | ||||||
| @@ -4362,12 +4362,13 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|             } |             } | ||||||
|             state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); |             state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); | ||||||
|         } |         } | ||||||
|         else if (is_validate_enter) |         else if (is_enter_pressed) | ||||||
|         { |         { | ||||||
|  |             // Determine if we turn Enter into a \n character | ||||||
|             bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0; |             bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0; | ||||||
|             if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl)) |             if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl)) | ||||||
|             { |             { | ||||||
|                 enter_pressed = clear_active_id = true; |                 validated = clear_active_id = true; | ||||||
|             } |             } | ||||||
|             else if (!is_readonly) |             else if (!is_readonly) | ||||||
|             { |             { | ||||||
| @@ -4378,8 +4379,8 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|         } |         } | ||||||
|         else if (is_validate_nav) |         else if (is_validate_nav) | ||||||
|         { |         { | ||||||
|             IM_ASSERT(!is_validate_enter); |             IM_ASSERT(!is_enter_pressed); | ||||||
|             enter_pressed = clear_active_id = true; |             validated = clear_active_id = true; | ||||||
|         } |         } | ||||||
|         else if (is_cancel) |         else if (is_cancel) | ||||||
|         { |         { | ||||||
| @@ -4483,7 +4484,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|         // 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. |         // 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 = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0); |         const bool apply_edit_back_to_user_buffer = !cancel_edit || (validated && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0); | ||||||
|         if (apply_edit_back_to_user_buffer) |         if (apply_edit_back_to_user_buffer) | ||||||
|         { |         { | ||||||
|             // Apply new value immediately - copy modified buffer back |             // Apply new value immediately - copy modified buffer back | ||||||
| @@ -4859,7 +4860,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|  |  | ||||||
|     IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags); |     IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags); | ||||||
|     if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0) |     if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0) | ||||||
|         return enter_pressed; |         return validated; | ||||||
|     else |     else | ||||||
|         return value_changed; |         return value_changed; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user