1
0
mirror of https://github.com/ocornut/imgui.git synced 2024-12-18 18:46:13 +01:00

InputText: reactivating last activated InputText() doesn't restore horizontal scrolling.

Honestly not sure if the opposite is preferable or not (added commented out in the inactivate render path to test that).
Current behavior added along with recycling: f9928e96c7
This commit is contained in:
ocornut 2024-12-09 14:26:53 +01:00
parent f3147f446a
commit d2645423de
2 changed files with 5 additions and 2 deletions

View File

@ -58,6 +58,8 @@ Other changes:
processing errors outside of the NewFrame()..EndFrame() scope. (#1651) processing errors outside of the NewFrame()..EndFrame() scope. (#1651)
- Tables: fixed SetNextWindowScroll() value being ignored by BeginTable() during - Tables: fixed SetNextWindowScroll() value being ignored by BeginTable() during
the first frame or when scrolling flags have changed. (#8196) the first frame or when scrolling flags have changed. (#8196)
- InputText: reactivating last activated InputText() doesn't restore horizontal scrolling
(which was disabled during deactivation anyway).
- Misc: changed embedded ProggyClean encoding to save a bit of binary space (~12kb to 9.5kb). - Misc: changed embedded ProggyClean encoding to save a bit of binary space (~12kb to 9.5kb).
- Misc: added IMGUI_DISABLE_DEFAULT_FONT to strip embedded font from binary. (#8161) - Misc: added IMGUI_DISABLE_DEFAULT_FONT to strip embedded font from binary. (#8161)
[@demonese] [@demonese]

View File

@ -4537,6 +4537,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
state->TextA.resize(buf_size + 1); // we use +1 to make sure that .Data is always pointing to at least an empty string. state->TextA.resize(buf_size + 1); // we use +1 to make sure that .Data is always pointing to at least an empty string.
state->TextLen = (int)strlen(buf); state->TextLen = (int)strlen(buf);
memcpy(state->TextA.Data, buf, state->TextLen + 1); memcpy(state->TextA.Data, buf, state->TextLen + 1);
state->Scroll = ImVec2(0.0f, 0.0f);
if (recycle_state) if (recycle_state)
{ {
@ -4546,7 +4547,6 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
} }
else else
{ {
state->Scroll = ImVec2(0.0f, 0.0f);
stb_textedit_initialize_state(state->Stb, !is_multiline); stb_textedit_initialize_state(state->Stb, !is_multiline);
} }
@ -5287,8 +5287,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length) if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
{ {
const ImVec2 draw_scroll = /*state ? ImVec2(state->Scroll.x, 0.0f) :*/ ImVec2(0.0f, 0.0f); // Preserve scroll when inactive?
ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text); ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect); draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos - draw_scroll, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
} }
} }