Browse Source

Text: Fixed layouting of wrapped-text block skipping successive empty lines. (#5720, #5919)

Regression in the bd96f6e fix
ocornut 2 years ago
parent
commit
3482d4eccf
3 changed files with 7 additions and 4 deletions
  1. 2 0
      docs/CHANGELOG.txt
  2. 1 1
      imgui.h
  3. 4 3
      imgui_draw.cpp

+ 2 - 0
docs/CHANGELOG.txt

@@ -37,6 +37,8 @@ HOW TO UPDATE?
 
 
 All changes:
 All changes:
 
 
+- Text: Fixed layouting of wrapped-text block skipping successive empty lines,
+  regression from the fix in 1.89.2. (#5720, #5919)
 - Text: Fix clipping of single-character "..." ellipsis (U+2026 or U+0085) when font
 - Text: Fix clipping of single-character "..." ellipsis (U+2026 or U+0085) when font
   is scaled. Scaling wasn't taken into account, leading to ellipsis character straying
   is scaled. Scaling wasn't taken into account, leading to ellipsis character straying
   slightly out of its expected boundaries. (#2775)
   slightly out of its expected boundaries. (#2775)

+ 1 - 1
imgui.h

@@ -23,7 +23,7 @@
 // Library Version
 // Library Version
 // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM > 12345')
 // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM > 12345')
 #define IMGUI_VERSION               "1.89.3 WIP"
 #define IMGUI_VERSION               "1.89.3 WIP"
-#define IMGUI_VERSION_NUM           18921
+#define IMGUI_VERSION_NUM           18922
 #define IMGUI_HAS_TABLE
 #define IMGUI_HAS_TABLE
 
 
 /*
 /*

+ 4 - 3
imgui_draw.cpp

@@ -3573,18 +3573,19 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, const ImVec2& pos, Im
         while (y + line_height < clip_rect.y && s < text_end)
         while (y + line_height < clip_rect.y && s < text_end)
         {
         {
             const char* line_end = (const char*)memchr(s, '\n', text_end - s);
             const char* line_end = (const char*)memchr(s, '\n', text_end - s);
-            const char* line_next = line_end ? line_end + 1 : text_end;
+            if (!line_end)
+                line_end = text_end;
             if (word_wrap_enabled)
             if (word_wrap_enabled)
             {
             {
                 // FIXME-OPT: This is not optimal as do first do a search for \n before calling CalcWordWrapPositionA().
                 // FIXME-OPT: This is not optimal as do first do a search for \n before calling CalcWordWrapPositionA().
                 // If the specs for CalcWordWrapPositionA() were reworked to optionally return on \n we could combine both.
                 // If the specs for CalcWordWrapPositionA() were reworked to optionally return on \n we could combine both.
                 // However it is still better than nothing performing the fast-forward!
                 // However it is still better than nothing performing the fast-forward!
-                s = CalcWordWrapPositionA(scale, s, line_next, wrap_width);
+                s = CalcWordWrapPositionA(scale, s, line_end, wrap_width);
                 s = CalcWordWrapNextLineStartA(s, text_end);
                 s = CalcWordWrapNextLineStartA(s, text_end);
             }
             }
             else
             else
             {
             {
-                s = line_next;
+                s = line_end + 1;
             }
             }
             y += line_height;
             y += line_height;
         }
         }