From e67a2f2bbcec20e2a905c85d35726bde59ead7fc Mon Sep 17 00:00:00 2001 From: raysan5 Date: Sun, 31 Dec 2017 23:48:57 +0100 Subject: [PATCH] Working on DISABLE gui state addition --- design/raygui_style_table_dark_REV8.png | Bin 7869 -> 7866 bytes design/raygui_style_table_light_REV9.png | Bin 7433 -> 7430 bytes src/raygui.h | 556 +++++++++++++---------- 3 files changed, 317 insertions(+), 239 deletions(-) diff --git a/design/raygui_style_table_dark_REV8.png b/design/raygui_style_table_dark_REV8.png index bf68248e8afde8fd953cec7bbbdab013b64dddce..433fa49022828902d999e49a0dd5406bd52190cf 100644 GIT binary patch delta 964 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 comboCount - 1) active = comboCount - 1; - + int textWidth = MeasureText(comboText[active], styleGeneric[DEFAULT_TEXT_SIZE]); int textHeight = styleGeneric[DEFAULT_TEXT_SIZE]; if (bounds.width < textWidth) bounds.width = textWidth; if (bounds.height < textHeight) bounds.height = textHeight; - if (CheckCollisionPointRec(mousePoint, bounds) || - CheckCollisionPointRec(mousePoint, selector)) + // Update control + //-------------------------------------------------------------------- + if (state != DISABLED) { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = PRESSED; - else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) + Vector2 mousePoint = GetMousePosition(); + + if (CheckCollisionPointRec(mousePoint, bounds) || + CheckCollisionPointRec(mousePoint, selector)) { - active += 1; - if (active >= comboCount) active = 0; + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = PRESSED; + else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) + { + active += 1; + if (active >= comboCount) active = 0; + } + else state = FOCUSED; } - else state = FOCUSED; } //-------------------------------------------------------------------- @@ -879,6 +920,10 @@ RAYGUIDEF int GuiComboBox(Rectangle bounds, int comboCount, char **comboText, in selector.x + selector.width/2 - (MeasureText(FormatText("%i/%i", active + 1, comboCount), styleGeneric[DEFAULT_TEXT_SIZE])/2), selector.y + selector.height/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, styleGeneric[DEFAULT_TEXT_SIZE], GetColor(style[BUTTON_TEXT_COLOR_PRESSED])); + } break; + case DISABLED: + { + } break; default: break; } @@ -903,52 +948,54 @@ RAYGUIDEF void GuiGroupBox(Rectangle bounds, const char *text) // NOTE: Requires static variables: framesCounter RAYGUIDEF void GuiTextBox(Rectangle bounds, char *text, int textSize) { + GuiControlState state = guiState; static int framesCounter = 0; // Required for blinking cursor - #define KEY_BACKSPACE_TEXT 259 // GLFW BACKSPACE: 3 + 256 - - ControlState state = NORMAL; - - Vector2 mousePoint = GetMousePosition(); - // Update control //-------------------------------------------------------------------- - if (CheckCollisionPointRec(mousePoint, bounds)) + if (state != DISABLED) { - state = FOCUSED; // NOTE: PRESSED state is not used on this control - - framesCounter++; - - int letter = -1; - letter = GetKeyPressed(); - - if (letter != -1) - { - if (letter == KEY_BACKSPACE_TEXT) - { - for (int i = 0; i < textSize; i++) - { - if ((text[i] == '\0') && (i > 0)) - { - text[i - 1] = '\0'; - break; - } - } + Vector2 mousePoint = GetMousePosition(); - text[textSize - 1] = '\0'; - } - else + #define KEY_BACKSPACE_TEXT 259 // GLFW BACKSPACE: 3 + 256 + + if (CheckCollisionPointRec(mousePoint, bounds)) + { + state = FOCUSED; // NOTE: PRESSED state is not used on this control + + framesCounter++; + + int letter = -1; + letter = GetKeyPressed(); + + if (letter != -1) { - if ((letter >= 32) && (letter < 127)) + if (letter == KEY_BACKSPACE_TEXT) { for (int i = 0; i < textSize; i++) { - if (text[i] == '\0') + if ((text[i] == '\0') && (i > 0)) { - text[i] = (char)letter; + text[i - 1] = '\0'; break; } } + + text[textSize - 1] = '\0'; + } + else + { + if ((letter >= 32) && (letter < 127)) + { + for (int i = 0; i < textSize; i++) + { + if (text[i] == '\0') + { + text[i] = (char)letter; + break; + } + } + } } } } @@ -976,6 +1023,10 @@ RAYGUIDEF void GuiTextBox(Rectangle bounds, char *text, int textSize) } break; case PRESSED: break; // NOTE: PRESSED state is not used on this control + case DISABLED: + { + + } break; default: break; } //-------------------------------------------------------------------- @@ -984,35 +1035,33 @@ RAYGUIDEF void GuiTextBox(Rectangle bounds, char *text, int textSize) // Slider control, returns selected value RAYGUIDEF float GuiSlider(Rectangle bounds, float value, float minValue, float maxValue) { - ControlState state = NORMAL; + GuiControlState state = guiState; - Vector2 mousePoint = GetMousePosition(); - Rectangle slider = { bounds.x + (int)((value/(maxValue - minValue))*(bounds.width - 2*style[SLIDER_BORDER_WIDTH])) - 10, - bounds.y + style[SLIDER_BORDER_WIDTH], - 20, bounds.height - 2*style[SLIDER_BORDER_WIDTH] }; + bounds.y + style[SLIDER_BORDER_WIDTH], 20, bounds.height - 2*style[SLIDER_BORDER_WIDTH] }; // Update control //-------------------------------------------------------------------- - if (CheckCollisionPointRec(mousePoint, bounds)) + if (state != DISABLED) { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = PRESSED; - - // Get equivalent value from mousePoint.x - value = (((maxValue - minValue)*(mousePoint.x - (float)bounds.x))/(float)bounds.width) + minValue; - - if (value > maxValue) value = maxValue; - else if (value < minValue) value = minValue; + Vector2 mousePoint = GetMousePosition(); - slider.x = bounds.x + (int)(((value - minValue)/(maxValue - minValue))*(bounds.width - 2*style[SLIDER_BORDER_WIDTH])) - slider.width/2; - - // Snap to limits if mouse down moved outside limits - //if (slider.x < (bounds.x + style[SLIDER_BORDER_WIDTH])) slider.x = bounds.x + style[SLIDER_BORDER_WIDTH]; - //else if ((slider.x + slider.width) > (bounds.x + bounds.width - 2*style[SLIDER_BORDER_WIDTH])) slider.x = (bounds.x + bounds.width - 2*style[SLIDER_BORDER_WIDTH]) - slider.width; + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + state = PRESSED; + + // Get equivalent value and slider position from mousePoint.x + value = (((maxValue - minValue)*(mousePoint.x - (float)bounds.x))/(float)bounds.width) + minValue; + slider.x = bounds.x + (int)(((value - minValue)/(maxValue - minValue))*(bounds.width - 2*style[SLIDER_BORDER_WIDTH])) - slider.width/2; + + // Snap to limits if mouse down moved outside limits + //if (slider.x < (bounds.x + style[SLIDER_BORDER_WIDTH])) slider.x = bounds.x + style[SLIDER_BORDER_WIDTH]; + //else if ((slider.x + slider.width) > (bounds.x + bounds.width - 2*style[SLIDER_BORDER_WIDTH])) slider.x = (bounds.x + bounds.width - 2*style[SLIDER_BORDER_WIDTH]) - slider.width; + } + else state = FOCUSED; } - else state = FOCUSED; } //-------------------------------------------------------------------- @@ -1043,6 +1092,11 @@ RAYGUIDEF float GuiSlider(Rectangle bounds, float value, float minValue, float m DrawRectangleRecT(slider, GetColor(style[SLIDER_BASE_COLOR_PRESSED])); DrawRectangleT(slider.x + slider.width/2, slider.y, 1, slider.height, GetColor(style[SLIDER_BORDER_COLOR_PRESSED])); + } break; + case DISABLED: + { + + } break; default: break; } @@ -1054,32 +1108,30 @@ RAYGUIDEF float GuiSlider(Rectangle bounds, float value, float minValue, float m // Slider Bar control, returns selected value RAYGUIDEF float GuiSliderBar(Rectangle bounds, float value, float minValue, float maxValue) { - ControlState state = NORMAL; + GuiControlState state = guiState; - Vector2 mousePoint = GetMousePosition(); - - Rectangle slider = { bounds.x + style[SLIDERBAR_BORDER_WIDTH], - bounds.y + style[SLIDERBAR_BORDER_WIDTH] + style[SLIDERBAR_INNER_PADDING], + Rectangle slider = { bounds.x + style[SLIDERBAR_BORDER_WIDTH], bounds.y + style[SLIDERBAR_BORDER_WIDTH] + style[SLIDERBAR_INNER_PADDING], (int)(((value - minValue)/(maxValue - minValue))*(bounds.width - 2*style[SLIDERBAR_BORDER_WIDTH])), bounds.height - 2*style[SLIDERBAR_BORDER_WIDTH] - 2*style[SLIDERBAR_INNER_PADDING] }; // Update control //-------------------------------------------------------------------- - if (CheckCollisionPointRec(mousePoint, bounds)) + if (state != DISABLED) { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = PRESSED; - - // Get equivalent value from mousePoint.x - value = (maxValue - minValue)*((mousePoint.x - (float)bounds.x)/(float)bounds.width) + minValue; - - if (value > maxValue) value = maxValue; - else if (value < minValue) value = minValue; + Vector2 mousePoint = GetMousePosition(); - slider.width = (int)(((value - minValue)/(maxValue - minValue))*(bounds.width - 2*style[SLIDERBAR_BORDER_WIDTH])); + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + state = PRESSED; + + // Get equivalent value and slider width from mousePoint.x + value = (maxValue - minValue)*((mousePoint.x - (float)bounds.x)/(float)bounds.width) + minValue; + slider.width = (int)(((value - minValue)/(maxValue - minValue))*(bounds.width - 2*style[SLIDERBAR_BORDER_WIDTH])); + } + else state = FOCUSED; } - else state = FOCUSED; } //-------------------------------------------------------------------- @@ -1104,6 +1156,10 @@ RAYGUIDEF float GuiSliderBar(Rectangle bounds, float value, float minValue, floa DrawRectangleRecT(bounds, GetColor(style[SLIDERBAR_BORDER_COLOR_PRESSED])); DrawRectangleT(bounds.x + style[SLIDERBAR_BORDER_WIDTH], bounds.y + style[SLIDERBAR_BORDER_WIDTH], bounds.width - 2*style[SLIDERBAR_BORDER_WIDTH], bounds.height - 2*style[SLIDERBAR_BORDER_WIDTH], GetColor(style[SLIDERBAR_BASE_COLOR_NORMAL])); DrawRectangleRecT(slider, GetColor(style[SLIDERBAR_BASE_COLOR_PRESSED])); + } break; + case DISABLED: + { + } break; default: break; } @@ -1115,9 +1171,7 @@ RAYGUIDEF float GuiSliderBar(Rectangle bounds, float value, float minValue, floa // Progress Bar control, shows current progress value RAYGUIDEF float GuiProgressBar(Rectangle bounds, float value, float minValue, float maxValue) { - ControlState state = NORMAL; - - Vector2 mousePoint = GetMousePosition(); + GuiControlState state = guiState; Rectangle progress = { bounds.x + style[PROGRESSBAR_BORDER_WIDTH], bounds.y + style[PROGRESSBAR_BORDER_WIDTH] + style[PROGRESSBAR_INNER_PADDING], @@ -1126,12 +1180,14 @@ RAYGUIDEF float GuiProgressBar(Rectangle bounds, float value, float minValue, fl // Update control //-------------------------------------------------------------------- - if (value > maxValue) value = maxValue; - else if (value < minValue) value = minValue; - - progress.width = (int)(value/(maxValue - minValue)*(float)(bounds.width - 2*style[PROGRESSBAR_BORDER_WIDTH])); + if (state != DISABLED) + { + Vector2 mousePoint = GetMousePosition(); - //if (CheckCollisionPointRec(mousePoint, bounds)) state = FOCUSED; // State not required on ProgressBar + progress.width = (int)(value/(maxValue - minValue)*(float)(bounds.width - 2*style[PROGRESSBAR_BORDER_WIDTH])); + + //if (CheckCollisionPointRec(mousePoint, bounds)) state = FOCUSED; // State not required on ProgressBar + } //-------------------------------------------------------------------- // Draw control @@ -1153,6 +1209,11 @@ RAYGUIDEF float GuiProgressBar(Rectangle bounds, float value, float minValue, fl //DrawRectangleRecT(progress, GetColor(style[PROGRESSBAR_BASE_COLOR_FOCUSED])); } break; case PRESSED: break; + case DISABLED: + { + + + } break; default: break; } //-------------------------------------------------------------------- @@ -1163,15 +1224,12 @@ RAYGUIDEF float GuiProgressBar(Rectangle bounds, float value, float minValue, fl // Spinner control, returns selected value // NOTE: Requires static variables: framesCounter, valueSpeed - ERROR! RAYGUIDEF int GuiSpinner(Rectangle bounds, int value, int minValue, int maxValue) -{ - ControlState state = NORMAL; - +{ #define SPINNER_LEFT_BUTTON 1 #define SPINNER_RIGHT_BUTTON 2 - #define SPINNER_BUTTON_WIDTH 35 - - Vector2 mousePoint = GetMousePosition(); + + GuiControlState state = guiState; static int framesCounter = 0; static bool valueSpeed = false;; @@ -1187,77 +1245,82 @@ RAYGUIDEF int GuiSpinner(Rectangle bounds, int value, int minValue, int maxValue if (bounds.height < textHeight) bounds.height = textHeight; // Update control - //-------------------------------------------------------------------- - if (CheckCollisionPointRec(mousePoint, leftButtonBound)) + //-------------------------------------------------------------------- + if (state != DISABLED) { - state = FOCUSED; + Vector2 mousePoint = GetMousePosition(); - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + if (CheckCollisionPointRec(mousePoint, leftButtonBound)) { - state = PRESSED; - - if (!valueSpeed) - { - if (value > minValue) value--; - valueSpeed = true; - } - else framesCounter++; + state = FOCUSED; - if (value > minValue) + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) { - if (framesCounter >= 30) value -= 1; + state = PRESSED; + + if (!valueSpeed) + { + if (value > minValue) value--; + valueSpeed = true; + } + else framesCounter++; + + if (value > minValue) + { + if (framesCounter >= 30) value -= 1; + } } } - } - else if (CheckCollisionPointRec(mousePoint, rightButtonBound)) - { - state = FOCUSED; - - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + else if (CheckCollisionPointRec(mousePoint, rightButtonBound)) { - state = PRESSED; - - if (!valueSpeed) + state = FOCUSED; + + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) { - if (value < maxValue) value++; - valueSpeed = true; - } - else framesCounter++; + state = PRESSED; + + if (!valueSpeed) + { + if (value < maxValue) value++; + valueSpeed = true; + } + else framesCounter++; - if (value < maxValue) + if (value < maxValue) + { + if (framesCounter >= 30) value += 1; + } + } + } + + if (IsMouseButtonUp(MOUSE_LEFT_BUTTON)) + { + valueSpeed = false; + framesCounter = 0; + } + + /* + if (CheckCollisionPointRec(mousePoint, leftButtonBound) || + CheckCollisionPointRec(mousePoint, rightButtonBound) || + CheckCollisionPointRec(mousePoint, spinner)) + { + if (IsKeyDown(KEY_LEFT)) { - if (framesCounter >= 30) value += 1; + state = PRESSED; + buttonSide = 1; + + if (value > minValue) value -= 1; } - } - } + else if (IsKeyDown(KEY_RIGHT)) + { + state = PRESSED; + buttonSide = 2; - if (IsMouseButtonUp(MOUSE_LEFT_BUTTON)) - { - valueSpeed = false; - framesCounter = 0; - } - - /* - if (CheckCollisionPointRec(mousePoint, leftButtonBound) || - CheckCollisionPointRec(mousePoint, rightButtonBound) || - CheckCollisionPointRec(mousePoint, spinner)) - { - if (IsKeyDown(KEY_LEFT)) - { - state = PRESSED; - buttonSide = 1; - - if (value > minValue) value -= 1; - } - else if (IsKeyDown(KEY_RIGHT)) - { - state = PRESSED; - buttonSide = 2; - - if (value < maxValue) value += 1; + if (value < maxValue) value += 1; + } } + */ } - */ //-------------------------------------------------------------------- // Draw control @@ -1302,6 +1365,11 @@ RAYGUIDEF int GuiSpinner(Rectangle bounds, int value, int minValue, int maxValue DrawRectangleT(spinner.x + 1, spinner.y + 1, spinner.width - 2, spinner.height - 2, GetColor(style[SPINNER_BASE_COLOR_PRESSED])); DrawText(FormatText("%i", value), spinner.x + (spinner.width/2 - textWidth/2), spinner.y + (spinner.height/2 - (styleGeneric[DEFAULT_TEXT_SIZE]/2)), styleGeneric[DEFAULT_TEXT_SIZE], GetColor(style[SPINNER_TEXT_COLOR_PRESSED])); + } break; + case DISABLED: + { + + } break; default: break; } @@ -1312,18 +1380,21 @@ RAYGUIDEF int GuiSpinner(Rectangle bounds, int value, int minValue, int maxValue // Texture button control, returns true when clicked RAYGUIDEF bool GuiTexture(Rectangle bounds, Texture2D texture) { - ControlState state = NORMAL; - - Vector2 mousePoint = GetMousePosition(); + GuiControlState state = guiState; bool clicked = false; - + // Update control //-------------------------------------------------------------------- - if (CheckCollisionPointRec(mousePoint, bounds)) // Check button state + if (state != DISABLED) { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = PRESSED; - else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) clicked = true; - else state = FOCUSED; + Vector2 mousePoint = GetMousePosition(); + + if (CheckCollisionPointRec(mousePoint, bounds)) // Check button state + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = PRESSED; + else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) clicked = true; + else state = FOCUSED; + } } //-------------------------------------------------------------------- @@ -1348,13 +1419,16 @@ RAYGUIDEF bool GuiTexture(Rectangle bounds, Texture2D texture) DrawRectangleRecT(bounds, GetColor(style[BUTTON_BORDER_COLOR_PRESSED])); DrawRectangleT(bounds.x + style[BUTTON_BORDER_WIDTH], bounds.y + style[BUTTON_BORDER_WIDTH], bounds.width - 2*style[BUTTON_BORDER_WIDTH], bounds.height - 2*style[BUTTON_BORDER_WIDTH], GetColor(style[BUTTON_BASE_COLOR_PRESSED])); DrawTexture(texture, bounds.x, bounds.y, GetColor(style[BUTTON_BASE_COLOR_PRESSED])); + } break; + case DISABLED: + { + } break; default: break; } //------------------------------------------------------------------ - if (clicked) return true; - else return false; + return clicked; } // Color Picker control @@ -1367,7 +1441,7 @@ RAYGUIDEF bool GuiTexture(Rectangle bounds, Texture2D texture) // unsigned char GuiColorBarLuminance() [BLACK->WHITE] Color GuiColorPicker(Rectangle bounds, Color color) { - ControlState state = NORMAL; + GuiControlState state = NORMAL; Vector2 mousePoint = GetMousePosition(); @@ -1520,6 +1594,10 @@ Color GuiColorPicker(Rectangle bounds, Color color) return color; } + +RAYGUIDEF void GuiEnable(void) { guiState = NORMAL; } // Enable gui global state +RAYGUIDEF void GuiDisable(void) { guiState = DISABLED; } // Disable gui global state + #if defined(RAYGUI_STYLE_SAVE_LOAD) // Load GUI style from an image file RAYGUIDEF void LoadGuiStyleImage(const char *fileName)