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

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.
This commit is contained in:
Paul Brüll 2020-06-20 17:51:46 +02:00 committed by GitHub
parent 3e61557f25
commit 4eda62925c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1768,21 +1768,27 @@ bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode)
// Calculate cursor position considering text
char oneCharText[2] = { 0 };
int lastSpacePos = 0;
int lastSpacePos = -1;
for (int i = 0; i < keyCount; i++)
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 (textWidth >= textAreaBounds.width)
{
currentLine++;
textWidth = 0;
i = lastSpacePos;
}
if (text[i] == ' ') lastSpacePos = i;
if(lastSpacePos > 0)
i = lastSpacePos;
else
textWidth += (GetTextWidth(oneCharText) + GuiGetStyle(DEFAULT, TEXT_SPACING));
lastSpacePos = -1;
}
}
cursor.x = bounds.x + GuiGetStyle(TEXTBOX, BORDER_WIDTH) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING) + textWidth - GuiGetStyle(DEFAULT, TEXT_SPACING);