Added donut chart option to pie chart example

This commit is contained in:
Gideon Serfontein 2025-10-16 09:00:28 +02:00
parent af068ec020
commit a7c3657dc1
2 changed files with 25 additions and 3 deletions

View File

@ -36,6 +36,7 @@ int main(void)
#define MAX_SLICES 10 #define MAX_SLICES 10
int sliceCount = 7; int sliceCount = 7;
float donutInnerRadius = 25.0f;
float values[MAX_SLICES] = {300.0f, 100.0f, 450.0f, 350.0f, 600.0f, 380.0f, 750.0f}; //initial slice values float values[MAX_SLICES] = {300.0f, 100.0f, 450.0f, 350.0f, 600.0f, 380.0f, 750.0f}; //initial slice values
char labels[MAX_SLICES][32]; char labels[MAX_SLICES][32];
bool editingLabel[MAX_SLICES] = {false}; bool editingLabel[MAX_SLICES] = {false};
@ -45,11 +46,14 @@ int main(void)
bool showValues = true; bool showValues = true;
bool showPercentages = false; bool showPercentages = false;
bool showDonut = false;
int hoveredSlice = -1; int hoveredSlice = -1;
Rectangle scrollPanelBounds = {0}; Rectangle scrollPanelBounds = {0};
Vector2 scrollContentOffset = {0}; Vector2 scrollContentOffset = {0};
Rectangle view = {0}; Rectangle view = {0};
int scrollbar_width = GuiGetStyle(SCROLLBAR, SCROLLBAR_WIDTH);
SetTargetFPS(60); SetTargetFPS(60);
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
@ -72,7 +76,7 @@ int main(void)
const Rectangle panelRect = { const Rectangle panelRect = {
panelPos.x, panelPos.y, panelPos.x, panelPos.y,
(float)panelWidth, (float)panelWidth,
(float)screenHeight - 2.0f*panelMargin (float)screenHeight - 2.0f*panelMargin
}; };
// Pie chart geometry // Pie chart geometry
@ -159,6 +163,12 @@ int main(void)
DrawText(labelText, (int)labelPos.x, (int)labelPos.y, 18, WHITE); DrawText(labelText, (int)labelPos.x, (int)labelPos.y, 18, WHITE);
} }
if(showDonut)
{
// Draw inner circle to create donut effect
DrawCircle(center.x, center.y, donutInnerRadius, RAYWHITE);
}
startAngle += sweepAngle; startAngle += sweepAngle;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -177,17 +187,29 @@ int main(void)
currentY += 30; currentY += 30;
GuiCheckBox((Rectangle){ panelPos.x + 20, (float)currentY, 20, 20 }, "Show Percentages", &showPercentages); GuiCheckBox((Rectangle){ panelPos.x + 20, (float)currentY, 20, 20 }, "Show Percentages", &showPercentages);
currentY += 40; currentY += 30;
GuiCheckBox((Rectangle){ panelPos.x + 20, (float)currentY, 20, 20 }, "Make Donut", &showDonut);
currentY += 30;
if(showDonut)
{
GuiSliderBar((Rectangle){ panelPos.x + 80, (float)currentY, panelRect.width - 100, 30 },
"Inner Radius", NULL, &donutInnerRadius, 5.0f, radius - 10.0f);
currentY += 40;
}
GuiLine((Rectangle){ panelPos.x + 10, (float)currentY, panelRect.width - 20, 1 }, NULL); GuiLine((Rectangle){ panelPos.x + 10, (float)currentY, panelRect.width - 20, 1 }, NULL);
currentY += 20; currentY += 20;
// Scrollable area for slice editors // Scrollable area for slice editors
scrollPanelBounds = (Rectangle){ panelPos.x+panelMargin, (float)currentY, panelRect.width-panelMargin*2, panelRect.y + panelRect.height - currentY - panelMargin }; scrollPanelBounds = (Rectangle){ panelPos.x+panelMargin, (float)currentY, panelRect.width-panelMargin*2, panelRect.y + panelRect.height - currentY - panelMargin };
int contentHeight = sliceCount * 35; int contentHeight = sliceCount * 35;
GuiScrollPanel(scrollPanelBounds, NULL, GuiScrollPanel(scrollPanelBounds, NULL,
(Rectangle){ 0, 0, panelRect.width - 20, (float)contentHeight }, (Rectangle){ 0, 0, panelRect.width - 25, (float)contentHeight },
&scrollContentOffset, &view); &scrollContentOffset, &view);
const float contentX = view.x + scrollContentOffset.x; // left of content const float contentX = view.x + scrollContentOffset.x; // left of content

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 15 KiB