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

Function STB_TEXTEDIT_INSERTCHARS

KBotExt/imgui/imgui_widgets.cpp:3761–3791  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3759 }
3760
3761 static bool STB_TEXTEDIT_INSERTCHARS(ImGuiInputTextState* obj, int pos, const ImWchar* new_text, int new_text_len)
3762 {
3763 const bool is_resizable = (obj->Flags & ImGuiInputTextFlags_CallbackResize) != 0;
3764 const int text_len = obj->CurLenW;
3765 IM_ASSERT(pos <= text_len);
3766
3767 const int new_text_len_utf8 = ImTextCountUtf8BytesFromStr(new_text, new_text + new_text_len);
3768 if (!is_resizable && (new_text_len_utf8 + obj->CurLenA + 1 > obj->BufCapacityA))
3769 return false;
3770
3771 // Grow internal buffer if needed
3772 if (new_text_len + text_len + 1 > obj->TextW.Size)
3773 {
3774 if (!is_resizable)
3775 return false;
3776 IM_ASSERT(text_len < obj->TextW.Size);
3777 obj->TextW.resize(text_len + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1);
3778 }
3779
3780 ImWchar* text = obj->TextW.Data;
3781 if (pos != text_len)
3782 memmove(text + pos + new_text_len, text + pos, (size_t)(text_len - pos) * sizeof(ImWchar));
3783 memcpy(text + pos, new_text, (size_t)new_text_len * sizeof(ImWchar));
3784
3785 obj->Edited = true;
3786 obj->CurLenW += new_text_len;
3787 obj->CurLenA += new_text_len_utf8;
3788 obj->TextW[obj->CurLenW] = '\0';
3789
3790 return true;
3791 }
3792
3793 // We don't use an enum so we can build even with conflicting symbols (if another user of stb_textedit.h leak their STB_TEXTEDIT_K_* symbols)
3794#define STB_TEXTEDIT_K_LEFT 0x200000 // keyboard input to move cursor left

Callers 5

stb_textedit_keyFunction · 0.85
stb_text_undoFunction · 0.85
stb_text_redoFunction · 0.85
stb_textedit_replaceFunction · 0.85

Calls 3

ImClampFunction · 0.85
ImMaxFunction · 0.85

Tested by

no test coverage detected