diff --git a/examples/animation_curve/animation_curve.c b/examples/animation_curve/animation_curve.c
index 7e8d28a..b1023db 100644
--- a/examples/animation_curve/animation_curve.c
+++ b/examples/animation_curve/animation_curve.c
@@ -37,8 +37,7 @@
//------------------------------------------------------------------------------------
// Helper function
//------------------------------------------------------------------------------------
-
-void LoadDefaults(GuiCurveEditState curves[]);
+void LoadCurveDefaults(GuiCurveEditState curves[]);
//------------------------------------------------------------------------------------
// Program main entry point
@@ -50,7 +49,7 @@ int main()
const int screenWidth = 800;
const int screenHeight = 540;
- InitWindow(screenWidth, screenHeight, "Animation curves");
+ InitWindow(screenWidth, screenHeight, "raygui - animation curves");
SetTargetFPS(60);
// Gui style
@@ -62,18 +61,18 @@ int main()
const float margin = 8;
// Gui states
- Vector2 scrollOffset = (Vector2) {0,0};
- Rectangle contentRect = (Rectangle) {0,0,0,0};
+ Vector2 scrollOffset = (Vector2){ 0, 0 };
+ Rectangle contentRect = (Rectangle){ 0, 0, 0, 0 };
bool moveSlider = false;
- bool sectionActive[5] = {false};
+ bool sectionActive[5] = { 0 };
sectionActive[0] = true;
- const char* sectionNames[5] = {"X Position", "Y Position", "Width", "Height", "Rotation"};
- bool editValueBox[5][4] = {false};
- char* valTextBox[5][4][20];
+ const char *sectionNames[5] = { "X Position", "Y Position", "Width", "Height", "Rotation" };
+ bool editValueBox[5][4] = { 0 };
+ char *valTextBox[5][4][20] = { 0 };
bool playAnimation = true;
bool showHelp = true;
- Rectangle settingsRect = (Rectangle) {screenWidth-screenWidth/3, 0, screenWidth/3, screenHeight};
+ Rectangle settingsRect = (Rectangle){ screenWidth - screenWidth/3, 0, screenWidth/3, screenHeight };
// Animation curves
// 0 -> Ball X position
@@ -81,13 +80,14 @@ int main()
// 2 -> Ball Width
// 3 -> Ball Height
// 4 -> Ball rotation
- GuiCurveEditState curves[5];
- LoadDefaults(curves);
+ GuiCurveEditState curves[5] = { 0 };
+ LoadCurveDefaults(curves);
// Animation time
- float time = 0.f;
- float animationTime = 4.f;
+ float time = 0.0f;
+ float animationTime = 4.0f;
+ //SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
@@ -95,22 +95,20 @@ int main()
{
// Update
//----------------------------------------------------------------------------------
-
- if(playAnimation)
- time += GetFrameTime();
+ if (playAnimation) time += GetFrameTime();
// Reset timer
- if(time > animationTime)
- time = 0;
+ if (time > animationTime) time = 0;
// Ball animation
- const float t = time / animationTime;
- Vector2 ballPos = (Vector2) {EvalGuiCurve(&curves[0], t), EvalGuiCurve(&curves[1], t)};
- Vector2 ballSize = (Vector2) {EvalGuiCurve(&curves[2], t), EvalGuiCurve(&curves[3], t)};
+ const float t = time/animationTime;
+ Vector2 ballPos = (Vector2){ EvalGuiCurve(&curves[0], t), EvalGuiCurve(&curves[1], t) };
+ Vector2 ballSize = (Vector2){ EvalGuiCurve(&curves[2], t), EvalGuiCurve(&curves[3], t) };
float ballRotation = EvalGuiCurve(&curves[4], t);
// Update style
- if(visualStyleActive != prevVisualStyleActive){
+ if (visualStyleActive != prevVisualStyleActive)
+ {
switch (visualStyleActive)
{
case 0: GuiLoadStyleDefault(); break;
@@ -122,26 +120,25 @@ int main()
case 6: GuiLoadStyleTerminal(); break;
default: break;
}
+
fontSize = GuiGetStyle(DEFAULT, TEXT_SIZE);
prevVisualStyleActive = visualStyleActive;
}
// Update settings panel rect
- Rectangle sliderRect = (Rectangle) {settingsRect.x-4, settingsRect.y, 4, settingsRect.height};
- if(CheckCollisionPointRec(GetMousePosition(), sliderRect) && IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){
- moveSlider = true;
- }
- if(IsMouseButtonUp(MOUSE_BUTTON_LEFT)){
- moveSlider = false;
- }
- if(moveSlider){
+ Rectangle sliderRect = (Rectangle){ settingsRect.x - 4, settingsRect.y, 4, settingsRect.height };
+ if (CheckCollisionPointRec(GetMousePosition(), sliderRect) && IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) moveSlider = true;
+ if (IsMouseButtonUp(MOUSE_BUTTON_LEFT)) moveSlider = false;
+
+ if (moveSlider)
+ {
settingsRect.x = GetMouseX();
+
// Minimum-Maximum size
- if(settingsRect.x > screenWidth-4)
- settingsRect.x = screenWidth-4;
- else if(settingsRect.x < 4) // width of the slider
- settingsRect.x = 4;
- settingsRect.width = screenWidth-settingsRect.x;
+ if (settingsRect.x > (screenWidth - 4)) settingsRect.x = screenWidth - 4;
+ else if (settingsRect.x < 4) settingsRect.x = 4;
+
+ settingsRect.width = screenWidth - settingsRect.x;
}
@@ -154,33 +151,30 @@ int main()
// Scene
//----------------------------------------------------------------------------------
+ DrawRectangle(curves[0].start, curves[1].end, curves[0].end-curves[0].start, curves[1].start-curves[1].end, BLUE); // Sky
- // sky
- DrawRectangle(curves[0].start, curves[1].end, curves[0].end-curves[0].start, curves[1].start-curves[1].end, BLUE);
-
- // ground
- DrawRectangle(curves[0].start, curves[1].start, curves[0].end-curves[0].start, 32, DARKGREEN);
+ DrawRectangle(curves[0].start, curves[1].start, curves[0].end-curves[0].start, 32, DARKGREEN); // Ground
BeginScissorMode(curves[0].start, curves[1].end, curves[0].end-curves[0].start, curves[1].start-curves[1].end+32);
- // Draw ball
- DrawRectanglePro((Rectangle){ballPos.x, ballPos.y, ballSize.x, ballSize.y}, (Vector2){ballSize.x/2.f,ballSize.y/2.f}, ballRotation, PINK);
- // Local origin
+
+ DrawRectanglePro((Rectangle){ballPos.x, ballPos.y, ballSize.x, ballSize.y}, (Vector2){ballSize.x/2.f,ballSize.y/2.f}, ballRotation, PINK); // Ball
+
DrawLine(ballPos.x, ballPos.y, ballPos.x + cosf(ballRotation*DEG2RAD)*ballSize.x, ballPos.y +sinf(ballRotation*DEG2RAD)*ballSize.y, RED);
DrawLine(ballPos.x, ballPos.y, ballPos.x + cosf((ballRotation+90)*DEG2RAD)*ballSize.x, ballPos.y +sinf((ballRotation+90)*DEG2RAD)*ballSize.y, GREEN);
+
EndScissorMode();
// Bounds
DrawRectangleLines(curves[0].start, curves[1].end, curves[0].end-curves[0].start, curves[1].start-curves[1].end+32, GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_NORMAL)));
-
+ //----------------------------------------------------------------------------------
+
// GUI
//----------------------------------------------------------------------------------
-
- // Help window
- if(showHelp){
- if(GuiWindowBox((Rectangle) {margin, margin, settingsRect.x-2*margin, curves[1].end-2*margin}, "help")){
- showHelp = false;
- }
- Rectangle helpTextRect = (Rectangle) {2*margin, 2*margin+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.x-4-4*margin, 0};
+ if (showHelp)
+ {
+ if (GuiWindowBox((Rectangle) {margin, margin, settingsRect.x-2*margin, curves[1].end-2*margin}, "help")) showHelp = false;
+
+ Rectangle helpTextRect = (Rectangle) { 2*margin, 2*margin+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.x - 4 - 4*margin, 0 };
GuiLabel((Rectangle) {helpTextRect.x, helpTextRect.y+helpTextRect.height, helpTextRect.width, fontSize}, "Curve widget controls:");
helpTextRect.height += fontSize+margin;
GuiLabel((Rectangle) {helpTextRect.x, helpTextRect.y+helpTextRect.height, helpTextRect.width, fontSize}, "- Left click to move/add point or move tangents");
@@ -189,189 +183,194 @@ int main()
helpTextRect.height += fontSize+margin/2;
GuiLabel((Rectangle) {helpTextRect.x, helpTextRect.y+helpTextRect.height, helpTextRect.width, fontSize}, "- Right click to remove a point");
helpTextRect.height += fontSize+margin/2;
- DrawRectangleGradientV(margin, margin+curves[1].end-2*margin, settingsRect.x-2*margin, 12, (Color){0,0,0,100}, BLANK);
+ DrawRectangleGradientV(margin, margin+curves[1].end - 2*margin, settingsRect.x - 2*margin, 12, (Color){ 0,0,0,100 }, BLANK);
}
// Settings panel
- GuiScrollPanel(settingsRect, "Settings", contentRect, &scrollOffset);
- // Clip rendering
+ GuiScrollPanel(settingsRect, "Settings", contentRect, &scrollOffset, NULL);
+
BeginScissorMode(settingsRect.x, settingsRect.y+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.width, settingsRect.height);
+
// Rebuild the content Rect
- contentRect = (Rectangle) {settingsRect.x+margin, RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT+margin, settingsRect.width-2*margin-GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), 0};
+ contentRect = (Rectangle){ settingsRect.x + margin, RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT+margin, settingsRect.width - 2*margin - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), 0 };
// Help button
- if(GuiButton((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize}, GuiIconText(showHelp ? ICON_EYE_ON : ICON_EYE_OFF, "Curve controls help"))){
- showHelp = !showHelp;
- }
+ if (GuiButton((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, 1.5*fontSize }, GuiIconText(showHelp? ICON_EYE_ON : ICON_EYE_OFF, "Curve controls help"))) showHelp = !showHelp;
+
contentRect.height += 1.5*fontSize + margin;
// Animation Time slider
- animationTime = GuiSlider((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width/2, fontSize}, NULL, TextFormat("Animation Time: %.2fs", animationTime), animationTime, 1, 8);
+ GuiSlider((Rectangle){ contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width/2, fontSize }, NULL, TextFormat("Animation Time: %.2fs", animationTime), &animationTime, 1, 8);
contentRect.height += fontSize + margin;
// Load default curves
- if(GuiButton((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize}, "Load default")){
- LoadDefaults(curves);
- animationTime = 4.f;
- time = 0.f;
+ if (GuiButton((Rectangle){ contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize }, "Load default"))
+ {
+ LoadCurveDefaults(curves);
+ animationTime = 4.0f;
+ time = 0.0f;
}
- contentRect.height += 1.5*fontSize + margin;
+ contentRect.height += 1.5f*fontSize + margin;
// Styles
- GuiLabel((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, fontSize}, "Style:");
+ GuiLabel((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, fontSize }, "Style:");
contentRect.height += fontSize;
- visualStyleActive = GuiComboBox((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize}, "default;Jungle;Lavanda;Dark;Bluish;Cyber;Terminal", visualStyleActive);
- contentRect.height += 1.5*fontSize + margin;
+ GuiComboBox((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize }, "default;Jungle;Lavanda;Dark;Bluish;Cyber;Terminal", &visualStyleActive);
+ contentRect.height += 1.5f*fontSize + margin;
// Draw curves with their controls
//----------------------------------------------------------------------------------
- for(int i=0; i < 5; i++){
+ for (int i = 0; i < 5; i++)
+ {
// Collapsing section
- Rectangle headerRect = (Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize};
+ Rectangle headerRect = (Rectangle){ contentRect.x, contentRect.y + contentRect.height+scrollOffset.y, contentRect.width, 1.5f*fontSize };
GuiStatusBar(headerRect, NULL);
- if(GuiLabelButton(headerRect, GuiIconText(sectionActive[i] ? ICON_ARROW_DOWN_FILL : ICON_ARROW_RIGHT_FILL, sectionNames[i]))){
- sectionActive[i] = !sectionActive[i];
- }
- contentRect.height += 1.5*fontSize + margin;
+
+ if (GuiLabelButton(headerRect, GuiIconText(sectionActive[i] ? ICON_ARROW_DOWN_FILL : ICON_ARROW_RIGHT_FILL, sectionNames[i]))) sectionActive[i] = !sectionActive[i];
+
+ contentRect.height += 1.5f*fontSize + margin;
// Skip this section
- if(!sectionActive[i])
- continue;
+ if (!sectionActive[i]) continue;
// Draw curve control
- Rectangle curveRect = (Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, fontSize*12};
+ Rectangle curveRect = (Rectangle){ contentRect.x, contentRect.y+contentRect.height + scrollOffset.y, contentRect.width, fontSize*12 };
EndScissorMode(); // Stop clipping from setting rect
+
// Curves can leaks from control boundary... scissor it !
BeginScissorMode(curveRect.x, curveRect.y, curveRect.width, curveRect.height);
GuiCurveEdit(&curves[i],curveRect);
EndScissorMode();
+
// Resume clipping from setting rect
- BeginScissorMode(settingsRect.x, settingsRect.y+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.width, settingsRect.height);
+ BeginScissorMode(settingsRect.x, settingsRect.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.width, settingsRect.height);
contentRect.height += fontSize*12 + margin;
// Draw selected point controls
- GuiCurveEditPoint* p = &(curves[i].points[curves[i].selectedIndex]);
- p->leftLinear = GuiCheckBox((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, 1.5*fontSize, 1.5*fontSize}, "Left Linear", p->leftLinear);
- p->rightLinear = GuiCheckBox((Rectangle){contentRect.x+contentRect.width/2, contentRect.y+contentRect.height+scrollOffset.y, 1.5*fontSize, 1.5*fontSize}, "Right Linear", p->rightLinear);
- contentRect.height += 1.5*fontSize + margin;
+ GuiCurveEditPoint *p = &(curves[i].points[curves[i].selectedIndex]);
+ GuiCheckBox((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, 1.5f*fontSize, 1.5f*fontSize }, "Left Linear", &p->leftLinear);
+ GuiCheckBox((Rectangle){ contentRect.x+contentRect.width/2, contentRect.y + contentRect.height + scrollOffset.y, 1.5f*fontSize, 1.5f*fontSize }, "Right Linear", &p->rightLinear);
+ contentRect.height += 1.5f*fontSize + margin;
// Positions
- GuiLabel((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, fontSize}, "Position");
+ GuiLabel((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, fontSize }, "Position");
contentRect.height += fontSize;
- if(!editValueBox[i][0]){
- // transform x position to string
- gcvt(p->position.x, 6, valTextBox[i][0]);
- }
- if(!editValueBox[i][1]){
- // transform y position to string
- gcvt(curves[i].start + (curves[i].end-curves[i].start) * p->position.y, 6, valTextBox[i][1]);
- }
+ if (!editValueBox[i][0]) gcvt(p->position.x, 6, valTextBox[i][0]); // Transform x position to string
+
+ if (!editValueBox[i][1]) gcvt(curves[i].start + (curves[i].end-curves[i].start)*p->position.y, 6, valTextBox[i][1]); // Transform y position to string
// X pos
- if(GuiTextBox((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width/2-margin, 1.5*fontSize}, valTextBox[i][0], 20, editValueBox[i][0])){
+ if (GuiTextBox((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2-margin, 1.5f*fontSize }, valTextBox[i][0], 20, editValueBox[i][0]))
+ {
editValueBox[i][0] = !editValueBox[i][0];
- // input ended
- if(!editValueBox[i][0]){
+
+ // Input ended
+ if (!editValueBox[i][0])
+ {
// Try to convert text to float and assign it to the point
- char * endPtr;
- double value = strtod( (char *) valTextBox[i][0], &endPtr);
- if ( endPtr != (char *) valTextBox[i][0] ) {
- p->position.x = value < 0 ? 0 : value > 1 ? 1 : value;
- }
+ char *endPtr = NULL;
+ double value = strtod((char *)valTextBox[i][0], &endPtr);
+
+ if (endPtr != (char *)valTextBox[i][0]) p->position.x = (value < 0)? 0 : (value > 1)? 1 : value;
}
}
+
// Y pos
- if(GuiTextBox((Rectangle){contentRect.x+contentRect.width/2, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width/2, 1.5*fontSize}, valTextBox[i][1], 20, editValueBox[i][1])){
+ if (GuiTextBox((Rectangle){ contentRect.x + contentRect.width/2, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2.0f, 1.5f*fontSize }, valTextBox[i][1], 20, editValueBox[i][1]))
+ {
editValueBox[i][1] = !editValueBox[i][1];
- // input ended
- if(!editValueBox[i][1]){
+ // Input ended
+ if (!editValueBox[i][1])
+ {
// Try to convert text to float and assign it to the point
- char * endPtr;
- double value = strtod( (char *)valTextBox[i][1], &endPtr);
- if ( endPtr != (char *) valTextBox[i][1] ) {
- float normalizedVal = (value-curves[i].start) / (curves[i].end-curves[i].start);
- p->position.y = normalizedVal < 0 ? 0 : normalizedVal > 1 ? 1 : normalizedVal;
+ char *endPtr = NULL;
+ double value = strtod((char *)valTextBox[i][1], &endPtr);
+
+ if (endPtr != (char *)valTextBox[i][1])
+ {
+ float normalizedVal = (value - curves[i].start)/(curves[i].end - curves[i].start);
+ p->position.y = (normalizedVal < 0)? 0 : (normalizedVal > 1)? 1 : normalizedVal;
}
}
}
- contentRect.height += 1.5*fontSize + margin;
+
+ contentRect.height += 1.5f*fontSize + margin;
// Tangents
- GuiLabel((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, fontSize}, "Tangents");
+ GuiLabel((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, fontSize }, "Tangents");
contentRect.height += fontSize;
- if(!editValueBox[i][2]){
- // transform left tangent to string
- gcvt(p->tangents.x, 6, valTextBox[i][2]);
- }
- if(!editValueBox[i][3]){
- // transform right tangent to string
- gcvt(p->tangents.y, 6, valTextBox[i][3]);
- }
+ if (!editValueBox[i][2]) gcvt(p->tangents.x, 6, valTextBox[i][2]); // Transform left tangent to string
+
+ if (!editValueBox[i][3]) gcvt(p->tangents.y, 6, valTextBox[i][3]); // Transform right tangent to string
// Left tan
- if(GuiTextBox((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width/2-margin, 1.5*fontSize}, valTextBox[i][2], 20, editValueBox[i][2])){
+ if (GuiTextBox((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2 - margin, 1.5f*fontSize }, valTextBox[i][2], 20, editValueBox[i][2]))
+ {
editValueBox[i][2] = !editValueBox[i][2];
- // input ended
- if(!editValueBox[i][2]){
+
+ // Input ended
+ if (!editValueBox[i][2])
+ {
// Try to convert text to float and assign it to the point
- char * endPtr;
- double value = strtod( (char *) valTextBox[i][2], &endPtr);
- if ( endPtr != (char *) valTextBox[i][2] ) {
- p->tangents.x = value;
- }
+ char *endPtr = NULL;
+ double value = strtod((char *)valTextBox[i][2], &endPtr);
+ if (endPtr != (char *)valTextBox[i][2]) p->tangents.x = value;
}
}
- // Right tan
- if(GuiTextBox((Rectangle){contentRect.x+contentRect.width/2, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width/2, 1.5*fontSize}, valTextBox[i][3], 20, editValueBox[i][3])){
- editValueBox[i][3] = !editValueBox[i][3];
- // input ended
- if(!editValueBox[i][3]){
- // Try to convert text to float and assign it to the point
- char * endPtr;
- double value = strtod( (char *) valTextBox[i][3], &endPtr);
- if ( endPtr != (char *) valTextBox[i][3] ) {
- p->tangents.y = value;
- }
- }
- }
- contentRect.height += 1.5*fontSize + margin;
+ // Right tan
+ if (GuiTextBox((Rectangle){ contentRect.x + contentRect.width/2.0f, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2.0f, 1.5f*fontSize }, valTextBox[i][3], 20, editValueBox[i][3]))
+ {
+ editValueBox[i][3] = !editValueBox[i][3];
+
+ // Input ended
+ if (!editValueBox[i][3])
+ {
+ // Try to convert text to float and assign it to the point
+ char *endPtr = NULL;
+ double value = strtod((char *)valTextBox[i][3], &endPtr);
+ if (endPtr != (char *)valTextBox[i][3]) p->tangents.y = value;
+ }
+ }
+
+ contentRect.height += 1.5*fontSize + margin;
}
+
contentRect.height += margin;
+
EndScissorMode();
// Settings panel shadow
- DrawRectangleGradientH(settingsRect.x-12, 0, 12, settingsRect.height, BLANK, (Color){0,0,0,100});
+ DrawRectangleGradientH(settingsRect.x - 12, 0, 12, settingsRect.height, BLANK, (Color){ 0, 0, 0, 100 });
// Slider
- if(moveSlider){
- DrawRectangle(sliderRect.x, sliderRect.y, sliderRect.width, sliderRect.height, GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_PRESSED)));
- }else if(CheckCollisionPointRec(GetMousePosition(), sliderRect)){
- DrawRectangle(sliderRect.x, sliderRect.y, sliderRect.width, sliderRect.height, GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_FOCUSED)));
- }
+ if (moveSlider) DrawRectangle(sliderRect.x, sliderRect.y, sliderRect.width, sliderRect.height, GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_PRESSED)));
+ else if(CheckCollisionPointRec(GetMousePosition(), sliderRect)) DrawRectangle(sliderRect.x, sliderRect.y, sliderRect.width, sliderRect.height, GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_FOCUSED)));
// Draw Time controls
//----------------------------------------------------------------------------------
- Rectangle timeLineRect = (Rectangle) {0, screenHeight-4*fontSize, settingsRect.x, 4*fontSize};
- GuiPanel((Rectangle) { timeLineRect.x, timeLineRect.y, timeLineRect.width, 2*fontSize}, NULL);
- GuiLabel((Rectangle) { timeLineRect.x, timeLineRect.y, timeLineRect.width, 2*fontSize}, TextFormat("Normalized Time: %.3f", time / animationTime));
- if(GuiButton((Rectangle) { timeLineRect.x+timeLineRect.width/2-2*fontSize-margin/4, timeLineRect.y, 2*fontSize, 2*fontSize}, GuiIconText(playAnimation ? ICON_PLAYER_PAUSE : ICON_PLAYER_PLAY, ""))){
- playAnimation = !playAnimation;
- }
- if(GuiButton((Rectangle) { timeLineRect.x+timeLineRect.width/2+margin/4, timeLineRect.y, 2*fontSize, 2*fontSize}, GuiIconText(ICON_PLAYER_STOP, ""))){
+ Rectangle timeLineRect = (Rectangle){ 0, screenHeight-4*fontSize, settingsRect.x, 4*fontSize };
+ GuiPanel((Rectangle){ timeLineRect.x, timeLineRect.y, timeLineRect.width, 2*fontSize }, NULL);
+ GuiLabel((Rectangle){ timeLineRect.x, timeLineRect.y, timeLineRect.width, 2*fontSize }, TextFormat("Normalized Time: %.3f", time/animationTime));
+ if (GuiButton((Rectangle){ timeLineRect.x+timeLineRect.width/2 - 2*fontSize - margin/4, timeLineRect.y, 2*fontSize, 2*fontSize }, GuiIconText((playAnimation? ICON_PLAYER_PAUSE : ICON_PLAYER_PLAY), ""))) playAnimation = !playAnimation;
+
+ if (GuiButton((Rectangle){ timeLineRect.x+timeLineRect.width/2 + margin/4, timeLineRect.y, 2*fontSize, 2*fontSize }, GuiIconText(ICON_PLAYER_STOP, "")))
+ {
playAnimation = false;
time = 0;
}
- time = animationTime * GuiSlider((Rectangle){timeLineRect.x, timeLineRect.y+2*fontSize, timeLineRect.width, timeLineRect.height-2*fontSize}, NULL, NULL, time / animationTime, 0, 1);
+
+ float animTime = time/animationTime;
+ GuiSlider((Rectangle){timeLineRect.x, timeLineRect.y + 2*fontSize, timeLineRect.width, timeLineRect.height - 2*fontSize }, NULL, NULL, &animTime, 0, 1);
+ time = animationTime*animTime;
// Time panel shadow
- DrawRectangleGradientV(timeLineRect.x, timeLineRect.y-12, timeLineRect.width, 12, BLANK, (Color){0,0,0,100});
+ DrawRectangleGradientV(timeLineRect.x, timeLineRect.y - 12, timeLineRect.width, 12, BLANK, (Color){ 0, 0, 0, 100 });
-
EndDrawing();
//----------------------------------------------------------------------------------
}
@@ -382,7 +381,8 @@ int main()
return 0;
}
-void LoadDefaults(GuiCurveEditState curves[]){
+void LoadCurveDefaults(GuiCurveEditState curves[])
+{
// X pos
curves[0].start = 28;
curves[0].end = 506;
@@ -459,7 +459,6 @@ void LoadDefaults(GuiCurveEditState curves[]){
curves[3].points[15].position = (Vector2) {0.950000, 0.507937};curves[3].points[15].tangents = (Vector2) {0,0};curves[3].points[15].leftLinear = 0;curves[3].points[15].rightLinear = 0;
// Rotation
-
curves[4].start = -360;
curves[4].end = 360;
curves[4].numPoints = 9;
@@ -476,5 +475,3 @@ void LoadDefaults(GuiCurveEditState curves[]){
curves[4].points[7].position = (Vector2) {0.302752, 0.527778};curves[4].points[7].tangents = (Vector2) {0,0};curves[4].points[7].leftLinear = 0;curves[4].points[7].rightLinear = 0;
curves[4].points[8].position = (Vector2) {0.577982, 0.472222};curves[4].points[8].tangents = (Vector2) {0,0};curves[4].points[8].leftLinear = 0;curves[4].points[8].rightLinear = 0;
}
-
-
diff --git a/projects/VS2022/examples/text_editor.vcxproj b/projects/VS2022/examples/animation_curve.vcxproj
similarity index 98%
rename from projects/VS2022/examples/text_editor.vcxproj
rename to projects/VS2022/examples/animation_curve.vcxproj
index 706c725..c3b3f84 100644
--- a/projects/VS2022/examples/text_editor.vcxproj
+++ b/projects/VS2022/examples/animation_curve.vcxproj
@@ -35,10 +35,10 @@
- {AB6D26C4-F5F4-420D-B15B-CE52619A5D36}
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}
Win32Proj
- text_editor
- text_editor
+ style_selector
+ animation_curve
10.0
@@ -349,7 +349,7 @@
-
+
diff --git a/projects/VS2022/examples/textbox_selection.vcxproj b/projects/VS2022/examples/textbox_selection.vcxproj
deleted file mode 100644
index 27151dd..0000000
--- a/projects/VS2022/examples/textbox_selection.vcxproj
+++ /dev/null
@@ -1,357 +0,0 @@
-
-
-
-
- Debug.DLL
- Win32
-
-
- Debug.DLL
- x64
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release.DLL
- Win32
-
-
- Release.DLL
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {B740AD57-ABF2-4421-96C0-FE220130A873}
- Win32Proj
- textbox_selection
- textbox_selection
- 10.0
-
-
-
- Application
- true
- $(DefaultPlatformToolset)
- Unicode
-
-
- Application
- true
- $(DefaultPlatformToolset)
- Unicode
-
-
- Application
- true
- $(DefaultPlatformToolset)
- Unicode
-
-
- Application
- true
- $(DefaultPlatformToolset)
- Unicode
-
-
- Application
- false
- $(DefaultPlatformToolset)
- true
- Unicode
-
-
- Application
- false
- $(DefaultPlatformToolset)
- true
- Unicode
-
-
- Application
- false
- $(DefaultPlatformToolset)
- true
- Unicode
-
-
- Application
- false
- $(DefaultPlatformToolset)
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
- true
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
- true
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
- true
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
- false
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
- false
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
- false
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
- false
- $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
- $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
-
-
-
-
-
- Level3
- Disabled
- _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP%(PreprocessorDefinitions)
- CompileAsC
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
-
-
- Console
- true
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
-
-
-
-
-
- Level3
- Disabled
- _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
- CompileAsC
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
- /FS %(AdditionalOptions)
-
-
- Console
- true
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
-
-
-
-
-
- Level3
- Disabled
- _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
- CompileAsC
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
-
-
- Console
- true
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
-
- xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
- Copy Debug DLL to output directory
-
-
-
-
-
-
- Level3
- Disabled
- _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
- CompileAsC
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
-
-
- Console
- true
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
-
- xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
- Copy Debug DLL to output directory
-
-
-
-
- Level3
-
-
- MaxSpeed
- true
- true
- _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
- CompileAsC
- true
- MultiThreaded
-
-
- Console
- true
- true
- true
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
-
-
-
-
- Level3
-
-
- MaxSpeed
- true
- true
- _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
- CompileAsC
- true
- MultiThreaded
-
-
- Console
- true
- true
- true
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
-
-
-
-
- Level3
-
-
- MaxSpeed
- true
- true
- _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
- CompileAsC
- true
-
-
- Console
- true
- true
- true
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
-
-
- xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
-
-
- Copy Release DLL to output directory
-
-
-
-
- Level3
-
-
- MaxSpeed
- true
- true
- _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
- $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
- CompileAsC
- true
-
-
- Console
- true
- true
- true
- raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
-
-
- xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
-
-
- Copy Release DLL to output directory
-
-
-
-
- {e89d61ac-55de-4482-afd4-df7242ebc859}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/projects/VS2022/raygui.sln b/projects/VS2022/raygui.sln
index 3122d84..e6c7b56 100644
--- a/projects/VS2022/raygui.sln
+++ b/projects/VS2022/raygui.sln
@@ -23,6 +23,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{5D
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "style_selector", "examples\style_selector.vcxproj", "{BCF5E746-FDBF-4CAC-9B95-44FE9A498430}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "animation_curve", "examples\animation_curve.vcxproj", "{50A98C3D-C898-4830-A00B-3F78DC2E742B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug.DLL|x64 = Debug.DLL|x64
@@ -179,6 +181,22 @@ Global
{BCF5E746-FDBF-4CAC-9B95-44FE9A498430}.Release|x64.Build.0 = Release|x64
{BCF5E746-FDBF-4CAC-9B95-44FE9A498430}.Release|x86.ActiveCfg = Release|Win32
{BCF5E746-FDBF-4CAC-9B95-44FE9A498430}.Release|x86.Build.0 = Release|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug.DLL|x64.Build.0 = Debug.DLL|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug|x64.ActiveCfg = Debug|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug|x64.Build.0 = Debug|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug|x86.ActiveCfg = Debug|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Debug|x86.Build.0 = Debug|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release.DLL|x64.ActiveCfg = Release.DLL|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release.DLL|x64.Build.0 = Release.DLL|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release.DLL|x86.Build.0 = Release.DLL|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release|x64.ActiveCfg = Release|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release|x64.Build.0 = Release|x64
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release|x86.ActiveCfg = Release|Win32
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -192,6 +210,7 @@ Global
{D28301C9-C293-4F41-9F58-F2609F33134E} = {5DC256E9-D698-4D07-8AD7-DFDAE9125DE3}
{56EE93DF-A3AF-4856-A4EC-E27358C6DA87} = {5DC256E9-D698-4D07-8AD7-DFDAE9125DE3}
{BCF5E746-FDBF-4CAC-9B95-44FE9A498430} = {5DC256E9-D698-4D07-8AD7-DFDAE9125DE3}
+ {50A98C3D-C898-4830-A00B-3F78DC2E742B} = {5DC256E9-D698-4D07-8AD7-DFDAE9125DE3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E926C768-6307-4423-A1EC-57E95B1FAB29}