GuiTextBoxMulti now will also break lines when encountering a newline character (#97)

* Fix for issue #94: infinite loop on space-free sequences in text that are wider than textbox bounds

marked no lastSpacePos as -1.
check for a space-char had to come earlier than check for width overrun.
if no space found in this line but line too wide, wrap sequence and start new line with textWidth of last character.
reset lastSpacePos on every new line.

* GuiTextBoxMulti now will also break when encountering a newline character

Co-authored-by: Ray <raysan5@gmail.com>
This commit is contained in:
Paul Brüll 2020-07-04 11:30:33 +02:00 committed by GitHub
parent 4eda62925c
commit 6d2d6819fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 8 deletions

View File

@ -92,7 +92,9 @@ RAYGUIDEF bool GuiTextBoxEx(Rectangle bounds, char *text, int textSize, bool edi
#if defined(GUI_TEXTBOX_EXTENDED_IMPLEMENTATION)
#ifndef RAYGUI_H
#include "raygui.h"
#endif
//----------------------------------------------------------------------------------
// Defines and Macros

View File

@ -1768,26 +1768,24 @@ bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode)
// Calculate cursor position considering text
char oneCharText[2] = { 0 };
int lastSpacePos = -1;
int lastBreakingPos = -1;
for (int i = 0; i < keyCount && currentLine < keyCount; i++)
{
oneCharText[0] = text[i];
textWidth += (GetTextWidth(oneCharText) + GuiGetStyle(DEFAULT, TEXT_SPACING));
if (text[i] == ' ') lastSpacePos = i;
if (text[i] == ' ' || text[i] == '\n') lastBreakingPos = i;
if (textWidth >= textAreaBounds.width)
if ( text[i] == '\n' || textWidth >= textAreaBounds.width)
{
currentLine++;
textWidth = 0;
if(lastSpacePos > 0)
i = lastSpacePos;
else
textWidth += (GetTextWidth(oneCharText) + GuiGetStyle(DEFAULT, TEXT_SPACING));
if (lastBreakingPos > 0) i = lastBreakingPos;
else textWidth += (GetTextWidth(oneCharText) + GuiGetStyle(DEFAULT, TEXT_SPACING));
lastSpacePos = -1;
lastBreakingPos = -1;
}
}