Review some defines naming and exposure

This commit is contained in:
Ray
2019-09-30 17:34:30 +02:00
parent 00fb56245d
commit f164f744ac

View File

@ -155,12 +155,12 @@
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Defines and Macros // Defines and Macros
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
#define TEXTEDIT_CURSOR_BLINK_FRAMES 20 // Text edit controls cursor blink timming
#define NUM_CONTROLS 16 // Number of standard controls #define NUM_CONTROLS 16 // Number of standard controls
#define NUM_PROPS_DEFAULT 16 // Number of standard properties #define NUM_PROPS_DEFAULT 16 // Number of standard properties
#define NUM_PROPS_EXTENDED 8 // Number of extended properties #define NUM_PROPS_EXTENDED 8 // Number of extended properties
#define TEXTEDIT_CURSOR_BLINK_FRAMES 20 // Text edit controls cursor blink timming
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// 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
@ -651,6 +651,7 @@ static Rectangle GetTextBounds(int control, Rectangle bounds)
static const char *GetTextIcon(const char *text, int *iconId) static const char *GetTextIcon(const char *text, int *iconId)
{ {
#if defined(RAYGUI_SUPPORT_RICONS) #if defined(RAYGUI_SUPPORT_RICONS)
*iconId = -1;
if (text[0] == '#') // Maybe we have an icon! if (text[0] == '#') // Maybe we have an icon!
{ {
char iconValue[4] = { 0 }; char iconValue[4] = { 0 };
@ -667,7 +668,7 @@ static const char *GetTextIcon(const char *text, int *iconId)
// Move text pointer after icon // Move text pointer after icon
// WARNING: If only icon provided, it could point to EOL character! // WARNING: If only icon provided, it could point to EOL character!
if (*iconId > 0) text += (i + 1); if (*iconId >= 0) text += (i + 1);
} }
#endif #endif
@ -677,7 +678,7 @@ static const char *GetTextIcon(const char *text, int *iconId)
// Gui draw text using default font // Gui draw text using default font
static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color tint) static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color tint)
{ {
#define VALIGN_OFFSET(h) ((int)h%2) // Vertical alignment for pixel perfect #define TEXT_VALIGN_PIXEL_OFFSET(h) ((int)h%2) // Vertical alignment for pixel perfect
if ((text != NULL) && (text[0] != '\0')) if ((text != NULL) && (text[0] != '\0'))
{ {
@ -695,9 +696,9 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
int textHeight = GuiGetStyle(DEFAULT, TEXT_SIZE); int textHeight = GuiGetStyle(DEFAULT, TEXT_SIZE);
#if defined(RAYGUI_SUPPORT_RICONS) #if defined(RAYGUI_SUPPORT_RICONS)
if (iconId > 0) if (iconId >= 0)
{ {
textWidth += RICONS_SIZE; textWidth += RICON_SIZE;
// WARNING: If only icon provided, text could be pointing to eof character! // WARNING: If only icon provided, text could be pointing to eof character!
if ((text != NULL) && (text[0] != '\0')) textWidth += ICON_TEXT_PADDING; if ((text != NULL) && (text[0] != '\0')) textWidth += ICON_TEXT_PADDING;
@ -709,17 +710,17 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
case GUI_TEXT_ALIGN_LEFT: case GUI_TEXT_ALIGN_LEFT:
{ {
position.x = bounds.x; position.x = bounds.x;
position.y = bounds.y + bounds.height/2 - textHeight/2 + VALIGN_OFFSET(bounds.height); position.y = bounds.y + bounds.height/2 - textHeight/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height);
} break; } break;
case GUI_TEXT_ALIGN_CENTER: case GUI_TEXT_ALIGN_CENTER:
{ {
position.x = bounds.x + bounds.width/2 - textWidth/2; position.x = bounds.x + bounds.width/2 - textWidth/2;
position.y = bounds.y + bounds.height/2 - textHeight/2 + VALIGN_OFFSET(bounds.height); position.y = bounds.y + bounds.height/2 - textHeight/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height);
} break; } break;
case GUI_TEXT_ALIGN_RIGHT: case GUI_TEXT_ALIGN_RIGHT:
{ {
position.x = bounds.x + bounds.width - textWidth; position.x = bounds.x + bounds.width - textWidth;
position.y = bounds.y + bounds.height/2 - textHeight/2 + VALIGN_OFFSET(bounds.height); position.y = bounds.y + bounds.height/2 - textHeight/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height);
} break; } break;
default: break; default: break;
} }
@ -733,11 +734,11 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color
// Draw text (with icon if available) // Draw text (with icon if available)
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
#if defined(RAYGUI_SUPPORT_RICONS) #if defined(RAYGUI_SUPPORT_RICONS)
if (iconId > 0) if (iconId >= 0)
{ {
// NOTE: We consider icon height, probably different than text size // NOTE: We consider icon height, probably different than text size
DrawIcon(iconId, RAYGUI_CLITERAL(Vector2){ position.x, bounds.y + bounds.height/2 - RICONS_SIZE/2 + VALIGN_OFFSET(bounds.height) }, 1, tint); GuiDrawIcon(iconId, RAYGUI_CLITERAL(Vector2){ position.x, bounds.y + bounds.height/2 - RICON_SIZE/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height) }, 1, tint);
position.x += (RICONS_SIZE + ICON_TEXT_PADDING); position.x += (RICON_SIZE + ICON_TEXT_PADDING);
} }
#endif #endif
DrawTextEx(guiFont, text, position, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING), tint); DrawTextEx(guiFont, text, position, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING), tint);
@ -1271,10 +1272,14 @@ RAYGUIDEF bool GuiToggle(Rectangle bounds, const char *text, bool active)
// Toggle Group control, returns toggled button index // Toggle Group control, returns toggled button index
RAYGUIDEF int GuiToggleGroup(Rectangle bounds, const char *text, int active) RAYGUIDEF int GuiToggleGroup(Rectangle bounds, const char *text, int active)
{ {
#if !defined(TOGGLEGROUP_MAX_ELEMENTS)
#define TOGGLEGROUP_MAX_ELEMENTS 32
#endif
float initBoundsX = bounds.x; float initBoundsX = bounds.x;
// Get substrings items from text (items pointers) // Get substrings items from text (items pointers)
int rows[64] = { 0 }; int rows[TOGGLEGROUP_MAX_ELEMENTS] = { 0 };
int itemsCount = 0; int itemsCount = 0;
const char **items = GuiTextSplit(text, &itemsCount, rows); const char **items = GuiTextSplit(text, &itemsCount, rows);
@ -1852,7 +1857,7 @@ RAYGUIDEF void GuiTextBoxCopy(const char *text)
start = GuiTextBoxGetByteIndex(text, 0, 0, start); start = GuiTextBoxGetByteIndex(text, 0, 0, start);
end = GuiTextBoxGetByteIndex(text, 0, 0, end); end = GuiTextBoxGetByteIndex(text, 0, 0, end);
// FIXME: `TextSubtext()` only lets use copy MAX_TEXT_BUFFER_LENGTH (1024) bytes // FIXME: `TextSubtext()` only lets use copy TEXTSPLIT_MAX_TEXT_LENGTH (1024) bytes
// maybe modify `SetClipboardText()` so we can use it only on part of a string // maybe modify `SetClipboardText()` so we can use it only on part of a string
const char *clipText = TextSubtext(text, start, end - start); const char *clipText = TextSubtext(text, start, end - start);
@ -1924,7 +1929,7 @@ RAYGUIDEF void GuiTextBoxCut(char* text)
int startIdx = GuiTextBoxGetByteIndex(text, 0, 0, start); int startIdx = GuiTextBoxGetByteIndex(text, 0, 0, start);
int endIdx = GuiTextBoxGetByteIndex(text, 0, 0, end); int endIdx = GuiTextBoxGetByteIndex(text, 0, 0, end);
// FIXME: `TextSubtext()` only lets use copy MAX_TEXT_BUFFER_LENGTH (1024) bytes // FIXME: `TextSubtext()` only lets use copy TEXTSPLIT_MAX_TEXT_LENGTH (1024) bytes
// maybe modify `SetClipboardText()` so we can use it only on parts of a string // maybe modify `SetClipboardText()` so we can use it only on parts of a string
const char *clipText = TextSubtext(text, startIdx, endIdx - startIdx); const char *clipText = TextSubtext(text, startIdx, endIdx - startIdx);
SetClipboardText(clipText); SetClipboardText(clipText);
@ -1981,7 +1986,7 @@ static int EncodeCodepoint(unsigned int c, char out[5])
RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode) RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode)
{ {
// Define the cursor movement/selection speed when movement keys are held/pressed // Define the cursor movement/selection speed when movement keys are held/pressed
#define GUI_TEXTBOX_CURSOR_SPEED_MODIFIER 5 #define TEXTBOX_CURSOR_COOLDOWN 5
static int framesCounter = 0; // Required for blinking cursor static int framesCounter = 0; // Required for blinking cursor
@ -2103,7 +2108,7 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM
// * DEL delete character or selection after cursor // * DEL delete character or selection after cursor
// * BACKSPACE delete character or selection before cursor // * BACKSPACE delete character or selection before cursor
// TODO: Add more shortcuts (insert mode, select word, moveto/select prev/next word ...) // TODO: Add more shortcuts (insert mode, select word, moveto/select prev/next word ...)
if (IsKeyPressed(KEY_RIGHT) || (IsKeyDown(KEY_RIGHT) && (framesCounter%GUI_TEXTBOX_CURSOR_SPEED_MODIFIER == 0))) if (IsKeyPressed(KEY_RIGHT) || (IsKeyDown(KEY_RIGHT) && (framesCounter%TEXTBOX_CURSOR_COOLDOWN == 0)))
{ {
if (IsKeyDown(KEY_LEFT_SHIFT)) if (IsKeyDown(KEY_LEFT_SHIFT))
{ {
@ -2134,7 +2139,7 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM
framesCounter = 0; framesCounter = 0;
} }
else if (IsKeyPressed(KEY_LEFT) || (IsKeyDown(KEY_LEFT) && (framesCounter%GUI_TEXTBOX_CURSOR_SPEED_MODIFIER == 0))) else if (IsKeyPressed(KEY_LEFT) || (IsKeyDown(KEY_LEFT) && (framesCounter%TEXTBOX_CURSOR_COOLDOWN == 0)))
{ {
if (IsKeyDown(KEY_LEFT_SHIFT)) if (IsKeyDown(KEY_LEFT_SHIFT))
{ {
@ -2170,11 +2175,11 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM
framesCounter = 0; framesCounter = 0;
} }
else if (IsKeyPressed(KEY_BACKSPACE) || (IsKeyDown(KEY_BACKSPACE) && (framesCounter%GUI_TEXTBOX_CURSOR_SPEED_MODIFIER) == 0)) else if (IsKeyPressed(KEY_BACKSPACE) || (IsKeyDown(KEY_BACKSPACE) && (framesCounter%TEXTBOX_CURSOR_COOLDOWN) == 0))
{ {
GuiTextBoxDelete(text, length, true); GuiTextBoxDelete(text, length, true);
} }
else if (IsKeyPressed(KEY_DELETE) || (IsKeyDown(KEY_DELETE) && (framesCounter%GUI_TEXTBOX_CURSOR_SPEED_MODIFIER) == 0)) else if (IsKeyPressed(KEY_DELETE) || (IsKeyDown(KEY_DELETE) && (framesCounter%TEXTBOX_CURSOR_COOLDOWN) == 0))
{ {
GuiTextBoxDelete(text, length, false); GuiTextBoxDelete(text, length, false);
} }
@ -2306,7 +2311,7 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM
} }
// Move the text when cursor is positioned before or after the text // Move the text when cursor is positioned before or after the text
if ((framesCounter%GUI_TEXTBOX_CURSOR_SPEED_MODIFIER) == 0 && move) if ((framesCounter%TEXTBOX_CURSOR_COOLDOWN) == 0 && move)
{ {
if (cursor == 0) MoveTextBoxCursorLeft(text); if (cursor == 0) MoveTextBoxCursorLeft(text);
else if (cursor == GuiTextBoxMaxCharacters(&text[guiTextBoxState.index], length - guiTextBoxState.index, textRec)) else if (cursor == GuiTextBoxMaxCharacters(&text[guiTextBoxState.index], length - guiTextBoxState.index, textRec))
@ -2487,7 +2492,9 @@ RAYGUIDEF bool GuiSpinner(Rectangle bounds, const char *text, int *value, int mi
// NOTE: Requires static variables: framesCounter // NOTE: Requires static variables: framesCounter
RAYGUIDEF bool GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode) RAYGUIDEF bool GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode)
{ {
#define VALUEBOX_MAX_CHARS 32 #if !defined(VALUEBOX_MAX_CHARS)
#define VALUEBOX_MAX_CHARS 32
#endif
static int framesCounter = 0; // Required for blinking cursor static int framesCounter = 0; // Required for blinking cursor
@ -3500,7 +3507,7 @@ RAYGUIDEF Color GuiColorPanel(Rectangle bounds, Color color)
// NOTE: Returns alpha value normalized [0..1] // NOTE: Returns alpha value normalized [0..1]
RAYGUIDEF float GuiColorBarAlpha(Rectangle bounds, float alpha) RAYGUIDEF float GuiColorBarAlpha(Rectangle bounds, float alpha)
{ {
#define COLORBARALPHA_CHECKED_SIZE 10 #define COLORBARALPHA_CHECKED_SIZE 10
GuiControlState state = guiState; GuiControlState state = guiState;
Rectangle selector = { (float)bounds.x + alpha*bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)bounds.y - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT), (float)bounds.height + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW)*2 }; Rectangle selector = { (float)bounds.x + alpha*bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)bounds.y - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT), (float)bounds.height + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW)*2 };
@ -3657,8 +3664,8 @@ RAYGUIDEF Color GuiColorPicker(Rectangle bounds, Color color)
// Message Box control // Message Box control
RAYGUIDEF int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons) RAYGUIDEF int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons)
{ {
#define MESSAGEBOX_BUTTON_HEIGHT 24 #define MESSAGEBOX_BUTTON_HEIGHT 24
#define MESSAGEBOX_BUTTON_PADDING 10 #define MESSAGEBOX_BUTTON_PADDING 10
int clicked = -1; // Returns clicked button from buttons list, 0 refers to closed window button int clicked = -1; // Returns clicked button from buttons list, 0 refers to closed window button
@ -3709,7 +3716,7 @@ RAYGUIDEF int GuiTextInputBox(Rectangle bounds, const char *title, const char *m
#define TEXTINPUTBOX_BUTTON_PADDING 10 #define TEXTINPUTBOX_BUTTON_PADDING 10
#define TEXTINPUTBOX_HEIGHT 30 #define TEXTINPUTBOX_HEIGHT 30
#define MAX_FILENAME_LENGTH 256 #define TEXTINPUTBOX_MAX_TEXT_LENGTH 256
// Used to enable text edit mode // Used to enable text edit mode
// WARNING: No more than one GuiTextInputBox() should be open at the same time // WARNING: No more than one GuiTextInputBox() should be open at the same time
@ -3759,7 +3766,7 @@ RAYGUIDEF int GuiTextInputBox(Rectangle bounds, const char *title, const char *m
GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment); GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment);
} }
if (GuiTextBox(textBoxBounds, text, MAX_FILENAME_LENGTH, textEditMode)) textEditMode = !textEditMode; if (GuiTextBox(textBoxBounds, text, TEXTINPUTBOX_MAX_TEXT_LENGTH, textEditMode)) textEditMode = !textEditMode;
int prevBtnTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); int prevBtnTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT);
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER);
@ -3782,7 +3789,9 @@ RAYGUIDEF int GuiTextInputBox(Rectangle bounds, const char *title, const char *m
// https://stackoverflow.com/questions/4435450/2d-opengl-drawing-lines-that-dont-exactly-fit-pixel-raster // https://stackoverflow.com/questions/4435450/2d-opengl-drawing-lines-that-dont-exactly-fit-pixel-raster
RAYGUIDEF Vector2 GuiGrid(Rectangle bounds, float spacing, int subdivs) RAYGUIDEF Vector2 GuiGrid(Rectangle bounds, float spacing, int subdivs)
{ {
#define GRID_COLOR_ALPHA 0.15f // Grid lines alpha amount #if !defined(GRID_COLOR_ALPHA)
#define GRID_COLOR_ALPHA 0.15f // Grid lines alpha amount
#endif
GuiControlState state = guiState; GuiControlState state = guiState;
Vector2 mousePoint = GetMousePosition(); Vector2 mousePoint = GetMousePosition();
@ -4136,15 +4145,21 @@ static const char **GuiTextSplit(const char *text, int *count, int *textRow)
// NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter) // NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter)
// inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated, // inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated,
// all used memory is static... it has some limitations: // all used memory is static... it has some limitations:
// 1. Maximum number of possible split strings is set by MAX_SUBSTRINGS_COUNT // 1. Maximum number of possible split strings is set by TEXTSPLIT_MAX_TEXT_ELEMENTS
// 2. Maximum size of text to split is MAX_TEXT_BUFFER_LENGTH // 2. Maximum size of text to split is TEXTSPLIT_MAX_TEXT_LENGTH
// NOTE: Those definitions could be externally provided if required
#define MAX_TEXT_BUFFER_LENGTH 1024 #if !defined(TEXTSPLIT_MAX_TEXT_LENGTH)
#define MAX_SUBSTRINGS_COUNT 64 #define TEXTSPLIT_MAX_TEXT_LENGTH 1024
#endif
static const char *result[MAX_SUBSTRINGS_COUNT] = { NULL }; #if !defined(TEXTSPLIT_MAX_TEXT_ELEMENTS)
static char buffer[MAX_TEXT_BUFFER_LENGTH] = { 0 }; #define TEXTSPLIT_MAX_TEXT_ELEMENTS 128
memset(buffer, 0, MAX_TEXT_BUFFER_LENGTH); #endif
static const char *result[TEXTSPLIT_MAX_TEXT_ELEMENTS] = { NULL };
static char buffer[TEXTSPLIT_MAX_TEXT_LENGTH] = { 0 };
memset(buffer, 0, TEXTSPLIT_MAX_TEXT_LENGTH);
result[0] = buffer; result[0] = buffer;
int counter = 1; int counter = 1;
@ -4152,7 +4167,7 @@ static const char **GuiTextSplit(const char *text, int *count, int *textRow)
if (textRow != NULL) textRow[0] = 0; if (textRow != NULL) textRow[0] = 0;
// Count how many substrings we have on text and point to every one // Count how many substrings we have on text and point to every one
for (int i = 0; i < MAX_TEXT_BUFFER_LENGTH; i++) for (int i = 0; i < TEXTSPLIT_MAX_TEXT_LENGTH; i++)
{ {
buffer[i] = text[i]; buffer[i] = text[i];
if (buffer[i] == '\0') break; if (buffer[i] == '\0') break;
@ -4169,7 +4184,7 @@ static const char **GuiTextSplit(const char *text, int *count, int *textRow)
buffer[i] = '\0'; // Set an end of string at this point buffer[i] = '\0'; // Set an end of string at this point
counter++; counter++;
if (counter == MAX_SUBSTRINGS_COUNT) break; if (counter == TEXTSPLIT_MAX_TEXT_ELEMENTS) break;
} }
} }