From 8289e5f6b4f3b678f568192009b657f3489d9805 Mon Sep 17 00:00:00 2001 From: omar Date: Fri, 30 Nov 2018 23:47:23 +0100 Subject: [PATCH] Fixed a text rendering/clipping bug introduced in 1.66 (on 2018-10-12, commit ede3a3b9) that affect single ImDrawList::AddText() calls with single strings larger than 10k. Text/TextUnformatted() calls were not affected, but e.g. InputText() was. --- docs/CHANGELOG.txt | 2 ++ imgui_demo.cpp | 2 ++ imgui_draw.cpp | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 3c33a94f..7e300fbe 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -37,6 +37,8 @@ Breaking Changes: Other Changes: +- Fixed a text rendering/clipping bug introduced in 1.66 (on 2018-10-12, commit ede3a3b9) that affect single ImDrawList::AddText() + calls with single strings larger than 10k. Text/TextUnformatted() calls were not affected, but e.g. InputText() was. [@pdoane] - When the focused window become inactive don't restore focus to a window with the ImGuiWindowFlags_NoInputs flag. (#2213) [@zzzyap] - Separator: Fixed Separator() outputting an extraneous empty line when captured into clipboard/text/file. - Demo: Added ShowAboutWindow() call, previously was only accessible from the demo window. diff --git a/imgui_demo.cpp b/imgui_demo.cpp index bd7a2bc7..a1b7f4ae 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -913,6 +913,8 @@ static void ShowDemoWindowWidgets() if (ImGui::TreeNode("Multi-line Text Input")) { + // Note: we are using a fixed-sized buffer for simplicity here. See ImGuiInputTextFlags_CallbackResize + // and the code in misc/cpp/imgui_stdlib.h for how to setup InputText() for dynamically resizing strings. static bool read_only = false; static char text[1024*16] = "/*\n" diff --git a/imgui_draw.cpp b/imgui_draw.cpp index 6c82015a..1b29a1d9 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -2662,7 +2662,7 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col while (y_end < clip_rect.w && s_end < text_end) { s_end = (const char*)memchr(s_end, '\n', text_end - s_end); - s = s ? s + 1 : text_end; + s_end = s_end ? s_end + 1 : text_end; y_end += line_height; } text_end = s_end;