From a17f36a5ee60b0ce09933f27f54abc988a28a32b Mon Sep 17 00:00:00 2001 From: Roy Qu Date: Sat, 25 Jun 2022 18:33:19 +0800 Subject: [PATCH] add new templates --- linux/templates/epitrochoid.ico | Bin 0 -> 180542 bytes linux/templates/epitrochoid.template | 20 ++ linux/templates/epitrochoid_c.txt | 112 +++++++++++ linux/templates/hypotrochoid.ico | Bin 0 -> 96662 bytes linux/templates/hypotrochoid.template | 20 ++ linux/templates/hypotrochoid_c.txt | 119 +++++++++++ linux/templates/raygui.ico | Bin 0 -> 204862 bytes linux/templates/raygui.template | 21 ++ linux/templates/raygui_c.txt | 251 ++++++++++++++++++++++++ windows/templates/epitrochoid.ico | Bin 0 -> 180542 bytes windows/templates/epitrochoid.template | 20 ++ windows/templates/epitrochoid_c.txt | 112 +++++++++++ windows/templates/hypotrochoid.ico | Bin 0 -> 96662 bytes windows/templates/hypotrochoid.template | 20 ++ windows/templates/hypotrochoid_c.txt | 119 +++++++++++ windows/templates/raygui.ico | Bin 0 -> 204862 bytes windows/templates/raygui.template | 21 ++ windows/templates/raygui_c.txt | 251 ++++++++++++++++++++++++ 18 files changed, 1086 insertions(+) create mode 100644 linux/templates/epitrochoid.ico create mode 100644 linux/templates/epitrochoid.template create mode 100644 linux/templates/epitrochoid_c.txt create mode 100644 linux/templates/hypotrochoid.ico create mode 100644 linux/templates/hypotrochoid.template create mode 100644 linux/templates/hypotrochoid_c.txt create mode 100644 linux/templates/raygui.ico create mode 100644 linux/templates/raygui.template create mode 100644 linux/templates/raygui_c.txt create mode 100644 windows/templates/epitrochoid.ico create mode 100644 windows/templates/epitrochoid.template create mode 100644 windows/templates/epitrochoid_c.txt create mode 100644 windows/templates/hypotrochoid.ico create mode 100644 windows/templates/hypotrochoid.template create mode 100644 windows/templates/hypotrochoid_c.txt create mode 100644 windows/templates/raygui.ico create mode 100644 windows/templates/raygui.template create mode 100644 windows/templates/raygui_c.txt diff --git a/linux/templates/epitrochoid.ico b/linux/templates/epitrochoid.ico new file mode 100644 index 0000000000000000000000000000000000000000..34a221ab0604f5e70b45c901ec6f18305cd1ce95 GIT binary patch literal 180542 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 +#include +#include + +#define RAYGUI_IMPLEMENTATION +#include + +void updateRadius(int baseL, int outerL, int *pBaseR, int *pOuterR) { + int totalL=baseL+outerL+outerL; + int totalR = 420; + int remainder = totalR % totalL; + if (remainder!=0) { + if (remainder < totalL / 2) { + totalR -= remainder; + } else { + totalR += ( totalL - remainder); + } + } + *pBaseR = (totalR) / totalL * baseL; + *pOuterR = (totalR) / totalL * outerL; +} + + +int main() { + int baseL=2; + int outerL=13; + int baseR,outerR; + int cx=450,cy=450; + int speed = 1; + Color trackColor = BLUE; + updateRadius(baseL, outerL, &baseR, &outerR); + InitWindow(1300,900,"Epitrochoid"); + SetTraceLogLevel(LOG_WARNING); + SetTargetFPS(60); + GuiSetStyle(DEFAULT,TEXT_SIZE,20); + + Image trackImage=GenImageColor(900,900,WHITE); + //border + ImageFillRectangleEx(&trackImage,0,0,900,900,LIGHTGRAY); + ImageFillRectangleEx(&trackImage,5,5,890,890,WHITE); + + Image circlesImage = GenImageColor(900,900,BLANK); + float r=0; + int lastx,lasty; + lasty=cy; + lastx=cx+(baseR+outerR+outerR); + int frameCount = 0; + while(!WindowShouldClose()) { + //GUI + int newOuterL = GuiSliderBar((Rectangle){ 70, 20, 200, 30 },"Outer",TextFormat("%i", (int)outerL), outerL, 1, 50); + int newBaseL = GuiSliderBar((Rectangle){ 70, 60, 200, 30 },"Base",TextFormat("%i", (int)baseL), baseL, 1, 50); + speed = GuiSliderBar((Rectangle){ 70, 120, 200, 30 },"Speed",TextFormat("%i", (int)speed), speed, 1, 50); + GuiLabel((Rectangle){ 20, 220, 80, 30 },TextFormat("Color: 0x%X%X%X ",(int)(trackColor.r), (int)(trackColor.g),(int)(trackColor.b))); + trackColor= GuiColorPicker((Rectangle){ 50, 250, 196, 192 }, NULL, trackColor); + int doClear = GuiButton((Rectangle){ 120, 700, 80, 30 },"Clear"); + if (newOuterL!=outerL || newBaseL!=baseL) { + outerL=newOuterL; + baseL=newBaseL; + updateRadius(baseL, outerL, &baseR, &outerR); + lasty=cy; + lastx=cx+(baseR+outerR+outerR); + r=0; + ImageClearBackground(&trackImage,WHITE); + ImageFillRectangleEx(&trackImage,0,0,900,900,LIGHTGRAY); + ImageFillRectangleEx(&trackImage,5,5,890,890,WHITE); + } else if (doClear) { + ImageClearBackground(&trackImage,WHITE); + ImageFillRectangleEx(&trackImage,0,0,900,900,LIGHTGRAY); + ImageFillRectangleEx(&trackImage,5,5,890,890,WHITE); + } + //update datas + r+=0.01; + float outerCX=cx+ (baseR+outerR)*cos(r); + float outerCY=cy+ (baseR+outerR)*sin(r); + float theta = r * baseL / outerL; + int x=round(outerCX + outerR * cos(theta)); + int y=round(outerCY + outerR * sin(theta)); + + //update image (in CPU) + //ImageClearBackground(&trackImage,WHITE); + ImageDrawLineEx(&trackImage,lastx,lasty,x,y,3,trackColor); + + frameCount++; + if (frameCount>=speed) { + ImageClearBackground(&circlesImage,BLANK); + //base circle + ImageDrawCircleEx(&circlesImage,cx,cy,baseR,1,LIGHTRED); + ImageDrawCircleEx(&circlesImage,outerCX,outerCY,outerR,1,LIGHTSLATEGRAY); + ImageDrawPointEx(&circlesImage,x,y,7,RED); + + //Drawing in GPU + Texture trackTexture = LoadTextureFromImage(trackImage); + Texture circlesTexture = LoadTextureFromImage(circlesImage); + BeginDrawing(); + ClearBackground(WHITE); + DrawTexture(trackTexture,300,0,WHITE); + DrawTexture(circlesTexture,300,0,WHITE); + EndDrawing(); + UnloadTexture(circlesTexture); + UnloadTexture(trackTexture); + frameCount=0; + } + + lastx=x; + lasty=y; + } + + //Clean up + UnloadImage(circlesImage); + UnloadImage(trackImage); + CloseWindow(); +} diff --git a/linux/templates/hypotrochoid.ico b/linux/templates/hypotrochoid.ico new file mode 100644 index 0000000000000000000000000000000000000000..bff8482f6a25bcd0f6642cd4295f7f4bd55b6472 GIT binary patch literal 96662 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 +#include +#include + +#define RAYGUI_IMPLEMENTATION +#include + +void updateRadius(int baseL, int innerL, int *pBaseR, int *pInnerR) { + int totalL=baseL; + if (innerL>baseL) + totalL = (2*innerL-baseL); + int totalR = 420; + int remainder = totalR % totalL; + if (remainder!=0) { + if (remainder < totalL / 2) { + totalR -= remainder; + } else { + totalR += ( totalL - remainder); + } + } + if (innerL=speed) { + ImageClearBackground(&circlesImage,BLANK); + //base circle + ImageDrawCircleEx(&circlesImage,cx,cy,baseR,1,LIGHTRED); + ImageDrawCircleEx(&circlesImage,innerCX,innerCY,innerR,1,LIGHTSLATEGRAY); + ImageDrawPointEx(&circlesImage,x,y,7,RED); + + //Drawing in GPU + Texture trackTexture = LoadTextureFromImage(trackImage); + Texture circlesTexture = LoadTextureFromImage(circlesImage); + BeginDrawing(); + ClearBackground(WHITE); + DrawTexture(trackTexture,300,0,WHITE); + DrawTexture(circlesTexture,300,0,WHITE); + EndDrawing(); + UnloadTexture(circlesTexture); + UnloadTexture(trackTexture); + frameCount=0; + } + + lastx=x; + lasty=y; + } + + //Clean up + UnloadImage(circlesImage); + UnloadImage(trackImage); + CloseWindow(); +} diff --git a/linux/templates/raygui.ico b/linux/templates/raygui.ico new file mode 100644 index 0000000000000000000000000000000000000000..b866811464af6c9d2ee9de66bc611bd5cc9cf06c GIT binary patch literal 204862 zcmeI$L6RiL4MfqVbO)K1TJpd=hEBzksA$@xAxZRfWv7p`>NPisLIi;L_}t9L$1jin z{`mXl1mB0GN*m?fPP=8mW`z*b$@^`)c+w1WE+mYT~@IFiLt9&<;r|a|o zX>@|sq;8^zJ_vmu5 z+VT49RUR+;H01x{!>9C?1IMx#zeksg)sEL+ukv`&ry>6rA3mkG95|MJd@m=@sr~Mr zJy$#avftga$2#Zl{qCMUS3CZ)-`%svI)D1j|0BRZMfBW{$Fh&_FBRGE?%BQ3es|Bl zUggJ&_HCVmls%Tc_&xfLY9qUc``tbJdX*n9 z;{S2!`-;DmJ(j)rJ^GGnBfE$D-97tyl^-wS|8eR2iocXSmc95r`i^QNyNCPTJ^Ol< zA1~tnaq0VtW7*?KkMGfU&yK?*-0$w$QEG(y-90->jc~uaXGf`X$p0h2GoPRG%W99|@9x=AYJ~gUJv&N`aKF1}N2znj|0BRNpP%x}aiquhm|@S3!z0}9?%7dl zg!|n+J4%gkzq@BgsdLExBfvACpYqFbq{sJ|Vb6}kBi!%q*->hQ``tY|N{w*8yJttK zbIAWAz%!qp^2>3g$M=|F&yK?*-0$w$QEG(y-90->jc~uaXGf`X$o~QG>2R=py3YCH zUU_8qa12}gnQ+Y-NP})IJ{@a;d99U0r2T?uzkAD`Ql!AWcP3sABRWw zO1M`Z**zR%jKh0&96pC{?*AExU*3uU|KDoe9y9Q6T~T7cRv}F#`OL zq1LF70RIb@Vx$-W{>M;jR7imTg-bC~i~#>*s5L4i!2iOf7%4`8|1s1W6%yco;Zlqg zBf$R{YK;mB@V{^=Mv4*Oe+;!og#`FtxD+GB2=G6KTBAY&{4ZRJkzxe+A49ECAp!mu zF2zVO0{oAm)~JvG{|lF5q!)|H7phDMo<*G1M9r z65xN~Qj8QM!2cL(jS30yzi=r=iV@&{47Emu1o&UL6eGn5@IQuHqe24wFI*#Yiy%{Ewm5sE`2v3zuS~7y9Q6T~T7cRv}F#`OLq1LF70RIb@Vx$-W{>M;jR7imTg-bC~ zi~#>*s5L4i!2iOf7%4`8|1s1W6%yco;ZlqgBf$R{YK;mB@V{^=Mv4*Oe+;!og#`Ft zxD+GB2=G6KTBAY&{4ZRJkzxe+A49ECAp!muF2zVO0{oAm)~JvG{|lF5q!)|H7phDMo<*G1M9r65xN~Qj8QM!2cL(jS30yzi=r=iV@&{ z47Emu1o&UL6eGn5@IQuHqe24wFI*#Yiy%{Ewm5sE`2v3zuS~ z7y9Q6T~T7cRv} zF#`OLq1LF70RIb@Vx$-W{>M;jR7imTg-bC~i~#>*s5L4i!2iOf7%4{JZvWLs009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ yfjof^e+VFe00IagfB*srAb literal 0 HcmV?d00001 diff --git a/linux/templates/raygui.template b/linux/templates/raygui.template new file mode 100644 index 00000000..86a7cd62 --- /dev/null +++ b/linux/templates/raygui.template @@ -0,0 +1,21 @@ +[Template] +ver=2 +Name=raygui +Name[zh_CN]=raygui +Icon=raygui.ico +Description=raygui demo +Description[zh_CN]=Raygui演示 +Category=Multimedia +Category[zh_CN]=多媒体 + +[Unit0] +CName=main.c +C=raygui_c.txt + +[Project] +UnitCount=1 +Type=1 +IsCpp=0 +linker=-lraylib -lopengl32 -lgdi32 -lwinmm +ExecEncoding=UTF-8 + diff --git a/linux/templates/raygui_c.txt b/linux/templates/raygui_c.txt new file mode 100644 index 00000000..e5be517e --- /dev/null +++ b/linux/templates/raygui_c.txt @@ -0,0 +1,251 @@ +/******************************************************************************************* +* +* raygui - controls test suite +* +* TEST CONTROLS: +* - GuiDropdownBox() +* - GuiCheckBox() +* - GuiSpinner() +* - GuiValueBox() +* - GuiTextBox() +* - GuiButton() +* - GuiComboBox() +* - GuiListView() +* - GuiToggleGroup() +* - GuiTextBoxMulti() +* - GuiColorPicker() +* - GuiSlider() +* - GuiSliderBar() +* - GuiProgressBar() +* - GuiColorBarAlpha() +* - GuiScrollPanel() +* +* +* DEPENDENCIES: +* raylib 4.0 - Windowing/input management and drawing. +* raygui 3.2 - Immediate-mode GUI controls. +* +* COMPILATION (Windows - MinGW): +* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99 +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2016-2022 Ramon Santamaria (@raysan5) +* +**********************************************************************************************/ + +#include "raylib.h" + +#define RAYGUI_IMPLEMENTATION +//#define RAYGUI_CUSTOM_ICONS // It requires providing gui_icons.h in the same directory +//#include "gui_icons.h" // External icons data provided, it can be generated with rGuiIcons tool +#include "raygui/raygui.h" + +#include // Required for: strcpy() + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main() +{ + // Initialization + //--------------------------------------------------------------------------------------- + const int screenWidth = 690; + const int screenHeight = 560; + + InitWindow(screenWidth, screenHeight, "raygui - controls test suite"); + SetExitKey(0); + + // GUI controls initialization + //---------------------------------------------------------------------------------- + //GuiSetStyle(DEFAULT,TEXT_SIZE,16); + int dropdownBox000Active = 0; + bool dropDown000EditMode = false; + + int dropdownBox001Active = 0; + bool dropDown001EditMode = false; + + int spinner001Value = 0; + bool spinnerEditMode = false; + + int valueBox002Value = 0; + bool valueBoxEditMode = false; + + char textBoxText[64] = "Text box"; + bool textBoxEditMode = false; + + int listViewScrollIndex = 0; + int listViewActive = -1; + + int listViewExScrollIndex = 0; + int listViewExActive = 2; + int listViewExFocus = -1; + const char *listViewExList[8] = { "This", "is", "a", "list view", "with", "disable", "elements", "amazing!" }; + + char multiTextBoxText[256] = "Multi text box"; + bool multiTextBoxEditMode = false; + Color colorPickerValue = RED; + + int sliderValue = 50; + int sliderBarValue = 60; + float progressValue = 0.4f; + + bool forceSquaredChecked = false; + + float alphaValue = 0.5f; + + int comboBoxActive = 1; + + int toggleGroupActive = 0; + + Vector2 viewScroll = { 0, 0 }; + //---------------------------------------------------------------------------------- + + // Custom GUI font loading + //Font font = LoadFontEx("fonts/rainyhearts16.ttf", 12, 0, 0); + //GuiSetFont(font); + + bool exitWindow = false; + bool showMessageBox = false; + + char textInput[256] = { 0 }; + bool showTextInputBox = false; + + char textInputFileName[256] = { 0 }; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!exitWindow) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + exitWindow = WindowShouldClose(); + + if (IsKeyPressed(KEY_ESCAPE)) showMessageBox = !showMessageBox; + + if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_S)) showTextInputBox = true; + +// incompatible with raylib 4.0 +// if (IsFileDropped()) +// { +// int dropFileCount = 0; +// char **droppedFiles = LoadDroppedFiles(&dropFileCount); +// +// if ((dropFileCount > 0) && IsFileExtension(droppedFiles[0], ".rgs")) GuiLoadStyle(droppedFiles[0]); +// +// UnloadDroppedFiles(); // Clear internal buffers +// } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); + + // raygui: controls drawing + //---------------------------------------------------------------------------------- + if (dropDown000EditMode || dropDown001EditMode) GuiLock(); + else if (!dropDown000EditMode && !dropDown001EditMode) GuiUnlock(); + //GuiDisable(); + + // First GUI column + //GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + forceSquaredChecked = GuiCheckBox((Rectangle){ 25, 108, 15, 15 }, "FORCE CHECK!", forceSquaredChecked); + + GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + //GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + if (GuiSpinner((Rectangle){ 25, 135, 125, 30 }, NULL, &spinner001Value, 0, 100, spinnerEditMode)) spinnerEditMode = !spinnerEditMode; + if (GuiValueBox((Rectangle){ 25, 175, 125, 30 }, NULL, &valueBox002Value, 0, 100, valueBoxEditMode)) valueBoxEditMode = !valueBoxEditMode; + GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + if (GuiTextBox((Rectangle){ 25, 215, 125, 30 }, textBoxText, 64, textBoxEditMode)) textBoxEditMode = !textBoxEditMode; + + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + + if (GuiButton((Rectangle){ 25, 255, 125, 30 }, GuiIconText(ICON_FILE_SAVE, "Save File"))) showTextInputBox = true; + + GuiGroupBox((Rectangle){ 25, 310, 125, 150 }, "STATES"); + //GuiLock(); + GuiSetState(STATE_NORMAL); if (GuiButton((Rectangle){ 30, 320, 115, 30 }, "NORMAL")) { } + GuiSetState(STATE_FOCUSED); if (GuiButton((Rectangle){ 30, 355, 115, 30 }, "FOCUSED")) { } + GuiSetState(STATE_PRESSED); if (GuiButton((Rectangle){ 30, 390, 115, 30 }, "#15#PRESSED")) { } + GuiSetState(STATE_DISABLED); if (GuiButton((Rectangle){ 30, 425, 115, 30 }, "DISABLED")) { } + GuiSetState(STATE_NORMAL); + //GuiUnlock(); + + comboBoxActive = GuiComboBox((Rectangle){ 25, 470, 125, 30 }, "ONE;TWO;THREE;FOUR", comboBoxActive); + + // NOTE: GuiDropdownBox must draw after any other control that can be covered on unfolding + GuiSetStyle(DROPDOWNBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + if (GuiDropdownBox((Rectangle){ 25, 65, 125, 30 }, "#01#ONE;#02#TWO;#03#THREE;#04#FOUR", &dropdownBox001Active, dropDown001EditMode)) dropDown001EditMode = !dropDown001EditMode; + + GuiSetStyle(DROPDOWNBOX, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + if (GuiDropdownBox((Rectangle){ 25, 25, 125, 30 }, "ONE;TWO;THREE", &dropdownBox000Active, dropDown000EditMode)) dropDown000EditMode = !dropDown000EditMode; + + // Second GUI column + listViewActive = GuiListView((Rectangle){ 165, 25, 140, 140 }, "Charmander;Bulbasaur;#18#Squirtel;Pikachu;Eevee;Pidgey", &listViewScrollIndex, listViewActive); + listViewExActive = GuiListViewEx((Rectangle){ 165, 180, 140, 200 }, listViewExList, 8, &listViewExFocus, &listViewExScrollIndex, listViewExActive); + + toggleGroupActive = GuiToggleGroup((Rectangle){ 165, 400, 140, 25 }, "#1#ONE\n#3#TWO\n#8#THREE\n#23#", toggleGroupActive); + + // Third GUI column + if (GuiTextBoxMulti((Rectangle){ 320, 25, 225, 140 }, multiTextBoxText, 256, multiTextBoxEditMode)) multiTextBoxEditMode = !multiTextBoxEditMode; + colorPickerValue = GuiColorPicker((Rectangle){ 320, 185, 196, 192 }, NULL, colorPickerValue); + + sliderValue = GuiSlider((Rectangle){ 355, 400, 165, 20 }, "TEST", TextFormat("%2.2f", (float)sliderValue), sliderValue, -50, 100); + sliderBarValue = GuiSliderBar((Rectangle){ 320, 430, 200, 20 }, NULL, TextFormat("%i", (int)sliderBarValue), sliderBarValue, 0, 100); + progressValue = GuiProgressBar((Rectangle){ 320, 460, 200, 20 }, NULL, NULL, progressValue, 0, 1); + + // NOTE: View rectangle could be used to perform some scissor test + Rectangle view = GuiScrollPanel((Rectangle){ 560, 25, 100, 160 }, NULL, (Rectangle){ 560, 25, 200, 400 }, &viewScroll); + + GuiPanel((Rectangle){ 560, 25 + 180, 100, 160 }, "Panel Info"); + + GuiGrid((Rectangle) { 560, 25 + 180 + 180, 100, 120 }, NULL, 20, 2); + + GuiStatusBar((Rectangle){ 0, (float)GetScreenHeight() - 20, (float)GetScreenWidth(), 20 }, "This is a status bar"); + + alphaValue = GuiColorBarAlpha((Rectangle){ 320, 490, 200, 30 }, NULL, alphaValue); + + if (showMessageBox) + { + DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, 0.8f)); + int result = GuiMessageBox((Rectangle){ (float)GetScreenWidth()/2 - 125, (float)GetScreenHeight()/2 - 50, 250, 100 }, GuiIconText(ICON_EXIT, "Close Window"), "Do you really want to exit?", "Yes;No"); + + if ((result == 0) || (result == 2)) showMessageBox = false; + else if (result == 1) exitWindow = true; + } + + if (showTextInputBox) + { + DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, 0.8f)); + int result = GuiTextInputBox((Rectangle){ (float)GetScreenWidth()/2 - 120, (float)GetScreenHeight()/2 - 60, 240, 140 }, "Save", GuiIconText(ICON_FILE_SAVE, "Save file as..."), "Ok;Cancel", textInput, 255, NULL); + + if (result == 1) + { + // TODO: Validate textInput value and save + + strcpy(textInputFileName, textInput); + } + + if ((result == 0) || (result == 1) || (result == 2)) + { + showTextInputBox = false; + strcpy(textInput, "\0"); + } + } + //---------------------------------------------------------------------------------- + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/windows/templates/epitrochoid.ico b/windows/templates/epitrochoid.ico new file mode 100644 index 0000000000000000000000000000000000000000..34a221ab0604f5e70b45c901ec6f18305cd1ce95 GIT binary patch literal 180542 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 +#include +#include + +#define RAYGUI_IMPLEMENTATION +#include + +void updateRadius(int baseL, int outerL, int *pBaseR, int *pOuterR) { + int totalL=baseL+outerL+outerL; + int totalR = 420; + int remainder = totalR % totalL; + if (remainder!=0) { + if (remainder < totalL / 2) { + totalR -= remainder; + } else { + totalR += ( totalL - remainder); + } + } + *pBaseR = (totalR) / totalL * baseL; + *pOuterR = (totalR) / totalL * outerL; +} + + +int main() { + int baseL=2; + int outerL=13; + int baseR,outerR; + int cx=450,cy=450; + int speed = 1; + Color trackColor = BLUE; + updateRadius(baseL, outerL, &baseR, &outerR); + InitWindow(1300,900,"Epitrochoid"); + SetTraceLogLevel(LOG_WARNING); + SetTargetFPS(60); + GuiSetStyle(DEFAULT,TEXT_SIZE,20); + + Image trackImage=GenImageColor(900,900,WHITE); + //border + ImageFillRectangleEx(&trackImage,0,0,900,900,LIGHTGRAY); + ImageFillRectangleEx(&trackImage,5,5,890,890,WHITE); + + Image circlesImage = GenImageColor(900,900,BLANK); + float r=0; + int lastx,lasty; + lasty=cy; + lastx=cx+(baseR+outerR+outerR); + int frameCount = 0; + while(!WindowShouldClose()) { + //GUI + int newOuterL = GuiSliderBar((Rectangle){ 70, 20, 200, 30 },"Outer",TextFormat("%i", (int)outerL), outerL, 1, 50); + int newBaseL = GuiSliderBar((Rectangle){ 70, 60, 200, 30 },"Base",TextFormat("%i", (int)baseL), baseL, 1, 50); + speed = GuiSliderBar((Rectangle){ 70, 120, 200, 30 },"Speed",TextFormat("%i", (int)speed), speed, 1, 50); + GuiLabel((Rectangle){ 20, 220, 80, 30 },TextFormat("Color: 0x%X%X%X ",(int)(trackColor.r), (int)(trackColor.g),(int)(trackColor.b))); + trackColor= GuiColorPicker((Rectangle){ 50, 250, 196, 192 }, NULL, trackColor); + int doClear = GuiButton((Rectangle){ 120, 700, 80, 30 },"Clear"); + if (newOuterL!=outerL || newBaseL!=baseL) { + outerL=newOuterL; + baseL=newBaseL; + updateRadius(baseL, outerL, &baseR, &outerR); + lasty=cy; + lastx=cx+(baseR+outerR+outerR); + r=0; + ImageClearBackground(&trackImage,WHITE); + ImageFillRectangleEx(&trackImage,0,0,900,900,LIGHTGRAY); + ImageFillRectangleEx(&trackImage,5,5,890,890,WHITE); + } else if (doClear) { + ImageClearBackground(&trackImage,WHITE); + ImageFillRectangleEx(&trackImage,0,0,900,900,LIGHTGRAY); + ImageFillRectangleEx(&trackImage,5,5,890,890,WHITE); + } + //update datas + r+=0.01; + float outerCX=cx+ (baseR+outerR)*cos(r); + float outerCY=cy+ (baseR+outerR)*sin(r); + float theta = r * baseL / outerL; + int x=round(outerCX + outerR * cos(theta)); + int y=round(outerCY + outerR * sin(theta)); + + //update image (in CPU) + //ImageClearBackground(&trackImage,WHITE); + ImageDrawLineEx(&trackImage,lastx,lasty,x,y,3,trackColor); + + frameCount++; + if (frameCount>=speed) { + ImageClearBackground(&circlesImage,BLANK); + //base circle + ImageDrawCircleEx(&circlesImage,cx,cy,baseR,1,LIGHTRED); + ImageDrawCircleEx(&circlesImage,outerCX,outerCY,outerR,1,LIGHTSLATEGRAY); + ImageDrawPointEx(&circlesImage,x,y,7,RED); + + //Drawing in GPU + Texture trackTexture = LoadTextureFromImage(trackImage); + Texture circlesTexture = LoadTextureFromImage(circlesImage); + BeginDrawing(); + ClearBackground(WHITE); + DrawTexture(trackTexture,300,0,WHITE); + DrawTexture(circlesTexture,300,0,WHITE); + EndDrawing(); + UnloadTexture(circlesTexture); + UnloadTexture(trackTexture); + frameCount=0; + } + + lastx=x; + lasty=y; + } + + //Clean up + UnloadImage(circlesImage); + UnloadImage(trackImage); + CloseWindow(); +} diff --git a/windows/templates/hypotrochoid.ico b/windows/templates/hypotrochoid.ico new file mode 100644 index 0000000000000000000000000000000000000000..bff8482f6a25bcd0f6642cd4295f7f4bd55b6472 GIT binary patch literal 96662 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 +#include +#include + +#define RAYGUI_IMPLEMENTATION +#include + +void updateRadius(int baseL, int innerL, int *pBaseR, int *pInnerR) { + int totalL=baseL; + if (innerL>baseL) + totalL = (2*innerL-baseL); + int totalR = 420; + int remainder = totalR % totalL; + if (remainder!=0) { + if (remainder < totalL / 2) { + totalR -= remainder; + } else { + totalR += ( totalL - remainder); + } + } + if (innerL=speed) { + ImageClearBackground(&circlesImage,BLANK); + //base circle + ImageDrawCircleEx(&circlesImage,cx,cy,baseR,1,LIGHTRED); + ImageDrawCircleEx(&circlesImage,innerCX,innerCY,innerR,1,LIGHTSLATEGRAY); + ImageDrawPointEx(&circlesImage,x,y,7,RED); + + //Drawing in GPU + Texture trackTexture = LoadTextureFromImage(trackImage); + Texture circlesTexture = LoadTextureFromImage(circlesImage); + BeginDrawing(); + ClearBackground(WHITE); + DrawTexture(trackTexture,300,0,WHITE); + DrawTexture(circlesTexture,300,0,WHITE); + EndDrawing(); + UnloadTexture(circlesTexture); + UnloadTexture(trackTexture); + frameCount=0; + } + + lastx=x; + lasty=y; + } + + //Clean up + UnloadImage(circlesImage); + UnloadImage(trackImage); + CloseWindow(); +} diff --git a/windows/templates/raygui.ico b/windows/templates/raygui.ico new file mode 100644 index 0000000000000000000000000000000000000000..b866811464af6c9d2ee9de66bc611bd5cc9cf06c GIT binary patch literal 204862 zcmeI$L6RiL4MfqVbO)K1TJpd=hEBzksA$@xAxZRfWv7p`>NPisLIi;L_}t9L$1jin z{`mXl1mB0GN*m?fPP=8mW`z*b$@^`)c+w1WE+mYT~@IFiLt9&<;r|a|o zX>@|sq;8^zJ_vmu5 z+VT49RUR+;H01x{!>9C?1IMx#zeksg)sEL+ukv`&ry>6rA3mkG95|MJd@m=@sr~Mr zJy$#avftga$2#Zl{qCMUS3CZ)-`%svI)D1j|0BRZMfBW{$Fh&_FBRGE?%BQ3es|Bl zUggJ&_HCVmls%Tc_&xfLY9qUc``tbJdX*n9 z;{S2!`-;DmJ(j)rJ^GGnBfE$D-97tyl^-wS|8eR2iocXSmc95r`i^QNyNCPTJ^Ol< zA1~tnaq0VtW7*?KkMGfU&yK?*-0$w$QEG(y-90->jc~uaXGf`X$p0h2GoPRG%W99|@9x=AYJ~gUJv&N`aKF1}N2znj|0BRNpP%x}aiquhm|@S3!z0}9?%7dl zg!|n+J4%gkzq@BgsdLExBfvACpYqFbq{sJ|Vb6}kBi!%q*->hQ``tY|N{w*8yJttK zbIAWAz%!qp^2>3g$M=|F&yK?*-0$w$QEG(y-90->jc~uaXGf`X$o~QG>2R=py3YCH zUU_8qa12}gnQ+Y-NP})IJ{@a;d99U0r2T?uzkAD`Ql!AWcP3sABRWw zO1M`Z**zR%jKh0&96pC{?*AExU*3uU|KDoe9y9Q6T~T7cRv}F#`OL zq1LF70RIb@Vx$-W{>M;jR7imTg-bC~i~#>*s5L4i!2iOf7%4`8|1s1W6%yco;Zlqg zBf$R{YK;mB@V{^=Mv4*Oe+;!og#`FtxD+GB2=G6KTBAY&{4ZRJkzxe+A49ECAp!mu zF2zVO0{oAm)~JvG{|lF5q!)|H7phDMo<*G1M9r z65xN~Qj8QM!2cL(jS30yzi=r=iV@&{47Emu1o&UL6eGn5@IQuHqe24wFI*#Yiy%{Ewm5sE`2v3zuS~7y9Q6T~T7cRv}F#`OLq1LF70RIb@Vx$-W{>M;jR7imTg-bC~ zi~#>*s5L4i!2iOf7%4`8|1s1W6%yco;ZlqgBf$R{YK;mB@V{^=Mv4*Oe+;!og#`Ft zxD+GB2=G6KTBAY&{4ZRJkzxe+A49ECAp!muF2zVO0{oAm)~JvG{|lF5q!)|H7phDMo<*G1M9r65xN~Qj8QM!2cL(jS30yzi=r=iV@&{ z47Emu1o&UL6eGn5@IQuHqe24wFI*#Yiy%{Ewm5sE`2v3zuS~ z7y9Q6T~T7cRv} zF#`OLq1LF70RIb@Vx$-W{>M;jR7imTg-bC~i~#>*s5L4i!2iOf7%4{JZvWLs009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ yfjof^e+VFe00IagfB*srAb literal 0 HcmV?d00001 diff --git a/windows/templates/raygui.template b/windows/templates/raygui.template new file mode 100644 index 00000000..86a7cd62 --- /dev/null +++ b/windows/templates/raygui.template @@ -0,0 +1,21 @@ +[Template] +ver=2 +Name=raygui +Name[zh_CN]=raygui +Icon=raygui.ico +Description=raygui demo +Description[zh_CN]=Raygui演示 +Category=Multimedia +Category[zh_CN]=多媒体 + +[Unit0] +CName=main.c +C=raygui_c.txt + +[Project] +UnitCount=1 +Type=1 +IsCpp=0 +linker=-lraylib -lopengl32 -lgdi32 -lwinmm +ExecEncoding=UTF-8 + diff --git a/windows/templates/raygui_c.txt b/windows/templates/raygui_c.txt new file mode 100644 index 00000000..e5be517e --- /dev/null +++ b/windows/templates/raygui_c.txt @@ -0,0 +1,251 @@ +/******************************************************************************************* +* +* raygui - controls test suite +* +* TEST CONTROLS: +* - GuiDropdownBox() +* - GuiCheckBox() +* - GuiSpinner() +* - GuiValueBox() +* - GuiTextBox() +* - GuiButton() +* - GuiComboBox() +* - GuiListView() +* - GuiToggleGroup() +* - GuiTextBoxMulti() +* - GuiColorPicker() +* - GuiSlider() +* - GuiSliderBar() +* - GuiProgressBar() +* - GuiColorBarAlpha() +* - GuiScrollPanel() +* +* +* DEPENDENCIES: +* raylib 4.0 - Windowing/input management and drawing. +* raygui 3.2 - Immediate-mode GUI controls. +* +* COMPILATION (Windows - MinGW): +* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99 +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2016-2022 Ramon Santamaria (@raysan5) +* +**********************************************************************************************/ + +#include "raylib.h" + +#define RAYGUI_IMPLEMENTATION +//#define RAYGUI_CUSTOM_ICONS // It requires providing gui_icons.h in the same directory +//#include "gui_icons.h" // External icons data provided, it can be generated with rGuiIcons tool +#include "raygui/raygui.h" + +#include // Required for: strcpy() + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main() +{ + // Initialization + //--------------------------------------------------------------------------------------- + const int screenWidth = 690; + const int screenHeight = 560; + + InitWindow(screenWidth, screenHeight, "raygui - controls test suite"); + SetExitKey(0); + + // GUI controls initialization + //---------------------------------------------------------------------------------- + //GuiSetStyle(DEFAULT,TEXT_SIZE,16); + int dropdownBox000Active = 0; + bool dropDown000EditMode = false; + + int dropdownBox001Active = 0; + bool dropDown001EditMode = false; + + int spinner001Value = 0; + bool spinnerEditMode = false; + + int valueBox002Value = 0; + bool valueBoxEditMode = false; + + char textBoxText[64] = "Text box"; + bool textBoxEditMode = false; + + int listViewScrollIndex = 0; + int listViewActive = -1; + + int listViewExScrollIndex = 0; + int listViewExActive = 2; + int listViewExFocus = -1; + const char *listViewExList[8] = { "This", "is", "a", "list view", "with", "disable", "elements", "amazing!" }; + + char multiTextBoxText[256] = "Multi text box"; + bool multiTextBoxEditMode = false; + Color colorPickerValue = RED; + + int sliderValue = 50; + int sliderBarValue = 60; + float progressValue = 0.4f; + + bool forceSquaredChecked = false; + + float alphaValue = 0.5f; + + int comboBoxActive = 1; + + int toggleGroupActive = 0; + + Vector2 viewScroll = { 0, 0 }; + //---------------------------------------------------------------------------------- + + // Custom GUI font loading + //Font font = LoadFontEx("fonts/rainyhearts16.ttf", 12, 0, 0); + //GuiSetFont(font); + + bool exitWindow = false; + bool showMessageBox = false; + + char textInput[256] = { 0 }; + bool showTextInputBox = false; + + char textInputFileName[256] = { 0 }; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!exitWindow) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + exitWindow = WindowShouldClose(); + + if (IsKeyPressed(KEY_ESCAPE)) showMessageBox = !showMessageBox; + + if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_S)) showTextInputBox = true; + +// incompatible with raylib 4.0 +// if (IsFileDropped()) +// { +// int dropFileCount = 0; +// char **droppedFiles = LoadDroppedFiles(&dropFileCount); +// +// if ((dropFileCount > 0) && IsFileExtension(droppedFiles[0], ".rgs")) GuiLoadStyle(droppedFiles[0]); +// +// UnloadDroppedFiles(); // Clear internal buffers +// } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); + + // raygui: controls drawing + //---------------------------------------------------------------------------------- + if (dropDown000EditMode || dropDown001EditMode) GuiLock(); + else if (!dropDown000EditMode && !dropDown001EditMode) GuiUnlock(); + //GuiDisable(); + + // First GUI column + //GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + forceSquaredChecked = GuiCheckBox((Rectangle){ 25, 108, 15, 15 }, "FORCE CHECK!", forceSquaredChecked); + + GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + //GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + if (GuiSpinner((Rectangle){ 25, 135, 125, 30 }, NULL, &spinner001Value, 0, 100, spinnerEditMode)) spinnerEditMode = !spinnerEditMode; + if (GuiValueBox((Rectangle){ 25, 175, 125, 30 }, NULL, &valueBox002Value, 0, 100, valueBoxEditMode)) valueBoxEditMode = !valueBoxEditMode; + GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + if (GuiTextBox((Rectangle){ 25, 215, 125, 30 }, textBoxText, 64, textBoxEditMode)) textBoxEditMode = !textBoxEditMode; + + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + + if (GuiButton((Rectangle){ 25, 255, 125, 30 }, GuiIconText(ICON_FILE_SAVE, "Save File"))) showTextInputBox = true; + + GuiGroupBox((Rectangle){ 25, 310, 125, 150 }, "STATES"); + //GuiLock(); + GuiSetState(STATE_NORMAL); if (GuiButton((Rectangle){ 30, 320, 115, 30 }, "NORMAL")) { } + GuiSetState(STATE_FOCUSED); if (GuiButton((Rectangle){ 30, 355, 115, 30 }, "FOCUSED")) { } + GuiSetState(STATE_PRESSED); if (GuiButton((Rectangle){ 30, 390, 115, 30 }, "#15#PRESSED")) { } + GuiSetState(STATE_DISABLED); if (GuiButton((Rectangle){ 30, 425, 115, 30 }, "DISABLED")) { } + GuiSetState(STATE_NORMAL); + //GuiUnlock(); + + comboBoxActive = GuiComboBox((Rectangle){ 25, 470, 125, 30 }, "ONE;TWO;THREE;FOUR", comboBoxActive); + + // NOTE: GuiDropdownBox must draw after any other control that can be covered on unfolding + GuiSetStyle(DROPDOWNBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + if (GuiDropdownBox((Rectangle){ 25, 65, 125, 30 }, "#01#ONE;#02#TWO;#03#THREE;#04#FOUR", &dropdownBox001Active, dropDown001EditMode)) dropDown001EditMode = !dropDown001EditMode; + + GuiSetStyle(DROPDOWNBOX, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + if (GuiDropdownBox((Rectangle){ 25, 25, 125, 30 }, "ONE;TWO;THREE", &dropdownBox000Active, dropDown000EditMode)) dropDown000EditMode = !dropDown000EditMode; + + // Second GUI column + listViewActive = GuiListView((Rectangle){ 165, 25, 140, 140 }, "Charmander;Bulbasaur;#18#Squirtel;Pikachu;Eevee;Pidgey", &listViewScrollIndex, listViewActive); + listViewExActive = GuiListViewEx((Rectangle){ 165, 180, 140, 200 }, listViewExList, 8, &listViewExFocus, &listViewExScrollIndex, listViewExActive); + + toggleGroupActive = GuiToggleGroup((Rectangle){ 165, 400, 140, 25 }, "#1#ONE\n#3#TWO\n#8#THREE\n#23#", toggleGroupActive); + + // Third GUI column + if (GuiTextBoxMulti((Rectangle){ 320, 25, 225, 140 }, multiTextBoxText, 256, multiTextBoxEditMode)) multiTextBoxEditMode = !multiTextBoxEditMode; + colorPickerValue = GuiColorPicker((Rectangle){ 320, 185, 196, 192 }, NULL, colorPickerValue); + + sliderValue = GuiSlider((Rectangle){ 355, 400, 165, 20 }, "TEST", TextFormat("%2.2f", (float)sliderValue), sliderValue, -50, 100); + sliderBarValue = GuiSliderBar((Rectangle){ 320, 430, 200, 20 }, NULL, TextFormat("%i", (int)sliderBarValue), sliderBarValue, 0, 100); + progressValue = GuiProgressBar((Rectangle){ 320, 460, 200, 20 }, NULL, NULL, progressValue, 0, 1); + + // NOTE: View rectangle could be used to perform some scissor test + Rectangle view = GuiScrollPanel((Rectangle){ 560, 25, 100, 160 }, NULL, (Rectangle){ 560, 25, 200, 400 }, &viewScroll); + + GuiPanel((Rectangle){ 560, 25 + 180, 100, 160 }, "Panel Info"); + + GuiGrid((Rectangle) { 560, 25 + 180 + 180, 100, 120 }, NULL, 20, 2); + + GuiStatusBar((Rectangle){ 0, (float)GetScreenHeight() - 20, (float)GetScreenWidth(), 20 }, "This is a status bar"); + + alphaValue = GuiColorBarAlpha((Rectangle){ 320, 490, 200, 30 }, NULL, alphaValue); + + if (showMessageBox) + { + DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, 0.8f)); + int result = GuiMessageBox((Rectangle){ (float)GetScreenWidth()/2 - 125, (float)GetScreenHeight()/2 - 50, 250, 100 }, GuiIconText(ICON_EXIT, "Close Window"), "Do you really want to exit?", "Yes;No"); + + if ((result == 0) || (result == 2)) showMessageBox = false; + else if (result == 1) exitWindow = true; + } + + if (showTextInputBox) + { + DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, 0.8f)); + int result = GuiTextInputBox((Rectangle){ (float)GetScreenWidth()/2 - 120, (float)GetScreenHeight()/2 - 60, 240, 140 }, "Save", GuiIconText(ICON_FILE_SAVE, "Save file as..."), "Ok;Cancel", textInput, 255, NULL); + + if (result == 1) + { + // TODO: Validate textInput value and save + + strcpy(textInputFileName, textInput); + } + + if ((result == 0) || (result == 1) || (result == 2)) + { + showTextInputBox = false; + strcpy(textInput, "\0"); + } + } + //---------------------------------------------------------------------------------- + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +}