diff --git a/imgui_draw.cpp b/imgui_draw.cpp index f0cb2613c..cadc0951b 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -5358,8 +5358,7 @@ const char* ImTextCalcWordWrapNextLineStart(const char* text, const char* text_e // Simple word-wrapping for English, not full-featured. Please submit failing cases! // This will return the next location to wrap from. If no wrapping if necessary, this will fast-forward to e.g. text_end. // FIXME: Much possible improvements (don't cut things like "word !", "word!!!" but cut within "word,,,,", more sensible support for punctuations, support for Unicode punctuations, etc.) -const char* ImFontCalcWordWrapPositionEx(ImFont* font, float size, const char* text, const char* text_end, float wrap_width) -//, ImDrawTextFlags flags) +const char* ImFontCalcWordWrapPositionEx(ImFont* font, float size, const char* text, const char* text_end, float wrap_width, ImDrawTextFlags flags) { // For references, possible wrap point marked with ^ // "aaa bbb, ccc,ddd. eee fff. ggg!" @@ -5434,6 +5433,8 @@ const char* ImFontCalcWordWrapPositionEx(ImFont* font, float size, const char* t { prev_word_end = word_end; line_width += word_width + blank_width; + if ((flags & ImDrawTextFlags_WrapKeepBlanks) && line_width <= wrap_width) + prev_word_end = s; word_width = blank_width = 0.0f; } @@ -5462,7 +5463,7 @@ const char* ImFontCalcWordWrapPositionEx(ImFont* font, float size, const char* t const char* ImFont::CalcWordWrapPosition(float size, const char* text, const char* text_end, float wrap_width) { - return ImFontCalcWordWrapPositionEx(this, size, text, text_end, wrap_width); + return ImFontCalcWordWrapPositionEx(this, size, text, text_end, wrap_width, ImDrawTextFlags_None); } ImVec2 ImFontCalcTextSizeEx(ImFont* font, float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** out_remaining) diff --git a/imgui_internal.h b/imgui_internal.h index 8cb091bb0..258e44461 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -199,6 +199,7 @@ typedef int ImGuiDataAuthority; // -> enum ImGuiDataAuthority_ // E typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical // Flags +typedef int ImDrawTextFlags; // -> enum ImDrawTextFlags_ // Flags: for ImTextCalcWordWrapPositionEx() typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later) typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags typedef int ImGuiFocusRequestFlags; // -> enum ImGuiFocusRequestFlags_ // Flags: for FocusWindow() @@ -441,8 +442,13 @@ IMGUI_API const char* ImTextFindPreviousUtf8Codepoint(const char* in_text_star IMGUI_API int ImTextCountLines(const char* in_text, const char* in_text_end); // return number of lines taken by text. trailing carriage return doesn't count as an extra line. // Helpers: High-level text functions (DO NOT USE!!! THIS IS A MINIMAL SUBSET OF LARGER UPCOMING CHANGES) +enum ImDrawTextFlags_ +{ + ImDrawTextFlags_None = 0, + ImDrawTextFlags_WrapKeepBlanks = 1 << 1, +}; IMGUI_API ImVec2 ImFontCalcTextSizeEx(ImFont* font, float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** out_remaining); -IMGUI_API const char* ImFontCalcWordWrapPositionEx(ImFont* font, float size, const char* text, const char* text_end, float wrap_width); +IMGUI_API const char* ImFontCalcWordWrapPositionEx(ImFont* font, float size, const char* text, const char* text_end, float wrap_width, ImDrawTextFlags flags = 0); IMGUI_API const char* ImTextCalcWordWrapNextLineStart(const char* text, const char* text_end); // trim trailing space and find beginning of next line // Helpers: File System