From b65daa1702607e6c6c4245df73930e32c241e5c5 Mon Sep 17 00:00:00 2001 From: Ray San Date: Tue, 6 Feb 2018 09:43:03 +0100 Subject: [PATCH] Updated tool WIP --- .../design/rguistyler2_light_REV4.png | Bin 0 -> 54012 bytes tools/rGuiStyler/rguistyler.c | 284 ++++++++---------- 2 files changed, 123 insertions(+), 161 deletions(-) create mode 100644 tools/rGuiStyler/design/rguistyler2_light_REV4.png diff --git a/tools/rGuiStyler/design/rguistyler2_light_REV4.png b/tools/rGuiStyler/design/rguistyler2_light_REV4.png new file mode 100644 index 0000000000000000000000000000000000000000..b952b359dd0f20b8f196581ddefe93121c7c2c1a GIT binary patch literal 54012 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 J>n!~e{s$qizBm8? literal 0 HcmV?d00001 diff --git a/tools/rGuiStyler/rguistyler.c b/tools/rGuiStyler/rguistyler.c index e75d778..51dce5e 100644 --- a/tools/rGuiStyler/rguistyler.c +++ b/tools/rGuiStyler/rguistyler.c @@ -57,28 +57,44 @@ #define STATUS_BAR_HEIGHT 25 #define NUM_CONTROLS 15 -#define NUM_STYLES 12 - -// NOTE: Be extremely careful when defining: NUM_CONTROLS, GuiElement, guiControlText, guiPropertyNum, guiPropertyType and guiPropertyPos -// All those variables must be coherent, one small mistake breaks the program (and it could take hours to find the error!) +#define NUM_STYLES 12 //---------------------------------------------------------------------------------- // Types and Structures Definition //---------------------------------------------------------------------------------- typedef enum { LABEL = 0, + LABELBUTTON, BUTTON, + IMAGEBUTTON, TOGGLE, TOGGLEGROUP, SLIDER, SLIDERBAR, PROGRESSBAR, + CHECKBOX, SPINNER, COMBOBOX, - CHECKBOX, - TEXTBOX + TEXTBOX, + LISTVIEW, + COLORPICKER } GuiControlType; +typedef enum { + BORDER_COLOR_NORMAL = 0, + BASE_COLOR_NORMAL, + TEXT_COLOR_NORMAL, + BORDER_COLOR_FOCUSED, + BASE_COLOR_FOCUSED, + TEXT_COLOR_FOCUSED, + BORDER_COLOR_PRESSED, + BASE_COLOR_PRESSED, + TEXT_COLOR_PRESSED, + BORDER_COLOR_DISABLED, + BASE_COLOR_DISABLED, + TEXT_COLOR_DISABLED +} GuiStyleType; + //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- @@ -116,40 +132,7 @@ const char *guiStylesText[NUM_STYLES] = { "BASE_COLOR_DISABLED", "TEXT_COLOR_DISABLED" }; -/* -const char *guiListText[30] = { - "This", - "is", - "afghj", - "test", - "aaaaaaa", - "bbbbbbb", - "ccccccc", - "ddddddd", - "eeeeeee", - "fffffff", - "ggggggg", - "hhhhhhh", - "iiiiiii", - "jjjjjjj", - "kkkkkkk", - "lllllll", - "mmmmmmm", - "nnnnnnn", - "ooooooo", - "ppppppp", - "qqqqqqq", - "rrrrrrr", - "sssssss", - "ttttttt", - "uuuuuuu", - "vvvvvvv", - "wwwwwww", - "xxxxxxx", - "yyyyyyy", - "zzzzzzz" -}; -*/ + //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- @@ -166,70 +149,49 @@ int main() const int screenWidth = 700; const int screenHeight = 700; - SetConfigFlags(FLAG_WINDOW_RESIZABLE); + //SetConfigFlags(FLAG_WINDOW_RESIZABLE); InitWindow(screenWidth, screenHeight, "rGuiStyler - raygui style editor"); - SetWindowMinSize(700, 700); + //SetWindowMinSize(700, 700); int dropsCount = 0; char **droppedFiles; - - - const int guiPropertyNum[NUM_CONTROLS] = { 3, 11, 14, 1, 7, 6, 4, 14, 18, 8, 6 }; - - // Defines if the property to change is a Color or a value to update it accordingly - // NOTE: 0 - Color, 1 - value - const unsigned char guiPropertyType[NUM_PROPERTIES] = { 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0, 0, 0, 1 }; - int aux = 0; - int guiPropertyPos[NUM_CONTROLS]; - - for (int i = 0; i < NUM_CONTROLS; i++) - { - guiPropertyPos[i] = aux; - aux += guiPropertyNum[i]; - } - - Rectangle guiControlListRec[NUM_CONTROLS]; - - for (int i = 0; i < NUM_CONTROLS; i++) guiControlListRec[i] = (Rectangle){ 0, 0 + i*CONTROL_LIST_HEIGHT, 140, CONTROL_LIST_HEIGHT }; - - int guiControlSelected = -1; - int guiControlHover = -1; - - - Rectangle guiPropertyListRec[NUM_PROPERTIES]; - - for (int j = 0; j < NUM_CONTROLS; j++) - { - for (int i = 0; i < guiPropertyNum[j]; i++) - { - if ((j + guiPropertyNum[j]) > 18) guiPropertyListRec[guiPropertyPos[j] + i] = (Rectangle){ guiControlListRec[0].width, guiControlListRec[18 - guiPropertyNum[j]].y + i*CONTROL_LIST_HEIGHT, 260, CONTROL_LIST_HEIGHT }; - else guiPropertyListRec[guiPropertyPos[j] + i] = (Rectangle){ guiControlListRec[0].width, guiControlListRec[j].y + i*CONTROL_LIST_HEIGHT, 260, CONTROL_LIST_HEIGHT }; - } - } - - int guiPropertySelected = -1; - int guiPropertyHover = -1; - //------------------------------------------------------------ - - // Gui area variables - //----------------------------------------------------------- - int guiPosX = 455; + int guiPosX = 340; int guiPosY = 35; - - int guiHeight = 30; - int guiWidth = 150; - int deltaY = 45; + // TODO: Define gui controls rectangles + Rectangle bounds[NUM_CONTROLS] = { + (Rectangle){ guiPosX + 20, guiPosY + 20, 30, 10 }, // LABEL + (Rectangle){ guiPosX + 60, guiPosY + 20, 62, 10 }, // LABELBUTTON + (Rectangle){ guiPosX + 140, guiPosY + 10, 150, 30 }, // BUTTON + (Rectangle){ guiPosX + 300, guiPosY + 10, 30, 30 }, // IMAGEBUTTON + (Rectangle){ guiPosX + 20, guiPosY + 60, 80, 30 }, // TOGGLE + (Rectangle){ guiPosX + 120, guiPosY + 60, 75, 30 }, // TOGGLEGROUP + (Rectangle){ guiPosX + 20, guiPosY + 110, 330, 30 }, // SLIDER + (Rectangle){ guiPosX + 20, guiPosY + 150, 330, 30 }, // SLIDERBAR + (Rectangle){ guiPosX + 20, guiPosY + 190, 290, 30 }, // PROGRESSBAR + (Rectangle){ guiPosX + 320, guiPosY + 190, 30, 30 }, // CHECKBOX + (Rectangle){ guiPosX + 20, guiPosY + 240, 150, 30 }, // SPINNER + (Rectangle){ guiPosX + 200, guiPosY + 240, 150, 30 }, // COMBOBOX + (Rectangle){ guiPosX + 20, guiPosY + 290, 150, 30 }, // TEXTBOX + (Rectangle){ 0, guiPosY, 140, GetScreenHeight() - 100 }, // LISTVIEW + (Rectangle){ guiPosX + 20, guiPosY + 330, 240, 240 }, // COLORPICKER + + + }; + + // Get current directory + // NOTE: Current working directory could not match current executable directory + GetCurrentDir(currentPath, sizeof(currentPath)); + currentPath[strlen(currentPath)] = '\\'; + currentPath[strlen(currentPath) + 1] = '\0'; // Not really required - int selectPosX = 401; - int selectWidth = screenWidth - 723; + GuiLoadStyleImage("resources/rguistyle_default_light.png"); + + Texture2D texIcons = LoadTexture("resources/icons.png"); + Texture2D texLogo = LoadTexture("resources/logo128x128.png"); + + SetTargetFPS(60); //------------------------------------------------------------ // Gui controls data @@ -254,24 +216,9 @@ int main() Vector2 colorPickerPos = { (float)screenWidth - 287, 20.0f }; Color colorPickerValue = RED; - Texture2D texIcons = LoadTexture("resources/icons.png"); - Texture2D texLogo = LoadTexture("resources/logo128x128.png"); int listViewActive = -1; int listViewStyleActive = -1; - - int controlsAnchorPos = 340; - //----------------------------------------------------------- - - // Get current directory - // NOTE: Current working directory could not match current executable directory - GetCurrentDir(currentPath, sizeof(currentPath)); - currentPath[strlen(currentPath)] = '\\'; - currentPath[strlen(currentPath) + 1] = '\0'; // Not really required - - GuiLoadStyleImage("resources/rguistyle_default_light.png"); - - SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -285,7 +232,7 @@ int main() GuiLoadStyle(droppedFiles[0]); ClearDroppedFiles(); } - + //colorPickerValue = GetColor(GuiGetStyleProperty(BUTTON_BASE_COLOR_NORMAL)); //GuiSetStyleProperty(BUTTON_BASE_COLOR_NORMAL, GetHexValue(colorPickerValue)); @@ -307,75 +254,63 @@ int main() DrawRectangle(0, GetScreenHeight() - 25, GetScreenWidth(), 25, LIGHTGRAY); //Draw top and bottom bars' text - GuiLabel((Rectangle){20, GetScreenHeight() - 18, guiWidth/2, guiHeight}, FormatText("CURRENT SELECTION: %s_%s", guiControlText[listViewActive], guiStylesText[listViewStyleActive])); - GuiLabel((Rectangle){controlsAnchorPos + 100, GetScreenHeight() - 18, guiWidth/2, guiHeight}, FormatText("SAVE STATUS: %s", guiText)); + GuiLabel((Rectangle){20, GetScreenHeight() - 18, 100, 20}, FormatText("CURRENT SELECTION: %s_%s", guiControlText[listViewActive], guiStylesText[listViewStyleActive])); + GuiLabel((Rectangle){guiPosX + 100, GetScreenHeight() - 18, 100, 20}, FormatText("SAVE STATUS: %s", guiText)); DrawText("CHOOSE CONTROL", 25, 10, styleGeneric[DEFAULT_TEXT_SIZE], LIGHTGRAY); DrawText("> CHOOSE PROPERTY STYLE", 140, 10, styleGeneric[DEFAULT_TEXT_SIZE], LIGHTGRAY); - DrawText("> STYLE VIEWER", controlsAnchorPos, 10, styleGeneric[DEFAULT_TEXT_SIZE], LIGHTGRAY); + DrawText("> STYLE VIEWER", guiPosX, 10, styleGeneric[DEFAULT_TEXT_SIZE], LIGHTGRAY); + - //Draw texture of the logo - DrawTexture(texLogo, 10, 540, WHITE); - - // Draw selected control rectangles - /*switch (listViewActive) - { - case LABEL: DrawRectangleLines(selectPosX + 10, guiPosY - 10, selectWidth - 20, guiHeight + 20, Fade(COLOR_REC, 0.8f)); break; - case BUTTON: DrawRectangleLines(selectPosX + 10, guiPosY + deltaY - 10, selectWidth - 20, guiHeight + 20, Fade(COLOR_REC, 0.8f)); break; - case TOGGLE: - case TOGGLEGROUP: DrawRectangleLines(selectPosX + 10, guiPosY + (2 * deltaY) - 10, selectWidth - 20, guiHeight + 80, Fade(COLOR_REC, 0.8f)); break; - case SLIDER: DrawRectangleLines(selectPosX + 10, guiPosY + (4 * deltaY) - 10, selectWidth - 20, guiHeight + 80, Fade(COLOR_REC, 0.8f)); break; - case PROGRESSBAR: DrawRectangleLines(selectPosX + 10, guiPosY + (6 * deltaY) - 10, selectWidth - 20, guiHeight + 20, Fade(COLOR_REC, 0.8f)); break; - case SPINNER: DrawRectangleLines(selectPosX + 10, guiPosY + (7 * deltaY) - 10, selectWidth - 20, guiHeight + 20, Fade(COLOR_REC, 0.8f)); break; - case COMBOBOX: DrawRectangleLines(selectPosX + 10, guiPosY + (8 * deltaY) - 10, selectWidth - 20, guiHeight + 20, Fade(COLOR_REC, 0.8f)); break; - case CHECKBOX: DrawRectangleLines(selectPosX + 10, guiPosY + (9 * deltaY) - 10, selectWidth - 20, guiHeight + 20, Fade(COLOR_REC, 0.8f)); break; - case TEXTBOX: DrawRectangleLines(selectPosX + 10, guiPosY + (10 * deltaY) - 10, selectWidth - 20, guiHeight + 20, Fade(COLOR_REC, 0.8f)); break; - default: break; - }*/ - listViewActive = GuiListView((Rectangle){ 0, guiPosY, 140, 720/1.5f }, guiControlText, NUM_CONTROLS, listViewActive); + // Gui controls + listViewActive = GuiListView(bounds[LISTVIEW], guiControlText, NUM_CONTROLS, listViewActive); - listViewStyleActive = GuiListView((Rectangle){ 145, guiPosY, 140, 720/1.5f }, guiStylesText, NUM_STYLES, listViewStyleActive); + if (listViewActive < 0) GuiDisable(); + listViewStyleActive = GuiListView((Rectangle){ 145, guiPosY, 180, GetScreenHeight() - 100 }, guiStylesText, NUM_STYLES, listViewStyleActive); + GuiEnable(); - GuiLabel((Rectangle){controlsAnchorPos, guiPosY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, "Label"); + GuiLabel(bounds[LABEL], "Label"); - //if (GuiButton((Rectangle){controlsAnchorPos, guiPosY + deltaY, guiWidth, guiHeight}, "Button")) { } + if (GuiLabelButton(bounds[LABELBUTTON], "LabelButton")) {} - if (GuiLabelButton((Rectangle){controlsAnchorPos + guiWidth/3, guiPosY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth, guiHeight}, "LabelButton")) {} + if (GuiImageButtonEx(bounds[IMAGEBUTTON], texIcons , (Rectangle){ 0, 0, texIcons.width/3, texIcons.height/6 }, "test")) { } - if (GuiImageButtonEx((Rectangle){ controlsAnchorPos + guiWidth*2.3f - guiWidth/3, guiPosY, texIcons.width/3, texIcons.height/6 }, texIcons , (Rectangle){ 0, 0, texIcons.width/3, texIcons.height/6 })) { } + if (toggle) toggle = GuiToggleButton(bounds[TOGGLE], "Toggle ACT", toggle); + else toggle = GuiToggleButton(bounds[TOGGLE], "Toggle INE", toggle); - if (toggle) toggle = GuiToggleButton((Rectangle){controlsAnchorPos, guiPosY + deltaY, guiWidth/2, guiHeight}, "Toggle ACT", toggle); - else toggle = GuiToggleButton((Rectangle){controlsAnchorPos, guiPosY + deltaY, guiWidth/2, guiHeight}, "Toggle INE", toggle); + toggleValue = GuiToggleGroup(bounds[TOGGLEGROUP], toggleGuiText, 3, toggleValue); - toggleValue = GuiToggleGroup((Rectangle){controlsAnchorPos + guiWidth/1.5f, guiPosY + deltaY, guiWidth/2, guiHeight}, toggleGuiText, 3, toggleValue); + sliderValue = GuiSlider(bounds[SLIDER], sliderValue, 0, 100); - sliderValue = GuiSlider((Rectangle){controlsAnchorPos, guiPosY + 2*deltaY, 2.2f*guiWidth, guiHeight}, sliderValue, 0, 100); + sliderBarValue = GuiSliderBar(bounds[SLIDERBAR], sliderBarValue, -10.0f, 40.0f); - sliderBarValue = GuiSliderBar((Rectangle){controlsAnchorPos, guiPosY + 3*deltaY, 2.2f*guiWidth, guiHeight}, sliderBarValue, -10.0f, 40.0f); + progressValue = GuiProgressBar(bounds[PROGRESSBAR], progressValue, 0.0f, 1.0f); - progressValue = GuiProgressBar((Rectangle){controlsAnchorPos, guiPosY + 4*deltaY, 1.9f*guiWidth, guiHeight}, progressValue, 0.0f, 1.0f); + spinnerValue = GuiSpinner(bounds[SPINNER], spinnerValue, 0, 100); - spinnerValue = GuiSpinner((Rectangle){controlsAnchorPos, guiPosY + 5*deltaY, guiWidth, guiHeight}, spinnerValue, 0, 100); - - comboActive = GuiComboBox((Rectangle){controlsAnchorPos + guiWidth*1.2f, guiPosY + 5*deltaY, guiWidth, guiHeight}, comboText, comboNum, comboActive); + comboActive = GuiComboBox(bounds[COMBOBOX], comboText, comboNum, comboActive); - checked = GuiCheckBox((Rectangle){controlsAnchorPos + guiWidth*2, guiPosY + 4*deltaY, guiWidth/5, guiHeight}, checked); + checked = GuiCheckBox(bounds[CHECKBOX], checked); - GuiTextBox((Rectangle){controlsAnchorPos, guiPosY + 6*deltaY, guiWidth, guiHeight}, guiText, 16); + GuiTextBox(bounds[TEXTBOX], guiText, 16); - colorPickerValue = GuiColorPicker((Rectangle){ controlsAnchorPos, guiPosY + 7*deltaY, 240, 240 }, colorPickerValue); + colorPickerValue = GuiColorPicker(bounds[COLORPICKER], colorPickerValue); - //Draw labels for GuiColorPicker information - GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 7*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("R: %i", colorPickerValue.r)); - GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 7.4f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("G: %i", colorPickerValue.g)); - GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 7.8f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("B: %i", colorPickerValue.b)); - GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 8.2f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("A: %i", colorPickerValue.a)); - GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 12.5f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("#%x", GetHexValue(colorPickerValue))); + // Draw labels for GuiColorPicker information + GuiGroupBox((Rectangle){ guiPosX + 300, guiPosY + 340, 50, 80 }, "RGBA"); + // GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 7.2f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("R: %i", colorPickerValue.r)); + // GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 7.5f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("G: %i", colorPickerValue.g)); + // GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 7.8f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("B: %i", colorPickerValue.b)); + // GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 8.1f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("A: %i", colorPickerValue.a)); + // GuiLabel((Rectangle){controlsAnchorPos + guiWidth*1.9f, guiPosY + 12.5f*deltaY + guiHeight/2 - styleGeneric[DEFAULT_TEXT_SIZE]/2, guiWidth/2, guiHeight}, FormatText("#%x", GetHexValue(colorPickerValue))); // Draw Load and Save buttons - if (GuiButton((Rectangle){ controlsAnchorPos + guiWidth*1.2f - guiWidth/3, guiPosY, guiWidth, guiHeight }, "Load Style")) BtnLoadStyle(); - if (GuiButton((Rectangle){ controlsAnchorPos + guiWidth*1.2f, guiPosY + 6*deltaY, guiWidth, guiHeight }, "Save Style")) BtnSaveStyle(); + if (GuiButton(bounds[BUTTON], "Load Style")) BtnLoadStyle(); + if (GuiButton((Rectangle){ guiPosX + 200, guiPosY + 290, 150, 30 }, "Save Style")) BtnSaveStyle(); + + // TODO: Draw selected control rectangles + if (listViewActive >= 0) DrawRectangleLinesEx(bounds[listViewActive], 1, RED); EndDrawing(); //---------------------------------------------------------------------------------- @@ -384,9 +319,9 @@ int main() //-------------------------------------------------------------------------------------- UnloadTexture(texIcons); UnloadTexture(texLogo); - ClearDroppedFiles(); // Clear internal buffers + ClearDroppedFiles(); // Clear internal buffers - CloseWindow(); // Close window and OpenGL context + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; @@ -426,3 +361,30 @@ static void BtnSaveStyle(void) fileName = ""; } } + +static int GetGuiStylePropertyIndex(int control, int property) +{ + int guiProp = -1; + + switch (control) + { + case LABEL: break; + case LABELBUTTON: break; + case BUTTON: guiProp = BUTTON_BORDER_COLOR_NORMAL + property; break; + case IMAGEBUTTON: break; + case TOGGLE: + case TOGGLEGROUP: guiProp = TOGGLE_BORDER_COLOR_NORMAL + property; break; + case SLIDER: break; + case SLIDERBAR: break; + case PROGRESSBAR: break; + case CHECKBOX: break; + case SPINNER: guiProp = SPINNER_BORDER_COLOR_NORMAL + property; break; + case COMBOBOX: guiProp = COMBOBOX_BORDER_COLOR_NORMAL + property; break; + case TEXTBOX: guiProp = TEXTBOX_BORDER_COLOR_NORMAL + property; break; + case LISTVIEW: guiProp = LISTVIEW_BORDER_COLOR_NORMAL + property; break; + case COLORPICKER: break; + default: break; + } + + return guiProp; +}