| 
								
							 | 
							
								/*******************************************************************************************
							 | 
						
						
						
							| 
								
							 | 
							
								*
							 | 
						
						
						
							| 
								
							 | 
							
								*   raylib [shapes] example - rectangle avanced
							 | 
						
						
						
							| 
								
							 | 
							
								*
							 | 
						
						
						
							| 
								
							 | 
							
								*   Example complexity rating: [★★★★] 4/4
							 | 
						
						
						
							| 
								
							 | 
							
								*
							 | 
						
						
						
							| 
								
							 | 
							
								*   Example originally created with raylib 5.5, last time updated with raylib 5.5
							 | 
						
						
						
							| 
								
							 | 
							
								*
							 | 
						
						
						
							| 
								
							 | 
							
								*   Example contributed by Everton Jr. (@evertonse) and reviewed by Ramon Santamaria (@raysan5)
							 | 
						
						
						
							| 
								
							 | 
							
								*
							 | 
						
						
						
							| 
								
							 | 
							
								*   Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
							 | 
						
						
						
							| 
								
							 | 
							
								*   BSD-like license that allows static linking with closed source software
							 | 
						
						
						
							| 
								
							 | 
							
								*
							 | 
						
						
						
							| 
								
							 | 
							
								*   Copyright (c) 2024-2025 Everton Jr. (@evertonse) and Ramon Santamaria (@raysan5)
							 | 
						
						
						
							| 
								
							 | 
							
								*
							 | 
						
						
						
							| 
								
							 | 
							
								********************************************************************************************/
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								#include "raylib.h"
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								#include "rlgl.h"
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								#include <math.h>
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								//--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								// Module Functions Declaration
							 | 
						
						
						
							| 
								
							 | 
							
								//--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								// Draw rectangle with rounded edges and horizontal gradient, with options to choose side of roundness
							 | 
						
						
						
							| 
								
							 | 
							
								static void DrawRectangleRoundedGradientH(Rectangle rec, float roundnessLeft, float roundnessRight, int segments, Color left, Color right);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								//------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								// Program main entry point
							 | 
						
						
						
							| 
								
							 | 
							
								//------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								int main(void)
							 | 
						
						
						
							| 
								
							 | 
							
								{
							 | 
						
						
						
							| 
								
							 | 
							
								    // Initialization
							 | 
						
						
						
							| 
								
							 | 
							
								    //--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								    const int screenWidth = 800;
							 | 
						
						
						
							| 
								
							 | 
							
								    const int screenHeight = 450;
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    InitWindow(screenWidth, screenHeight, "raylib [shapes] example - rectangle avanced");
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
							 | 
						
						
						
							| 
								
							 | 
							
								    //--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    // Main game loop
							 | 
						
						
						
							| 
								
							 | 
							
								    while (!WindowShouldClose())    // Detect window close button or ESC key
							 | 
						
						
						
							| 
								
							 | 
							
								    {
							 | 
						
						
						
							| 
								
							 | 
							
								        // Update rectangle bounds
							 | 
						
						
						
							| 
								
							 | 
							
								        //----------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								        float width = GetScreenWidth()/2.0f, height = GetScreenHeight()/6.0f;
							 | 
						
						
						
							| 
								
							 | 
							
								        Rectangle rec = {
							 | 
						
						
						
							| 
								
							 | 
							
								            GetScreenWidth()/2.0f - width/2,
							 | 
						
						
						
							| 
								
							 | 
							
								            GetScreenHeight()/2.0f - 5*(height/2),
							 | 
						
						
						
							| 
								
							 | 
							
								            width, height
							 | 
						
						
						
							| 
								
							 | 
							
								        };
							 | 
						
						
						
							| 
								
							 | 
							
								        //--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // Draw
							 | 
						
						
						
							| 
								
							 | 
							
								        //----------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								        BeginDrawing();
							 | 
						
						
						
							| 
								
							 | 
							
								            ClearBackground(RAYWHITE);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            // Draw All Rectangles with different roundess  for each side and different gradients
							 | 
						
						
						
							| 
								
							 | 
							
								            DrawRectangleRoundedGradientH(rec, 0.8f, 0.8f, 36, BLUE, RED);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            rec.y += rec.height + 1;
							 | 
						
						
						
							| 
								
							 | 
							
								            DrawRectangleRoundedGradientH(rec, 0.5f, 1.0f, 36, RED, PINK);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            rec.y += rec.height + 1;
							 | 
						
						
						
							| 
								
							 | 
							
								            DrawRectangleRoundedGradientH(rec, 1.0f, 0.5f, 36, RED, BLUE);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            rec.y += rec.height + 1;
							 | 
						
						
						
							| 
								
							 | 
							
								            DrawRectangleRoundedGradientH(rec, 0.0f, 1.0f, 36, BLUE, BLACK);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            rec.y += rec.height + 1;
							 | 
						
						
						
							| 
								
							 | 
							
								            DrawRectangleRoundedGradientH(rec, 1.0f, 0.0f, 36, BLUE, PINK);
							 | 
						
						
						
							| 
								
							 | 
							
								        EndDrawing();
							 | 
						
						
						
							| 
								
							 | 
							
								        //--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								    }
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    // De-Initialization
							 | 
						
						
						
							| 
								
							 | 
							
								    //--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								    CloseWindow();        // Close window and OpenGL context
							 | 
						
						
						
							| 
								
							 | 
							
								    //--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    return 0;
							 | 
						
						
						
							| 
								
							 | 
							
								}
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								//--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								// Module Functions Definition
							 | 
						
						
						
							| 
								
							 | 
							
								//--------------------------------------------------------------------------------------
							 | 
						
						
						
							| 
								
							 | 
							
								// Draw rectangle with rounded edges and horizontal gradient, with options to choose side of roundness
							 | 
						
						
						
							| 
								
							 | 
							
								// NOTE: Adapted from both 'DrawRectangleRounded()' and 'DrawRectangleGradientH()' raylib [rshapes] implementations
							 | 
						
						
						
							| 
								
							 | 
							
								static void DrawRectangleRoundedGradientH(Rectangle rec, float roundnessLeft, float roundnessRight, int segments, Color left, Color right)
							 | 
						
						
						
							| 
								
							 | 
							
								{
							 | 
						
						
						
							| 
								
							 | 
							
								    // Neither side is rounded
							 | 
						
						
						
							| 
								
							 | 
							
								    if ((roundnessLeft <= 0.0f && roundnessRight <= 0.0f) || (rec.width < 1) || (rec.height < 1 ))
							 | 
						
						
						
							| 
								
							 | 
							
								    {
							 | 
						
						
						
							| 
								
							 | 
							
								        DrawRectangleGradientEx(rec, left, left, right, right);
							 | 
						
						
						
							| 
								
							 | 
							
								        return;
							 | 
						
						
						
							| 
								
							 | 
							
								    }
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    if (roundnessLeft  >= 1.0f) roundnessLeft  = 1.0f;
							 | 
						
						
						
							| 
								
							 | 
							
								    if (roundnessRight >= 1.0f) roundnessRight = 1.0f;
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    // Calculate corner radius both from right and left
							 | 
						
						
						
							| 
								
							 | 
							
								    float recSize = rec.width > rec.height ? rec.height : rec.width;
							 | 
						
						
						
							| 
								
							 | 
							
								    float radiusLeft  = (recSize*roundnessLeft)/2;
							 | 
						
						
						
							| 
								
							 | 
							
								    float radiusRight = (recSize*roundnessRight)/2;
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    if (radiusLeft <= 0.0f) radiusLeft = 0.0f;
							 | 
						
						
						
							| 
								
							 | 
							
								    if (radiusRight <= 0.0f) radiusRight = 0.0f;
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    if (radiusRight <= 0.0f && radiusLeft <= 0.0f) return;
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    float stepLength = 90.0f/(float)segments;
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    /*
							 | 
						
						
						
							| 
								
							 | 
							
								    Diagram Copied here for reference, original at 'DrawRectangleRounded()' source code
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								          P0____________________P1
							 | 
						
						
						
							| 
								
							 | 
							
								          /|                    |\
							 | 
						
						
						
							| 
								
							 | 
							
								         /1|          2         |3\
							 | 
						
						
						
							| 
								
							 | 
							
								     P7 /__|____________________|__\ P2
							 | 
						
						
						
							| 
								
							 | 
							
								       |   |P8                P9|   |
							 | 
						
						
						
							| 
								
							 | 
							
								       | 8 |          9         | 4 |
							 | 
						
						
						
							| 
								
							 | 
							
								       | __|____________________|__ |
							 | 
						
						
						
							| 
								
							 | 
							
								     P6 \  |P11              P10|  / P3
							 | 
						
						
						
							| 
								
							 | 
							
								         \7|          6         |5/
							 | 
						
						
						
							| 
								
							 | 
							
								          \|____________________|/
							 | 
						
						
						
							| 
								
							 | 
							
								          P5                    P4
							 | 
						
						
						
							| 
								
							 | 
							
								    */
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    // Coordinates of the 12 points also apdated from `DrawRectangleRounded`
							 | 
						
						
						
							| 
								
							 | 
							
								    const Vector2 point[12] = {
							 | 
						
						
						
							| 
								
							 | 
							
								        // PO, P1, P2
							 | 
						
						
						
							| 
								
							 | 
							
								        {(float)rec.x + radiusLeft, rec.y}, {(float)(rec.x + rec.width) - radiusRight, rec.y}, { rec.x + rec.width, (float)rec.y + radiusRight },
							 | 
						
						
						
							| 
								
							 | 
							
								        // P3, P4
							 | 
						
						
						
							| 
								
							 | 
							
								        {rec.x + rec.width, (float)(rec.y + rec.height) - radiusRight}, {(float)(rec.x + rec.width) - radiusRight, rec.y + rec.height},
							 | 
						
						
						
							| 
								
							 | 
							
								        // P5, P6, P7
							 | 
						
						
						
							| 
								
							 | 
							
								        {(float)rec.x + radiusLeft, rec.y + rec.height}, { rec.x, (float)(rec.y + rec.height) - radiusLeft}, {rec.x, (float)rec.y + radiusLeft},
							 | 
						
						
						
							| 
								
							 | 
							
								        // P8, P9
							 | 
						
						
						
							| 
								
							 | 
							
								        {(float)rec.x + radiusLeft, (float)rec.y + radiusLeft}, {(float)(rec.x + rec.width) - radiusRight, (float)rec.y + radiusRight},
							 | 
						
						
						
							| 
								
							 | 
							
								        // P10, P11
							 | 
						
						
						
							| 
								
							 | 
							
								        {(float)(rec.x + rec.width) - radiusRight, (float)(rec.y + rec.height) - radiusRight}, {(float)rec.x + radiusLeft, (float)(rec.y + rec.height) - radiusLeft}
							 | 
						
						
						
							| 
								
							 | 
							
								    };
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    const Vector2 centers[4] = { point[8], point[9], point[10], point[11] };
							 | 
						
						
						
							| 
								
							 | 
							
								    const float angles[4] = { 180.0f, 270.0f, 0.0f, 90.0f };
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								#if defined(SUPPORT_QUADS_DRAW_MODE)
							 | 
						
						
						
							| 
								
							 | 
							
								    rlSetTexture(GetShapesTexture().id);
							 | 
						
						
						
							| 
								
							 | 
							
								    Rectangle shapeRect = GetShapesTextureRectangle();
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    rlBegin(RL_QUADS);
							 | 
						
						
						
							| 
								
							 | 
							
								        // Draw all the 4 corners: [1] Upper Left Corner, [3] Upper Right Corner, [5] Lower Right Corner, [7] Lower Left Corner
							 | 
						
						
						
							| 
								
							 | 
							
								        for (int k = 0; k < 4; ++k)
							 | 
						
						
						
							| 
								
							 | 
							
								        {
							 | 
						
						
						
							| 
								
							 | 
							
								            Color color;
							 | 
						
						
						
							| 
								
							 | 
							
								            float radius;
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 0) color = left,  radius = radiusLeft;     // [1] Upper Left Corner
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 1) color = right, radius = radiusRight;    // [3] Upper Right Corner
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 2) color = right, radius = radiusRight;    // [5] Lower Right Corner
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 3) color = left,  radius = radiusLeft;     // [7] Lower Left Corner
							 | 
						
						
						
							| 
								
							 | 
							
								            float angle = angles[k];
							 | 
						
						
						
							| 
								
							 | 
							
								            const Vector2 center = centers[k];
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            for (int i = 0; i < segments/2; i++)
							 | 
						
						
						
							| 
								
							 | 
							
								            {
							 | 
						
						
						
							| 
								
							 | 
							
								                rlColor4ub(color.r, color.g, color.b, color.a);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x, center.y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x + cosf(DEG2RAD*(angle + stepLength*2))*radius, center.y + sinf(DEG2RAD*(angle + stepLength*2))*radius);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x + cosf(DEG2RAD*(angle + stepLength))*radius, center.y + sinf(DEG2RAD*(angle + stepLength))*radius);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x + cosf(DEG2RAD*angle)*radius, center.y + sinf(DEG2RAD*angle)*radius);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								                angle += (stepLength*2);
							 | 
						
						
						
							| 
								
							 | 
							
								            }
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            // End one even segments
							 | 
						
						
						
							| 
								
							 | 
							
								            if ( segments % 2)
							 | 
						
						
						
							| 
								
							 | 
							
								            {
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x, center.y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x + cosf(DEG2RAD*(angle + stepLength))*radius, center.y + sinf(DEG2RAD*(angle + stepLength))*radius);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x + cosf(DEG2RAD*angle)*radius, center.y + sinf(DEG2RAD*angle)*radius);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								                rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x, center.y);
							 | 
						
						
						
							| 
								
							 | 
							
								            }
							 | 
						
						
						
							| 
								
							 | 
							
								        }
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // Here we use the 'Diagram' to guide ourselves to which point receives what color
							 | 
						
						
						
							| 
								
							 | 
							
								        // By choosing the color correctly associated with a pointe the gradient effect
							 | 
						
						
						
							| 
								
							 | 
							
								        // will naturally come from OpenGL interpolation
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [2] Upper Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[0].x, point[0].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[8].x, point[8].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[1].x, point[1].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [4] Left Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[2].x, point[2].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[10].x, point[10].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[3].x, point[3].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [6] Bottom Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[5].x, point[5].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[4].x, point[4].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[10].x, point[10].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [8] left Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[7].x, point[7].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[6].x, point[6].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[8].x, point[8].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [9] Middle Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[8].x, point[8].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[10].x, point[10].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    rlEnd();
							 | 
						
						
						
							| 
								
							 | 
							
								    rlSetTexture(0);
							 | 
						
						
						
							| 
								
							 | 
							
								#else
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    // Here we use the 'Diagram' to guide ourselves to which point receives what color
							 | 
						
						
						
							| 
								
							 | 
							
								    // By choosing the color correctly associated with a pointe the gradient effect
							 | 
						
						
						
							| 
								
							 | 
							
								    // will naturally come from OpenGL interpolation
							 | 
						
						
						
							| 
								
							 | 
							
								    // But this time instead of Quad, we think in triangles
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    rlBegin(RL_TRIANGLES);
							 | 
						
						
						
							| 
								
							 | 
							
								        // Draw all of the 4 corners: [1] Upper Left Corner, [3] Upper Right Corner, [5] Lower Right Corner, [7] Lower Left Corner
							 | 
						
						
						
							| 
								
							 | 
							
								        for (int k = 0; k < 4; ++k)
							 | 
						
						
						
							| 
								
							 | 
							
								        {
							 | 
						
						
						
							| 
								
							 | 
							
								            Color color = { 0 };
							 | 
						
						
						
							| 
								
							 | 
							
								            float radius = 0.0f;
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 0) color = left,  radius = radiusLeft;     // [1] Upper Left Corner
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 1) color = right, radius = radiusRight;    // [3] Upper Right Corner
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 2) color = right, radius = radiusRight;    // [5] Lower Right Corner
							 | 
						
						
						
							| 
								
							 | 
							
								            if (k == 3) color = left,  radius = radiusLeft;     // [7] Lower Left Corner
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            float angle = angles[k];
							 | 
						
						
						
							| 
								
							 | 
							
								            const Vector2 center = centers[k];
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            for (int i = 0; i < segments; i++)
							 | 
						
						
						
							| 
								
							 | 
							
								            {
							 | 
						
						
						
							| 
								
							 | 
							
								                rlColor4ub(color.r, color.g, color.b, color.a);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x, center.y);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x + cosf(DEG2RAD*(angle + stepLength))*radius, center.y + sinf(DEG2RAD*(angle + stepLength))*radius);
							 | 
						
						
						
							| 
								
							 | 
							
								                rlVertex2f(center.x + cosf(DEG2RAD*angle)*radius, center.y + sinf(DEG2RAD*angle)*radius);
							 | 
						
						
						
							| 
								
							 | 
							
								                angle += stepLength;
							 | 
						
						
						
							| 
								
							 | 
							
								            }
							 | 
						
						
						
							| 
								
							 | 
							
								        }
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [2] Upper Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[0].x, point[0].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[8].x, point[8].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[1].x, point[1].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[0].x, point[0].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [4] Right Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[10].x, point[10].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[3].x, point[3].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[2].x, point[2].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[3].x, point[3].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [6] Bottom Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[5].x, point[5].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[4].x, point[4].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[10].x, point[10].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[4].x, point[4].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [8] Left Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[7].x, point[7].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[6].x, point[6].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[8].x, point[8].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[7].x, point[7].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        // [9] Middle Rectangle
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[8].x, point[8].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[11].x, point[11].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[10].x, point[10].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[9].x, point[9].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(left.r, left.g, left.b, left.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[8].x, point[8].y);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlColor4ub(right.r, right.g, right.b, right.a);
							 | 
						
						
						
							| 
								
							 | 
							
								        rlVertex2f(point[10].x, point[10].y);
							 | 
						
						
						
							| 
								
							 | 
							
								    rlEnd();
							 | 
						
						
						
							| 
								
							 | 
							
								#endif
							 | 
						
						
						
							| 
								
							 | 
							
								}
							 |