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

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);