|
@@ -527,7 +527,7 @@ typedef enum {
|
|
|
DROPDOWNBOX,
|
|
|
TEXTBOX, // Used also for: TEXTBOXMULTI
|
|
|
VALUEBOX,
|
|
|
- SPINNER, // Uses: BUTTON, VALUEBOX
|
|
|
+ CONTROL11,
|
|
|
LISTVIEW,
|
|
|
COLORPICKER,
|
|
|
SCROLLBAR,
|
|
@@ -549,12 +549,12 @@ typedef enum {
|
|
|
BORDER_COLOR_DISABLED, // Control border color in STATE_DISABLED
|
|
|
BASE_COLOR_DISABLED, // Control base color in STATE_DISABLED
|
|
|
TEXT_COLOR_DISABLED, // Control text color in STATE_DISABLED
|
|
|
- BORDER_WIDTH, // Control border size, 0 for no border
|
|
|
+ BORDER_WIDTH = 12, // Control border size, 0 for no border
|
|
|
//TEXT_SIZE, // Control text size (glyphs max height) -> GLOBAL for all controls
|
|
|
//TEXT_SPACING, // Control text spacing between glyphs -> GLOBAL for all controls
|
|
|
- //TEXT_LINE_SPACING // Control text spacing between lines -> GLOBAL for all controls
|
|
|
- TEXT_PADDING, // Control text padding, not considering border
|
|
|
- TEXT_ALIGNMENT, // Control text horizontal alignment inside control text bound (after border and padding)
|
|
|
+ //TEXT_LINE_SPACING, // Control text spacing between lines -> GLOBAL for all controls
|
|
|
+ TEXT_PADDING = 13, // Control text padding, not considering border
|
|
|
+ TEXT_ALIGNMENT = 14, // Control text horizontal alignment inside control text bound (after border and padding)
|
|
|
//TEXT_WRAP_MODE // Control text wrap-mode inside text bounds -> GLOBAL for all controls
|
|
|
} GuiControlProperty;
|
|
|
|
|
@@ -641,11 +641,14 @@ typedef enum {
|
|
|
TEXT_READONLY = 16, // TextBox in read-only mode: 0-text editable, 1-text no-editable
|
|
|
} GuiTextBoxProperty;
|
|
|
|
|
|
-// Spinner
|
|
|
+// ValueBox/Spinner
|
|
|
typedef enum {
|
|
|
- SPIN_BUTTON_WIDTH = 16, // Spinner left/right buttons width
|
|
|
- SPIN_BUTTON_SPACING, // Spinner buttons separation
|
|
|
-} GuiSpinnerProperty;
|
|
|
+ SPINNER_BUTTON_WIDTH = 16, // Spinner left/right buttons width
|
|
|
+ SPINNER_BUTTON_SPACING, // Spinner buttons separation
|
|
|
+} GuiValueBoxProperty;
|
|
|
+
|
|
|
+// Control11
|
|
|
+//typedef enum { } GuiControl11Property;
|
|
|
|
|
|
// ListView
|
|
|
typedef enum {
|
|
@@ -2827,19 +2830,22 @@ int GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int
|
|
|
|
|
|
int tempValue = *value;
|
|
|
|
|
|
- Rectangle spinner = { bounds.x + GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_SPACING), bounds.y,
|
|
|
- bounds.width - 2*(GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_SPACING)), bounds.height };
|
|
|
- Rectangle leftButtonBound = { (float)bounds.x, (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height };
|
|
|
- Rectangle rightButtonBound = { (float)bounds.x + bounds.width - GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height };
|
|
|
+ Rectangle valueBoxBounds = {
|
|
|
+ bounds.x + GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH) + GuiGetStyle(VALUEBOX, SPINNER_BUTTON_SPACING),
|
|
|
+ bounds.y,
|
|
|
+ bounds.width - 2*(GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH) + GuiGetStyle(VALUEBOX, SPINNER_BUTTON_SPACING)), bounds.height };
|
|
|
+ Rectangle leftButtonBound = { (float)bounds.x, (float)bounds.y, (float)GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH), (float)bounds.height };
|
|
|
+ Rectangle rightButtonBound = { (float)bounds.x + bounds.width - GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH), (float)bounds.y,
|
|
|
+ (float)GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH), (float)bounds.height };
|
|
|
|
|
|
Rectangle textBounds = { 0 };
|
|
|
if (text != NULL)
|
|
|
{
|
|
|
textBounds.width = (float)GetTextWidth(text) + 2;
|
|
|
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
|
|
|
- textBounds.x = bounds.x + bounds.width + GuiGetStyle(SPINNER, TEXT_PADDING);
|
|
|
+ textBounds.x = bounds.x + bounds.width + GuiGetStyle(VALUEBOX, TEXT_PADDING);
|
|
|
textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2;
|
|
|
- if (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SPINNER, TEXT_PADDING);
|
|
|
+ if (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(VALUEBOX, TEXT_PADDING);
|
|
|
}
|
|
|
|
|
|
// Update control
|
|
@@ -2873,20 +2879,20 @@ int GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int
|
|
|
|
|
|
// Draw control
|
|
|
//--------------------------------------------------------------------
|
|
|
- result = GuiValueBox(spinner, NULL, &tempValue, minValue, maxValue, editMode);
|
|
|
+ result = GuiValueBox(valueBoxBounds, NULL, &tempValue, minValue, maxValue, editMode);
|
|
|
|
|
|
// Draw value selector custom buttons
|
|
|
// NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values
|
|
|
int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH);
|
|
|
int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT);
|
|
|
- GuiSetStyle(BUTTON, BORDER_WIDTH, GuiGetStyle(SPINNER, BORDER_WIDTH));
|
|
|
+ GuiSetStyle(BUTTON, BORDER_WIDTH, GuiGetStyle(VALUEBOX, BORDER_WIDTH));
|
|
|
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
|
|
|
|
|
|
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign);
|
|
|
GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth);
|
|
|
|
|
|
// Draw text label if provided
|
|
|
- GuiDrawText(text, textBounds, (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3))));
|
|
|
+ GuiDrawText(text, textBounds, (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3))));
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
*value = tempValue;
|
|
@@ -2905,7 +2911,7 @@ int GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, in
|
|
|
GuiState state = guiState;
|
|
|
|
|
|
char textValue[RAYGUI_VALUEBOX_MAX_CHARS + 1] = "\0";
|
|
|
- snprintf(textValue, sizeof(textValue), "%i", *value);
|
|
|
+ snprintf(textValue, RAYGUI_VALUEBOX_MAX_CHARS + 1, "%i", *value);
|
|
|
|
|
|
Rectangle textBounds = { 0 };
|
|
|
if (text != NULL)
|
|
@@ -2992,13 +2998,16 @@ int GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, in
|
|
|
else if (state == STATE_DISABLED) baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_DISABLED));
|
|
|
|
|
|
GuiDrawRectangle(bounds, GuiGetStyle(VALUEBOX, BORDER_WIDTH), GetColor(GuiGetStyle(VALUEBOX, BORDER + (state*3))), baseColor);
|
|
|
- GuiDrawText(textValue, GetTextBounds(VALUEBOX, bounds), TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(VALUEBOX, TEXT + (state*3))));
|
|
|
+ GuiDrawText(textValue, GetTextBounds(VALUEBOX, bounds), TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(LABEL, TEXT + (state*3))));
|
|
|
|
|
|
- // Draw cursor
|
|
|
+ // Draw cursor rectangle
|
|
|
if (editMode)
|
|
|
{
|
|
|
// NOTE: ValueBox internal text is always centered
|
|
|
- Rectangle cursor = { bounds.x + GetTextWidth(textValue)/2 + bounds.width/2 + 1, bounds.y + 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), 4, bounds.height - 4*GuiGetStyle(VALUEBOX, BORDER_WIDTH) };
|
|
|
+ Rectangle cursor = { bounds.x + GetTextWidth(textValue)/2 + bounds.width/2 + 1,
|
|
|
+ bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH) + 2,
|
|
|
+ 2, bounds.height - GuiGetStyle(TEXTBOX, BORDER_WIDTH)*2 - 4 };
|
|
|
+ if (cursor.height > bounds.height) cursor.height = bounds.height - GuiGetStyle(TEXTBOX, BORDER_WIDTH)*2;
|
|
|
GuiDrawRectangle(cursor, 0, BLANK, GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_PRESSED)));
|
|
|
}
|
|
|
|
|
@@ -3214,10 +3223,10 @@ int GuiSliderPro(Rectangle bounds, const char *textLeft, const char *textRight,
|
|
|
Rectangle textBounds = { 0 };
|
|
|
textBounds.width = (float)GetTextWidth(textLeft);
|
|
|
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
|
|
|
- textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SLIDER, TEXT_PADDING);
|
|
|
+ textBounds.x = bounds.x - textBounds.width - GuiGetStyle(LABEL, TEXT_PADDING);
|
|
|
textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2;
|
|
|
|
|
|
- GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))));
|
|
|
+ GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3))));
|
|
|
}
|
|
|
|
|
|
if (textRight != NULL)
|
|
@@ -3225,10 +3234,10 @@ int GuiSliderPro(Rectangle bounds, const char *textLeft, const char *textRight,
|
|
|
Rectangle textBounds = { 0 };
|
|
|
textBounds.width = (float)GetTextWidth(textRight);
|
|
|
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
|
|
|
- textBounds.x = bounds.x + bounds.width + GuiGetStyle(SLIDER, TEXT_PADDING);
|
|
|
+ textBounds.x = bounds.x + bounds.width + GuiGetStyle(LABEL, TEXT_PADDING);
|
|
|
textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2;
|
|
|
|
|
|
- GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))));
|
|
|
+ GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3))));
|
|
|
}
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
@@ -3305,10 +3314,10 @@ int GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight
|
|
|
Rectangle textBounds = { 0 };
|
|
|
textBounds.width = (float)GetTextWidth(textLeft);
|
|
|
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
|
|
|
- textBounds.x = bounds.x - textBounds.width - GuiGetStyle(PROGRESSBAR, TEXT_PADDING);
|
|
|
+ textBounds.x = bounds.x - textBounds.width - GuiGetStyle(LABEL, TEXT_PADDING);
|
|
|
textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2;
|
|
|
|
|
|
- GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state*3))));
|
|
|
+ GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3))));
|
|
|
}
|
|
|
|
|
|
if (textRight != NULL)
|
|
@@ -3316,10 +3325,10 @@ int GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight
|
|
|
Rectangle textBounds = { 0 };
|
|
|
textBounds.width = (float)GetTextWidth(textRight);
|
|
|
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
|
|
|
- textBounds.x = bounds.x + bounds.width + GuiGetStyle(PROGRESSBAR, TEXT_PADDING);
|
|
|
+ textBounds.x = bounds.x + bounds.width + GuiGetStyle(LABEL, TEXT_PADDING);
|
|
|
textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2;
|
|
|
|
|
|
- GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state*3))));
|
|
|
+ GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3))));
|
|
|
}
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
@@ -4285,24 +4294,22 @@ void GuiLoadStyleDefault(void)
|
|
|
GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
|
|
|
GuiSetStyle(VALUEBOX, TEXT_PADDING, 0);
|
|
|
GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
|
|
|
- GuiSetStyle(SPINNER, TEXT_PADDING, 0);
|
|
|
- GuiSetStyle(SPINNER, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
|
|
|
GuiSetStyle(STATUSBAR, TEXT_PADDING, 8);
|
|
|
GuiSetStyle(STATUSBAR, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
|
|
|
|
|
|
// Initialize extended property values
|
|
|
// NOTE: By default, extended property values are initialized to 0
|
|
|
GuiSetStyle(TOGGLE, GROUP_PADDING, 2);
|
|
|
- GuiSetStyle(SLIDER, SLIDER_WIDTH, 16);
|
|
|
- GuiSetStyle(SLIDER, SLIDER_PADDING, 1);
|
|
|
+ GuiSetStyle(VALUEBOX, SLIDER_WIDTH, 16);
|
|
|
+ GuiSetStyle(VALUEBOX, SLIDER_PADDING, 1);
|
|
|
GuiSetStyle(PROGRESSBAR, PROGRESS_PADDING, 1);
|
|
|
GuiSetStyle(CHECKBOX, CHECK_PADDING, 1);
|
|
|
GuiSetStyle(COMBOBOX, COMBO_BUTTON_WIDTH, 32);
|
|
|
GuiSetStyle(COMBOBOX, COMBO_BUTTON_SPACING, 2);
|
|
|
GuiSetStyle(DROPDOWNBOX, ARROW_PADDING, 16);
|
|
|
GuiSetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING, 2);
|
|
|
- GuiSetStyle(SPINNER, SPIN_BUTTON_WIDTH, 24);
|
|
|
- GuiSetStyle(SPINNER, SPIN_BUTTON_SPACING, 2);
|
|
|
+ GuiSetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH, 24);
|
|
|
+ GuiSetStyle(VALUEBOX, SPINNER_BUTTON_SPACING, 2);
|
|
|
GuiSetStyle(SCROLLBAR, BORDER_WIDTH, 0);
|
|
|
GuiSetStyle(SCROLLBAR, ARROWS_VISIBLE, 0);
|
|
|
GuiSetStyle(SCROLLBAR, ARROWS_SIZE, 6);
|
|
@@ -4354,7 +4361,7 @@ const char *GuiIconText(int iconId, const char *text)
|
|
|
if (text != NULL)
|
|
|
{
|
|
|
memset(buffer, 0, 1024);
|
|
|
- snprintf(buffer, sizeof(buffer), "#%03i#", iconId);
|
|
|
+ snprintf(buffer, 1024, "#%03i#", iconId);
|
|
|
|
|
|
for (int i = 5; i < 1024; i++)
|
|
|
{
|
|
@@ -4366,7 +4373,7 @@ const char *GuiIconText(int iconId, const char *text)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- snprintf(iconBuffer, sizeof(iconBuffer), "#%03i#", iconId);
|
|
|
+ snprintf(iconBuffer, 16, "#%03i#", iconId);
|
|
|
|
|
|
return iconBuffer;
|
|
|
}
|
|
@@ -4479,7 +4486,7 @@ char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bo
|
|
|
{
|
|
|
if (loadIconsName)
|
|
|
{
|
|
|
- guiIconsName = (char **)RAYGUI_MALLOC(iconCount * sizeof(char *));
|
|
|
+ guiIconsName = (char **)RAYGUI_MALLOC(iconCount*sizeof(char *));
|
|
|
for (int i = 0; i < iconCount; i++)
|
|
|
{
|
|
|
guiIconsName[i] = (char *)RAYGUI_MALLOC(RAYGUI_ICON_MAX_NAME_LENGTH);
|
|
@@ -4489,11 +4496,11 @@ char **GuiLoadIconsFromMemory(const unsigned char *fileData, size_t dataSize, bo
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- // Skip icon name data
|
|
|
- ptr += iconCount * RAYGUI_ICON_MAX_NAME_LENGTH;
|
|
|
+ // Skip icon name data if not required
|
|
|
+ ptr += iconCount*RAYGUI_ICON_MAX_NAME_LENGTH;
|
|
|
}
|
|
|
|
|
|
- int iconDataSize = iconCount * (iconSize * iconSize / 32) * sizeof(unsigned int);
|
|
|
+ int iconDataSize = iconCount*(iconSize*iconSize/32)*sizeof(unsigned int);
|
|
|
guiIconsPtr = (unsigned int *)RAYGUI_MALLOC(iconDataSize);
|
|
|
|
|
|
memcpy(guiIconsPtr, ptr, iconDataSize);
|
|
@@ -4839,7 +4846,7 @@ static Rectangle GetTextBounds(int control, Rectangle bounds)
|
|
|
case SLIDER:
|
|
|
case CHECKBOX:
|
|
|
case VALUEBOX:
|
|
|
- case SPINNER:
|
|
|
+ case CONTROL11:
|
|
|
// TODO: More special cases (label on side): SLIDER, CHECKBOX, VALUEBOX, SPINNER
|
|
|
default:
|
|
|
{
|