Compare commits

2 Commits

Author SHA1 Message Date
Ray
10143957fb Update raygui.h 2026-06-16 21:11:51 +02:00
Ray
09e9be99a5 Update raygui.h 2026-06-16 19:16:40 +02:00

View File

@ -563,77 +563,81 @@ typedef enum {
// NOTE: Up to 16 controls supported or 32 controls (v500) // NOTE: Up to 16 controls supported or 32 controls (v500)
typedef enum { typedef enum {
// Default -> populates to all controls when set // Default -> populates to all controls when set
DEFAULT = 0, DEFAULT = 0,
// Basic controls // Basic controls
LABEL, // Used also for: LABELBUTTON LABEL = 1, // Used also for: LABELBUTTON
BUTTON, BUTTON = 2,
TOGGLE, // Used also for: TOGGLEGROUP TOGGLE = 3, // Used also for: TOGGLEGROUP
SLIDER, // Used also for: SLIDERBAR, TOGGLESLIDER SLIDER = 4, // Used also for: SLIDERBAR, TOGGLESLIDER
PROGRESSBAR, PROGRESSBAR = 5,
CHECKBOX, CHECKBOX = 6,
COMBOBOX, COMBOBOX = 7,
DROPDOWNBOX, DROPDOWNBOX = 8,
TEXTBOX, // Used also for: TEXTBOXMULTI TEXTBOX = 9, // Used also for: TEXTBOXMULTI
VALUEBOX, VALUEBOX = 10,
TABBAR, TABBAR = 11,
LISTVIEW, LISTVIEW = 12,
COLORPICKER, COLORPICKER = 13,
SCROLLBAR, SCROLLBAR = 14,
STATUSBAR STATUSBAR = 15
// NOTE: More controls can be added if required // NOTE: More controls can be added if required
} GuiControl; } GuiControl;
// Gui base properties for every control // Controls BASE properties for every control (RAYGUI_MAX_PROPS_BASE = 16)
// NOTE: RAYGUI_MAX_PROPS_BASE properties (by default 16 properties) // NOTE: Properties required for all controls, DEFAULT control sets
// default values for them but they can be overriden per control
typedef enum { typedef enum {
BORDER_COLOR_NORMAL = 0, // Control border color in STATE_NORMAL BORDER_COLOR_NORMAL = 0, // Control border color in STATE_NORMAL
BASE_COLOR_NORMAL, // Control base color in STATE_NORMAL BASE_COLOR_NORMAL = 1, // Control base color in STATE_NORMAL
TEXT_COLOR_NORMAL, // Control text color in STATE_NORMAL TEXT_COLOR_NORMAL = 2, // Control text color in STATE_NORMAL
BORDER_COLOR_FOCUSED, // Control border color in STATE_FOCUSED BORDER_COLOR_FOCUSED = 3, // Control border color in STATE_FOCUSED
BASE_COLOR_FOCUSED, // Control base color in STATE_FOCUSED BASE_COLOR_FOCUSED = 4, // Control base color in STATE_FOCUSED
TEXT_COLOR_FOCUSED, // Control text color in STATE_FOCUSED TEXT_COLOR_FOCUSED = 5, // Control text color in STATE_FOCUSED
BORDER_COLOR_PRESSED, // Control border color in STATE_PRESSED BORDER_COLOR_PRESSED = 6, // Control border color in STATE_PRESSED
BASE_COLOR_PRESSED, // Control base color in STATE_PRESSED BASE_COLOR_PRESSED = 7, // Control base color in STATE_PRESSED
TEXT_COLOR_PRESSED, // Control text color in STATE_PRESSED TEXT_COLOR_PRESSED = 8, // Control text color in STATE_PRESSED
BORDER_COLOR_DISABLED, // Control border color in STATE_DISABLED BORDER_COLOR_DISABLED = 9, // Control border color in STATE_DISABLED
BASE_COLOR_DISABLED, // Control base color in STATE_DISABLED BASE_COLOR_DISABLED = 10, // Control base color in STATE_DISABLED
TEXT_COLOR_DISABLED, // Control text color in STATE_DISABLED TEXT_COLOR_DISABLED = 11, // Control text color in STATE_DISABLED
BORDER_WIDTH = 12, // 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_PADDING = 13, // Control text padding, not considering border
//TEXT_SPACING, // Control text spacing between glyphs -> GLOBAL for all controls TEXT_ALIGNMENT = 14, // Control text horizontal alignment inside control text bound (after border and padding)
//TEXT_LINE_SPACING, // Control text spacing between lines -> GLOBAL for all controls BASEPROP16 = 15 // Not used yet...
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; } GuiControlProperty;
// TODO: Which text styling properties should be global or per-control?
// At this moment TEXT_PADDING and TEXT_ALIGNMENT is configured and saved per control while
// TEXT_SIZE, TEXT_SPACING, TEXT_LINE_SPACING, TEXT_ALIGNMENT_VERTICAL, TEXT_WRAP_MODE are global and
// should be configured by user as needed while defining the UI layout
// Gui extended properties depend on control // WARNING: Some properties have been chosen to be global with DEFAULT - EXTENDED properties:
// NOTE: RAYGUI_MAX_PROPS_EXTENDED properties (by default, max 8 properties) // - TEXT_SIZE, // Control text size (glyphs max height)
// - TEXT_SPACING, // Control text spacing between glyphs
// - TEXT_LINE_SPACING, // Control text spacing between lines
// - TEXT_WRAP_MODE // Control text wrap-mode inside text bounds
//
// While other properties can be setup per globally (DEFAULT) or per control:
// - TEXT_PADDING // Control text padding, not considering border
// - TEXT_ALIGNMENT // Control text horizontal alignment inside control text bound
// Controls EXTENDED properties (RAYGUI_MAX_PROPS_EXTENDED = 8)
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// DEFAULT extended properties // DEFAULT control, extended properties
// NOTE: Those properties are common to all controls or global // NOTE: Those properties are global for all controls, they can not be setup per control
// WARNING: Only 8 slots vailable for those properties by default // WARNING: Only 8 slots vailable for those properties by default
typedef enum { typedef enum {
TEXT_SIZE = 16, // Text size (glyphs max height) TEXT_SIZE = 16, // Text size (glyphs max height)
TEXT_SPACING, // Text spacing between glyphs TEXT_SPACING = 17, // Text spacing between glyphs
LINE_COLOR, // Line control color LINE_COLOR = 18, // Line control color
BACKGROUND_COLOR, // Background color BACKGROUND_COLOR = 19, // Background color
TEXT_LINE_SPACING, // Text spacing between lines TEXT_LINE_SPACING = 20, // Text spacing between lines
TEXT_ALIGNMENT_VERTICAL, // Text vertical alignment inside text bounds (after border and padding) TEXT_ALIGNMENT_VERTICAL = 21, // Text vertical alignment inside text bounds (after border and padding)
TEXT_WRAP_MODE // Text wrap-mode inside text bounds TEXT_WRAP_MODE = 22, // Text wrap-mode inside text bounds
//TEXT_DECORATION // Text decoration: 0-None, 1-Underline, 2-Line-through, 3-Overline EXTPROP08 = 23 // Not used yet...
//TEXT_DECORATION_THICK // Text decoration line thickness
} GuiDefaultProperty; } GuiDefaultProperty;
// Other possible text properties: // Other possible text extended properties:
// TEXT_WEIGHT // Normal, Italic, Bold -> Requires specific font change // TEXT_DECORATION // Text decoration: 0-None, 1-Underline, 2-Line-through, 3-Overline
// TEXT_INDENT // Text indentation -> Now using TEXT_PADDING... // TEXT_DECORATION_THICK // Text decoration line thickness
// TEXT_FONT_WEIGHT // Text font weight: Normal, Italic, Bold -> Requires specific font change
// Label // Label
//typedef enum { } GuiLabelProperty; //typedef enum { } GuiLabelProperty;
@ -699,13 +703,16 @@ typedef enum {
} GuiValueBoxProperty; } GuiValueBoxProperty;
// TabBar // TabBar
typedef enum { typedef enum {
TAB_ITEMS_WIDTH = 16, // TabBar tab items width TAB_ITEMS_WIDTH = 16, // TabBar tab items width
TAB_CLOSE_BUTTON, // TabBar tab close button (0-Not shown, 1-Shown) TAB_CLOSE_BUTTON, // TabBar tab close button (0-Not shown, 1-Shown)
TAB_LINE_SIDE, // TabBar tabs side (0-Bottom, 1-Top) TAB_LINE_SIDE, // TabBar tabs side (0-Bottom, 1-Top)
} GuiTabBarProperty; } GuiTabBarProperty;
// ListView // ListView
#define SCROLLBAR_LEFT_SIDE 0
#define SCROLLBAR_RIGHT_SIDE 1
typedef enum { typedef enum {
LIST_ITEMS_HEIGHT = 16, // ListView items height LIST_ITEMS_HEIGHT = 16, // ListView items height
LIST_ITEMS_SPACING, // ListView items separation LIST_ITEMS_SPACING, // ListView items separation
@ -724,9 +731,6 @@ typedef enum {
HUEBAR_SELECTOR_OVERFLOW // ColorPicker right hue bar selector overflow HUEBAR_SELECTOR_OVERFLOW // ColorPicker right hue bar selector overflow
} GuiColorPickerProperty; } GuiColorPickerProperty;
#define SCROLLBAR_LEFT_SIDE 0
#define SCROLLBAR_RIGHT_SIDE 1
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Global Variables Definition // Global Variables Definition
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
@ -1804,7 +1808,7 @@ int GuiTabBar(Rectangle bounds, char **text, int count, int *active)
{ {
int result = -1; int result = -1;
//GuiState state = guiState; //GuiState state = guiState;
int tabItemsWidth = GuiGetStyle(TABBAR, TAB_ITEMS_WIDTH); int tabItemsWidth = GuiGetStyle(TABBAR, TAB_ITEMS_WIDTH);
Rectangle tabBounds = { bounds.x, bounds.y, tabItemsWidth, bounds.height }; Rectangle tabBounds = { bounds.x, bounds.y, tabItemsWidth, bounds.height };
@ -1860,7 +1864,7 @@ int GuiTabBar(Rectangle bounds, char **text, int count, int *active)
#if defined(RAYGUI_NO_ICONS) #if defined(RAYGUI_NO_ICONS)
if (GuiButton(RAYGUI_CLITERAL(Rectangle){ tabBounds.x + tabBounds.width - 14 - 5, tabBounds.y + 5, 14, 14 }, "x")) result = i; if (GuiButton(RAYGUI_CLITERAL(Rectangle){ tabBounds.x + tabBounds.width - 14 - 5, tabBounds.y + 5, 14, 14 }, "x")) result = i;
#else #else
if (GuiButton(RAYGUI_CLITERAL(Rectangle){ tabBounds.x + tabBounds.width - 14 - 5, tabBounds.y + 5, 14, 14 }, if (GuiButton(RAYGUI_CLITERAL(Rectangle){ tabBounds.x + tabBounds.width - 14 - 5, tabBounds.y + 5, 14, 14 },
GuiIconText(ICON_CROSS_SMALL, NULL))) result = i; GuiIconText(ICON_CROSS_SMALL, NULL))) result = i;
#endif #endif
GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth);
@ -2194,7 +2198,7 @@ int GuiToggleGroup(Rectangle bounds, const char *text, int *active)
float initBoundsY = bounds.y; float initBoundsY = bounds.y;
// Text parsing needed to consider potential row and col entries (vertical/horizontal layout) // Text parsing needed to consider potential row and col entries (vertical/horizontal layout)
// when '\n' found move vertically next toggle, when ';' found move horizontally // when '\n' found move vertically next toggle, when ';' found move horizontally
for (int c = 0, k = 0, itemIndex = 0, row = 0, col = 0, exit = 0; exit == 0; c++) for (int c = 0, k = 0, itemIndex = 0, row = 0, col = 0, exit = 0; exit == 0; c++)
{ {
// Process text to get items one by one // Process text to get items one by one
@ -4308,10 +4312,10 @@ int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, co
((*secretViewActive == 1) || textEditMode)? text : stars, textMaxSize, textEditMode)) textEditMode = !textEditMode; ((*secretViewActive == 1) || textEditMode)? text : stars, textMaxSize, textEditMode)) textEditMode = !textEditMode;
#if defined(RAYGUI_NO_ICONS) #if defined(RAYGUI_NO_ICONS)
GuiToggle(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x + textBoxBounds.width - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.y, RAYGUI_TEXTINPUTBOX_HEIGHT, RAYGUI_TEXTINPUTBOX_HEIGHT }, GuiToggle(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x + textBoxBounds.width - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.y, RAYGUI_TEXTINPUTBOX_HEIGHT, RAYGUI_TEXTINPUTBOX_HEIGHT },
(*secretViewActive == 1)? "O" : "*", secretViewActive); (*secretViewActive == 1)? "O" : "*", secretViewActive);
#else #else
GuiToggle(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x + textBoxBounds.width - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.y, RAYGUI_TEXTINPUTBOX_HEIGHT, RAYGUI_TEXTINPUTBOX_HEIGHT }, GuiToggle(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x + textBoxBounds.width - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.y, RAYGUI_TEXTINPUTBOX_HEIGHT, RAYGUI_TEXTINPUTBOX_HEIGHT },
(*secretViewActive == 1)? GuiIconText(ICON_EYE_ON, NULL) : GuiIconText(ICON_EYE_OFF, NULL), secretViewActive); (*secretViewActive == 1)? GuiIconText(ICON_EYE_ON, NULL) : GuiIconText(ICON_EYE_OFF, NULL), secretViewActive);
#endif #endif
} }
@ -4790,7 +4794,7 @@ void GuiLoadStyleDefault(void)
GuiSetStyle(DEFAULT, TEXT_SPACING, 1); // DEFAULT, shared by all controls GuiSetStyle(DEFAULT, TEXT_SPACING, 1); // DEFAULT, shared by all controls
GuiSetStyle(DEFAULT, LINE_COLOR, 0x90abb5ff); // DEFAULT specific property GuiSetStyle(DEFAULT, LINE_COLOR, 0x90abb5ff); // DEFAULT specific property
GuiSetStyle(DEFAULT, BACKGROUND_COLOR, 0xf5f5f5ff); // DEFAULT specific property GuiSetStyle(DEFAULT, BACKGROUND_COLOR, 0xf5f5f5ff); // DEFAULT specific property
GuiSetStyle(DEFAULT, TEXT_LINE_SPACING, 5); // DEFAULT, pixels between lines, from bottom of first line to top of second GuiSetStyle(DEFAULT, TEXT_LINE_SPACING, 12); // DEFAULT, pixels between lines, from bottom of first line to top of second
GuiSetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL, TEXT_ALIGN_MIDDLE); // DEFAULT, text aligned vertically to middle of text-bounds GuiSetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL, TEXT_ALIGN_MIDDLE); // DEFAULT, text aligned vertically to middle of text-bounds
// Initialize control-specific property values // Initialize control-specific property values
@ -4934,7 +4938,7 @@ char **GuiLoadIcons(const char *fileName, bool loadIconsName)
{ {
unsigned char *fileData = NULL; unsigned char *fileData = NULL;
int dataSize = 0; int dataSize = 0;
fseek(rgiFile, 0, SEEK_END); fseek(rgiFile, 0, SEEK_END);
int size = (int)ftell(rgiFile); int size = (int)ftell(rgiFile);
fseek(rgiFile, 0, SEEK_SET); fseek(rgiFile, 0, SEEK_SET);
@ -4944,10 +4948,10 @@ char **GuiLoadIcons(const char *fileName, bool loadIconsName)
fileData = (unsigned char *)RL_CALLOC(size, sizeof(unsigned char)); fileData = (unsigned char *)RL_CALLOC(size, sizeof(unsigned char));
// WARNING: File can be partially loaded but ignoring it for simplicity // WARNING: File can be partially loaded but ignoring it for simplicity
dataSize = fread(fileData, sizeof(unsigned char), size, rgiFile); dataSize = fread(fileData, sizeof(unsigned char), size, rgiFile);
guiIconsName = GuiLoadIconsFromMemory(fileData, dataSize, loadIconsName); guiIconsName = GuiLoadIconsFromMemory(fileData, dataSize, loadIconsName);
} }
fclose(rgiFile); fclose(rgiFile);
} }