mirror of
https://github.com/raysan5/raygui.git
synced 2025-12-25 10:22:33 -05:00
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:
@ -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
|
||||
|
||||
14
src/raygui.h
14
src/raygui.h
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user