MCPcopy Create free account
hub / github.com/KebsCS/KBotExt / InputTextEx

Method InputTextEx

KBotExt/imgui/imgui_widgets.cpp:4072–5011  ·  view source on GitHub ↗

Edit a string of text - buf_size account for the zero-terminator, so a buf_size of 6 can hold "Hello" but not "Hello!". This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match Note that in std::string world, capacity() would omit 1 byte used by the zero-terminator. - When active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf

Source from the content-addressed store, hash-verified

4070// (FIXME: Rather confusing and messy function, among the worse part of our codebase, expecting to rewrite a V2 at some point.. Partly because we are
4071// doing UTF8 > U16 > UTF8 conversions on the go to easily interface with stb_textedit. Ideally should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188)
4072bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* callback_user_data)
4073{
4074 ImGuiWindow* window = GetCurrentWindow();
4075 if (window->SkipItems)
4076 return false;
4077
4078 IM_ASSERT(buf != NULL && buf_size >= 0);
4079 IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackHistory) && (flags & ImGuiInputTextFlags_Multiline))); // Can't use both together (they both use up/down keys)
4080 IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackCompletion) && (flags & ImGuiInputTextFlags_AllowTabInput))); // Can't use both together (they both use tab key)
4081
4082 ImGuiContext& g = *GImGui;
4083 ImGuiIO& io = g.IO;
4084 const ImGuiStyle& style = g.Style;
4085
4086 const bool RENDER_SELECTION_WHEN_INACTIVE = false;
4087 const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
4088 const bool is_readonly = (flags & ImGuiInputTextFlags_ReadOnly) != 0;
4089 const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
4090 const bool is_undoable = (flags & ImGuiInputTextFlags_NoUndoRedo) == 0;
4091 const bool is_resizable = (flags & ImGuiInputTextFlags_CallbackResize) != 0;
4092 if (is_resizable)
4093 IM_ASSERT(callback != NULL); // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag!
4094
4095 if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope (including the scrollbar)
4096 BeginGroup();
4097 const ImGuiID id = window->GetID(label);
4098 const ImVec2 label_size = CalcTextSize(label, NULL, true);
4099 const ImVec2 frame_size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y * 2.0f); // Arbitrary default of 8 lines high for multi-line
4100 const ImVec2 total_size = ImVec2(frame_size.x + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), frame_size.y);
4101
4102 const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
4103 const ImRect total_bb(frame_bb.Min, frame_bb.Min + total_size);
4104
4105 ImGuiWindow* draw_window = window;
4106 ImVec2 inner_size = frame_size;
4107 ImGuiItemStatusFlags item_status_flags = 0;
4108 ImGuiLastItemData item_data_backup;
4109 if (is_multiline)
4110 {
4111 ImVec2 backup_pos = window->DC.CursorPos;
4112 ItemSize(total_bb, style.FramePadding.y);
4113 if (!ItemAdd(total_bb, id, &frame_bb, ImGuiItemFlags_Inputable))
4114 {
4115 EndGroup();
4116 return false;
4117 }
4118 item_status_flags = g.LastItemData.StatusFlags;
4119 item_data_backup = g.LastItemData;
4120 window->DC.CursorPos = backup_pos;
4121
4122 // We reproduce the contents of BeginChildFrame() in order to provide 'label' so our window internal data are easier to read/debug.
4123 // FIXME-NAV: Pressing NavActivate will trigger general child activation right before triggering our own below. Harmless but bizarre.
4124 PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
4125 PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
4126 PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
4127 PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); // Ensure no clip rect so mouse hover can reach FramePadding edges
4128 bool child_visible = BeginChildEx(label, id, frame_bb.GetSize(), true, ImGuiWindowFlags_NoMove);
4129 PopStyleVar(3);

Callers

nothing calls this directly

Calls 15

GetCurrentWindowFunction · 0.85
ImVec2Function · 0.85
ItemSizeFunction · 0.85
GetInputTextStateFunction · 0.85
ImTextStrFromUtf8Function · 0.85
stb_textedit_clickFunction · 0.85
STB_TEXTEDIT_GETCHARFunction · 0.85
stb_textedit_clampFunction · 0.85
ImSwapFunction · 0.85

Tested by

no test coverage detected