From 2648c771e78d9e630db743ff44fd87dd705953ff Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 27 May 2023 20:39:10 +0200 Subject: [PATCH] Avoid control crash on NULL pointers --- src/raygui.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/raygui.h b/src/raygui.h index b8d90c6..9acb173 100644 --- a/src/raygui.h +++ b/src/raygui.h @@ -1667,6 +1667,9 @@ int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector int result = 0; GuiState state = guiState; + Rectangle temp = { 0 }; + if (view == NULL) view = &temp; + Vector2 scrollPos = { 0.0f, 0.0f }; if (scroll != NULL) scrollPos = *scroll; @@ -1887,6 +1890,9 @@ int GuiToggle(Rectangle bounds, const char *text, bool *active) int result = 0; GuiState state = guiState; + bool temp = false; + if (active == NULL) active = &temp; + // Update control //-------------------------------------------------------------------- if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) @@ -1936,6 +1942,9 @@ int GuiToggleGroup(Rectangle bounds, const char *text, int *active) int result = 0; float initBoundsX = bounds.x; + bool temp = false; + if (active == NULL) active = &temp; + bool toggle = false; // Required for individual toggles // Get substrings items from text (items pointers) @@ -1978,6 +1987,9 @@ int GuiCheckBox(Rectangle bounds, const char *text, bool *checked) int result = 0; GuiState state = guiState; + bool temp = false; + if (checked == NULL) checked = &temp; + Rectangle textBounds = { 0 }; if (text != NULL) @@ -2038,6 +2050,9 @@ int GuiComboBox(Rectangle bounds, const char *text, int *active) int result = 0; GuiState state = guiState; + int temp = 0; + if (active == NULL) active = &temp; + bounds.width -= (GuiGetStyle(COMBOBOX, COMBO_BUTTON_WIDTH) + GuiGetStyle(COMBOBOX, COMBO_BUTTON_SPACING)); Rectangle selector = { (float)bounds.x + bounds.width + GuiGetStyle(COMBOBOX, COMBO_BUTTON_SPACING), @@ -2673,6 +2688,9 @@ int GuiSliderPro(Rectangle bounds, const char *textLeft, const char *textRight, int result = 0; GuiState state = guiState; + float temp = (maxValue - minValue)/2.0f; + if (value == NULL) value = &temp; + int sliderValue = (int)(((*value - minValue)/(maxValue - minValue))*(bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH))); Rectangle slider = { bounds.x, bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH) + GuiGetStyle(SLIDER, SLIDER_PADDING), @@ -2797,6 +2815,9 @@ int GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight int result = 0; GuiState state = guiState; + float temp = (maxValue - minValue)/2.0f; + if (value == NULL) value = &temp; + Rectangle progress = { bounds.x + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), bounds.y + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) + GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING), 0, bounds.height - 2*GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) - 2*GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING) }; @@ -3311,6 +3332,9 @@ int GuiColorPicker(Rectangle bounds, const char *text, Color *color) { int result = 0; + Color temp = { 200, 0, 0, 255 }; + if (color == NULL) color = &temp; + GuiColorPanel(bounds, NULL, color); Rectangle boundsHue = { (float)bounds.x + bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_PADDING), (float)bounds.y, (float)GuiGetStyle(COLORPICKER, HUEBAR_WIDTH), (float)bounds.height };