mirror of
https://github.com/raysan5/raygui.git
synced 2026-02-03 12:49:17 -05:00
GuiTextBoxMulti review
This commit is contained in:
@ -40,12 +40,12 @@ int main()
|
|||||||
char TextBox003Text[64] = "SAMPLE TEXT";
|
char TextBox003Text[64] = "SAMPLE TEXT";
|
||||||
int ListView004Active = 0;
|
int ListView004Active = 0;
|
||||||
const char *ListView004TextList[3] = { "ONE", "TWO", "THREE" };
|
const char *ListView004TextList[3] = { "ONE", "TWO", "THREE" };
|
||||||
char TextBox006Text[64] = "SAMPLE TEXT";
|
char TextBox006Text[128] = "SAMPLE TEXT";
|
||||||
|
|
||||||
|
|
||||||
bool spinnerEditMode = false;
|
bool spinnerEditMode = false;
|
||||||
bool valueBoxEditMode = false;
|
bool valueBoxEditMode = false;
|
||||||
bool textBoxEditMode = false;
|
bool textBoxEditMode = false;
|
||||||
|
bool multiTextBoxEditMode = false;
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
SetTargetFPS(60);
|
SetTargetFPS(60);
|
||||||
@ -64,7 +64,7 @@ int main()
|
|||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(GetColor(style[DEFAULT_BACKGROUND_COLOR]));
|
ClearBackground(GetColor(style[DEFAULT_BACKGROUND_COLOR]));
|
||||||
|
|
||||||
// raygui: controls drawing
|
// raygui: controls drawing
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
DropdownBox000Active = GuiDropdownBox((Rectangle){ 25, 25, 125, 30 }, DropdownBox000TextList, 3, DropdownBox000Active);
|
DropdownBox000Active = GuiDropdownBox((Rectangle){ 25, 25, 125, 30 }, DropdownBox000TextList, 3, DropdownBox000Active);
|
||||||
@ -75,7 +75,7 @@ int main()
|
|||||||
ListView004Active = GuiListView((Rectangle){ 175, 25, 125, 325 }, ListView004TextList, 3, ListView004Active);
|
ListView004Active = GuiListView((Rectangle){ 175, 25, 125, 325 }, ListView004TextList, 3, ListView004Active);
|
||||||
if (GuiButton((Rectangle){ 25, 225, 125, 30 }, "SAMPLE TEXT")) Button005();
|
if (GuiButton((Rectangle){ 25, 225, 125, 30 }, "SAMPLE TEXT")) Button005();
|
||||||
|
|
||||||
GuiTextBoxMulti((Rectangle){ 325, 25, 225, 175 }, TextBox006Text, 64, true);
|
if (GuiTextBoxMulti((Rectangle){ 325, 25, 225, 175 }, TextBox006Text, 128, multiTextBoxEditMode)) multiTextBoxEditMode = !multiTextBoxEditMode;;
|
||||||
//GuiScrollPanel((Rectangle){ 325, 225, 225, 125 }, "SAMPLE TEXT");
|
//GuiScrollPanel((Rectangle){ 325, 225, 225, 125 }, "SAMPLE TEXT");
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
187
src/raygui.h
187
src/raygui.h
@ -124,9 +124,11 @@
|
|||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Defines and Macros
|
// Defines and Macros
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
#define NUM_PROPERTIES 155
|
#define NUM_PROPERTIES 155
|
||||||
#define VALIGN_OFFSET(h) ((int)h%2) // Vertical alignment for pixel perfect
|
#define VALIGN_OFFSET(h) ( (int)h%2) // Vertical alignment for pixel perfect
|
||||||
#define BACKSPACE_FRAMES 20
|
#define LINE_BLINK_FRAMES 20
|
||||||
|
#define DEFAULT_TEXT_PADDING 4
|
||||||
|
#define DEFAULT_TEXT_LINE_PADDING 5
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Types and Structures Definition
|
// Types and Structures Definition
|
||||||
// NOTE: Some types are required for RAYGUI_STANDALONE usage
|
// NOTE: Some types are required for RAYGUI_STANDALONE usage
|
||||||
@ -1766,16 +1768,15 @@ RAYGUIDEF bool GuiSpinner(Rectangle bounds, int *value, int minValue, int maxVal
|
|||||||
// NOTE: Requires static variables: framesCounter
|
// NOTE: Requires static variables: framesCounter
|
||||||
RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxValue, bool editMode)
|
RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxValue, bool editMode)
|
||||||
{
|
{
|
||||||
//#define GUIVALUEBOX_LINE_PADDING 2
|
|
||||||
#define GUIVALUEBOX_CHAR_COUNT 8
|
#define GUIVALUEBOX_CHAR_COUNT 8
|
||||||
#define LINE_PADDING 2
|
|
||||||
#define PADDING 4
|
|
||||||
|
|
||||||
bool pressed = false;
|
bool pressed = false;
|
||||||
|
|
||||||
GuiControlState state = guiState;
|
GuiControlState state = guiState;
|
||||||
static int framesCounter = 0; // Required for blinking cursor
|
static int framesCounter = 0;
|
||||||
|
// Required for blinking cursor
|
||||||
char text[GUIVALUEBOX_CHAR_COUNT + 1] = "\0";
|
char text[GUIVALUEBOX_CHAR_COUNT + 1] = "\0";
|
||||||
|
|
||||||
sprintf(text, "%i", *value);
|
sprintf(text, "%i", *value);
|
||||||
|
|
||||||
int textWidth = MeasureText(text, style[DEFAULT_TEXT_SIZE]);
|
int textWidth = MeasureText(text, style[DEFAULT_TEXT_SIZE]);
|
||||||
@ -1797,7 +1798,7 @@ RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxVa
|
|||||||
int key = GetKeyPressed();
|
int key = GetKeyPressed();
|
||||||
int keyCount = strlen(text);
|
int keyCount = strlen(text);
|
||||||
|
|
||||||
// NOTE: Only allow keys in range [32..125]
|
// NOTE: Only allow keys in range [48..57]
|
||||||
|
|
||||||
if ((key >= 48) && (key <= 57) && (keyCount < GUIVALUEBOX_CHAR_COUNT))
|
if ((key >= 48) && (key <= 57) && (keyCount < GUIVALUEBOX_CHAR_COUNT))
|
||||||
{
|
{
|
||||||
@ -1814,12 +1815,12 @@ RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxVa
|
|||||||
}
|
}
|
||||||
else if ((keyCount > 0) && IsKeyDown(KEY_BACKSPACE_TEXT))
|
else if ((keyCount > 0) && IsKeyDown(KEY_BACKSPACE_TEXT))
|
||||||
{
|
{
|
||||||
if ((framesCounter > BACKSPACE_FRAMES) && (framesCounter%2) == 0) keyCount--;
|
if ((framesCounter > LINE_BLINK_FRAMES) && (framesCounter%2) == 0) keyCount--;
|
||||||
text[keyCount] = '\0';
|
text[keyCount] = '\0';
|
||||||
if (keyCount < 0) keyCount = 0;
|
if (keyCount < 0) keyCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
*value = atoi(text);
|
*value = atoi(text);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1828,15 +1829,16 @@ RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxVa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Note: Changing editMode
|
// Note: Changing editMode
|
||||||
if (CheckCollisionPointRec(mousePoint, bounds))
|
if (!editMode)
|
||||||
{
|
{
|
||||||
if (!editMode && (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(0))) pressed = true;
|
if (CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(0)) pressed = true;
|
||||||
else if (IsKeyPressed(KEY_ENTER)) pressed = true;
|
|
||||||
}
|
}
|
||||||
else if (editMode)
|
else
|
||||||
{
|
{
|
||||||
if (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(0)) pressed = true;
|
if (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(0)) pressed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pressed) framesCounter = 0;
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
@ -1856,7 +1858,7 @@ RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxVa
|
|||||||
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[VALUEBOX_BASE_COLOR_FOCUSED]), guiAlpha));
|
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[VALUEBOX_BASE_COLOR_FOCUSED]), guiAlpha));
|
||||||
DrawText(text, bounds.x + bounds.width/2 - textWidth/2, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2 + VALIGN_OFFSET(bounds.height), style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[VALUEBOX_TEXT_COLOR_FOCUSED]), guiAlpha));
|
DrawText(text, bounds.x + bounds.width/2 - textWidth/2, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2 + VALIGN_OFFSET(bounds.height), style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[VALUEBOX_TEXT_COLOR_FOCUSED]), guiAlpha));
|
||||||
|
|
||||||
if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + LINE_PADDING + bounds.width/2 + textWidth/2, bounds.y + LINE_PADDING/2, 1, bounds.height - LINE_PADDING, Fade(GetColor(style[TEXTBOX_BORDER_COLOR_FOCUSED]), guiAlpha));
|
if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + 2 /*+ DEFAULT_TEXT_LINE_PADDING */+ MeasureText(text, style[DEFAULT_TEXT_SIZE])/2 + bounds.width/2, bounds.y + DEFAULT_TEXT_LINE_PADDING/2, 1, bounds.height - DEFAULT_TEXT_LINE_PADDING, Fade(GetColor(style[TEXTBOX_BORDER_COLOR_FOCUSED]), guiAlpha));
|
||||||
} break;
|
} break;
|
||||||
case PRESSED: break; // NOTE: State not used on this control
|
case PRESSED: break; // NOTE: State not used on this control
|
||||||
case DISABLED:
|
case DISABLED:
|
||||||
@ -1877,9 +1879,6 @@ RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxVa
|
|||||||
// NOTE 2: Returns if KEY_ENTER pressed (useful for data validation)
|
// NOTE 2: Returns if KEY_ENTER pressed (useful for data validation)
|
||||||
RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode)
|
RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode)
|
||||||
{
|
{
|
||||||
#define GUITEXTBOX_PADDING 4
|
|
||||||
#define GUITEXTBOX_LINE_PADDING 4
|
|
||||||
|
|
||||||
GuiControlState state = guiState;
|
GuiControlState state = guiState;
|
||||||
static int framesCounter = 0; // Required for blinking cursor
|
static int framesCounter = 0; // Required for blinking cursor
|
||||||
bool pressed = false;
|
bool pressed = false;
|
||||||
@ -1902,7 +1901,7 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM
|
|||||||
int keyCount = strlen(text);
|
int keyCount = strlen(text);
|
||||||
|
|
||||||
// NOTE: Only allow keys in range [32..125]
|
// NOTE: Only allow keys in range [32..125]
|
||||||
if ((key >= 32) && (key <= 125) && (keyCount < textSize))
|
if ((key >= 32) && (key <= 125) && (keyCount < (textSize - 1)))
|
||||||
{
|
{
|
||||||
text[keyCount] = (char)key;
|
text[keyCount] = (char)key;
|
||||||
keyCount++;
|
keyCount++;
|
||||||
@ -1917,22 +1916,23 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM
|
|||||||
}
|
}
|
||||||
else if ((keyCount > 0) && IsKeyDown(KEY_BACKSPACE_TEXT))
|
else if ((keyCount > 0) && IsKeyDown(KEY_BACKSPACE_TEXT))
|
||||||
{
|
{
|
||||||
if ((framesCounter > BACKSPACE_FRAMES) && (framesCounter%2) == 0) keyCount--;
|
if ((framesCounter > LINE_BLINK_FRAMES) && (framesCounter%2) == 0) keyCount--;
|
||||||
text[keyCount] = '\0';
|
text[keyCount] = '\0';
|
||||||
if (keyCount < 0) keyCount = 0;
|
if (keyCount < 0) keyCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: Changing editMode
|
// Note: Changing editMode
|
||||||
if (CheckCollisionPointRec(mousePoint, bounds))
|
if (!editMode)
|
||||||
{
|
{
|
||||||
if (!editMode && (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(0))) pressed = true;
|
if (CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(0)) pressed = true;
|
||||||
else if (IsKeyPressed(KEY_ENTER)) pressed = true;
|
|
||||||
}
|
}
|
||||||
else if (editMode)
|
else
|
||||||
{
|
{
|
||||||
if (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(0)) pressed = true;
|
if (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(0)) pressed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pressed) framesCounter = 0;
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
@ -1944,22 +1944,22 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM
|
|||||||
{
|
{
|
||||||
DrawRectangleLinesEx(bounds, style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BORDER_COLOR_NORMAL]), guiAlpha));
|
DrawRectangleLinesEx(bounds, style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BORDER_COLOR_NORMAL]), guiAlpha));
|
||||||
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BASE_COLOR_NORMAL]), guiAlpha));
|
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BASE_COLOR_NORMAL]), guiAlpha));
|
||||||
DrawText(text, bounds.x + GUITEXTBOX_PADDING, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[TEXTBOX_TEXT_COLOR_NORMAL]), guiAlpha));
|
DrawText(text, bounds.x + DEFAULT_TEXT_PADDING, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[TEXTBOX_TEXT_COLOR_NORMAL]), guiAlpha));
|
||||||
} break;
|
} break;
|
||||||
case FOCUSED:
|
case FOCUSED:
|
||||||
{
|
{
|
||||||
DrawRectangleLinesEx(bounds, style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BORDER_COLOR_FOCUSED]), guiAlpha));
|
DrawRectangleLinesEx(bounds, style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BORDER_COLOR_FOCUSED]), guiAlpha));
|
||||||
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BASE_COLOR_FOCUSED]), guiAlpha));
|
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BASE_COLOR_FOCUSED]), guiAlpha));
|
||||||
DrawText(text, bounds.x + GUITEXTBOX_PADDING, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[TEXTBOX_TEXT_COLOR_PRESSED]), guiAlpha));
|
DrawText(text, bounds.x + DEFAULT_TEXT_PADDING, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[TEXTBOX_TEXT_COLOR_PRESSED]), guiAlpha));
|
||||||
|
|
||||||
if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + GUITEXTBOX_LINE_PADDING + MeasureText(text, style[DEFAULT_TEXT_SIZE]), bounds.y + GUITEXTBOX_LINE_PADDING/2, 1, bounds.height - GUITEXTBOX_LINE_PADDING, Fade(GetColor(style[TEXTBOX_BORDER_COLOR_FOCUSED]), guiAlpha));
|
if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + DEFAULT_TEXT_LINE_PADDING + MeasureText(text, style[DEFAULT_TEXT_SIZE]), bounds.y + DEFAULT_TEXT_LINE_PADDING/2, 1, bounds.height - DEFAULT_TEXT_LINE_PADDING, Fade(GetColor(style[TEXTBOX_BORDER_COLOR_FOCUSED]), guiAlpha));
|
||||||
} break;
|
} break;
|
||||||
case PRESSED: break; // NOTE: State not used on this control
|
case PRESSED: break; // NOTE: State not used on this control
|
||||||
case DISABLED:
|
case DISABLED:
|
||||||
{
|
{
|
||||||
DrawRectangleLinesEx(bounds, style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BORDER_COLOR_DISABLED]), guiAlpha));
|
DrawRectangleLinesEx(bounds, style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BORDER_COLOR_DISABLED]), guiAlpha));
|
||||||
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BASE_COLOR_DISABLED]), guiAlpha));
|
DrawRectangle(bounds.x + style[TEXTBOX_BORDER_WIDTH], bounds.y + style[TEXTBOX_BORDER_WIDTH], bounds.width - 2*style[TEXTBOX_BORDER_WIDTH], bounds.height - 2*style[TEXTBOX_BORDER_WIDTH], Fade(GetColor(style[TEXTBOX_BASE_COLOR_DISABLED]), guiAlpha));
|
||||||
DrawText(text, bounds.x + GUITEXTBOX_PADDING, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[TEXTBOX_TEXT_COLOR_DISABLED]), guiAlpha));
|
DrawText(text, bounds.x + DEFAULT_TEXT_PADDING, bounds.y + bounds.height/2 - style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE], Fade(GetColor(style[TEXTBOX_TEXT_COLOR_DISABLED]), guiAlpha));
|
||||||
} break;
|
} break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
@ -1987,49 +1987,136 @@ RAYGUIDEF bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool
|
|||||||
Vector2 mousePoint = GetMousePosition();
|
Vector2 mousePoint = GetMousePosition();
|
||||||
|
|
||||||
#define KEY_BACKSPACE_TEXT 259 // GLFW BACKSPACE: 3 + 256
|
#define KEY_BACKSPACE_TEXT 259 // GLFW BACKSPACE: 3 + 256
|
||||||
|
|
||||||
if (CheckCollisionPointRec(mousePoint, bounds))
|
if (editMode)
|
||||||
{
|
{
|
||||||
state = FOCUSED; // NOTE: PRESSED state is not used on this control
|
state = FOCUSED;
|
||||||
|
|
||||||
if (editMode)
|
framesCounter++;
|
||||||
|
|
||||||
|
int keyCount = strlen(text);
|
||||||
|
|
||||||
|
char *lastLine = strrchr(text, '\n');
|
||||||
|
|
||||||
|
int maxWidth = (bounds.width - (DEFAULT_TEXT_PADDING * 2));
|
||||||
|
|
||||||
|
if (lastLine != NULL)
|
||||||
{
|
{
|
||||||
framesCounter++;
|
if (MeasureText(lastLine, style[DEFAULT_TEXT_SIZE]) > maxWidth)
|
||||||
|
|
||||||
int key = GetKeyPressed();
|
|
||||||
int keyCount = strlen(text);
|
|
||||||
|
|
||||||
if (((MeasureText(text, style[DEFAULT_TEXT_SIZE])) > bounds.width - GUITEXTBOX_PADDING))
|
|
||||||
{
|
{
|
||||||
char *ptr = strrchr(text, 32);
|
int firstIndex = lastLine - text;
|
||||||
|
|
||||||
if (ptr != NULL)
|
char *lastSpace = strrchr(lastLine, 32);
|
||||||
|
|
||||||
|
if (lastSpace != NULL)
|
||||||
{
|
{
|
||||||
int index = ptr - text;
|
int secondIndex = lastSpace - lastLine;
|
||||||
text[index] = '\n';
|
text[firstIndex + secondIndex] = '\n';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int len = strlen(lastLine);
|
||||||
|
char lastChar = lastLine[len - 1];
|
||||||
|
lastLine[len - 1] = '\n';
|
||||||
|
lastLine[len] = lastChar;
|
||||||
|
lastLine[len + 1] = '\0';
|
||||||
|
keyCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (MeasureText(text, style[DEFAULT_TEXT_SIZE]) > maxWidth)
|
||||||
|
{
|
||||||
|
char *lastSpace = strrchr(text, 32);
|
||||||
|
if (lastSpace != NULL)
|
||||||
|
{
|
||||||
|
int index = lastSpace - text;
|
||||||
|
text[index] = '\n';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int len = strlen(lastLine);
|
||||||
|
char lastChar = lastLine[len - 1];
|
||||||
|
lastLine[len - 1] = '\n';
|
||||||
|
lastLine[len] = lastChar;
|
||||||
|
lastLine[len + 1] = '\0';
|
||||||
|
keyCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if (((MeasureText(text, style[DEFAULT_TEXT_SIZE])) > bounds.width - DEFAULT_TEXT_PADDING))
|
||||||
|
{
|
||||||
|
char *ptr = strrchr(text, '\n');
|
||||||
|
|
||||||
currentLine = MeasureTextEx(GetFontDefault(), text, style[DEFAULT_TEXT_SIZE], 1).y/10 - 1;
|
if (MeasureText(ptr, style[DEFAULT_TEXT_SIZE]) > bounds.width - DEFAULT_TEXT_PADDING)
|
||||||
|
{
|
||||||
// NOTE: Only allow keys in range [32..125]
|
|
||||||
if ((key >= 32) && (key <= 125) && (keyCount < textSize))
|
}
|
||||||
|
else if (ptr != NULL)
|
||||||
|
{
|
||||||
|
int index = ptr - text;
|
||||||
|
text[index] = '\n';
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// Counting how many new lines
|
||||||
|
for (int i = 0; i < keyCount; i++)
|
||||||
|
{
|
||||||
|
if (text[i] == '\n') currentLine++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only allow keys in range [32..125]
|
||||||
|
if (keyCount < (textSize - 1))
|
||||||
|
{
|
||||||
|
int key = GetKeyPressed();
|
||||||
|
if (IsKeyPressed(KEY_ENTER))
|
||||||
|
{
|
||||||
|
text[keyCount] = '\n';
|
||||||
|
keyCount++;
|
||||||
|
}
|
||||||
|
else if ((key >= 32) && (key <= 125))
|
||||||
{
|
{
|
||||||
text[keyCount] = (char)key;
|
text[keyCount] = (char)key;
|
||||||
keyCount++;
|
keyCount++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete text
|
||||||
|
if (keyCount > 0)
|
||||||
|
{
|
||||||
if (IsKeyPressed(KEY_BACKSPACE_TEXT))
|
if (IsKeyPressed(KEY_BACKSPACE_TEXT))
|
||||||
{
|
{
|
||||||
keyCount--;
|
keyCount--;
|
||||||
text[keyCount] = '\0';
|
text[keyCount] = '\0';
|
||||||
|
framesCounter = 0;
|
||||||
|
if (keyCount < 0) keyCount = 0;
|
||||||
|
}
|
||||||
|
else if (IsKeyDown(KEY_BACKSPACE_TEXT))
|
||||||
|
{
|
||||||
|
if ((framesCounter > LINE_BLINK_FRAMES) && (framesCounter%2) == 0) keyCount--;
|
||||||
|
text[keyCount] = '\0';
|
||||||
if (keyCount < 0) keyCount = 0;
|
if (keyCount < 0) keyCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (IsKeyPressed(KEY_ENTER)) pressed = true;
|
|
||||||
}
|
}
|
||||||
else editMode = false;
|
|
||||||
|
// Changing editMode
|
||||||
|
if (!editMode)
|
||||||
|
{
|
||||||
|
if (CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(0)) pressed = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (IsMouseButtonPressed(0)) pressed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pressed)
|
||||||
|
{
|
||||||
|
printf("Current line: %i\n", currentLine);
|
||||||
|
framesCounter = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user