From 3c5b3f1c1737cc20940f41ec338669d8b032abdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20=E2=9D=A4=EF=B8=8F?= Date: Tue, 21 Oct 2025 04:11:19 -0400 Subject: [PATCH] [examples] Added `shapes_lines_drawing` (#5283) * Added shapes_lines_drawing Example * store result of clamp * conventions * fixed more brackets * buffer comments --- examples/shapes/shapes_lines_drawing.c | 146 +++++++++++++++++++++++ examples/shapes/shapes_lines_drawing.png | Bin 0 -> 34456 bytes 2 files changed, 146 insertions(+) create mode 100644 examples/shapes/shapes_lines_drawing.c create mode 100644 examples/shapes/shapes_lines_drawing.png diff --git a/examples/shapes/shapes_lines_drawing.c b/examples/shapes/shapes_lines_drawing.c new file mode 100644 index 000000000..9347acaf3 --- /dev/null +++ b/examples/shapes/shapes_lines_drawing.c @@ -0,0 +1,146 @@ +/******************************************************************************************* +* +* raylib [shapes] example - lines drawing +* +* Example complexity rating: [★☆☆☆] 1/4 +* +* Example originally created with raylib 5.6-dev, last time updated with raylib 5.6 +* +* Example contributed by Robin (@RobinsAviary) 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) 2025-2025 Robin (@RobinsAviary) +* +********************************************************************************************/ + +#include "raylib.h" +#include "raymath.h" + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - lines drawing"); + + // Hint text that shows before you click the screen + bool startText = true; + + // The mouse's position on the previous frame + Vector2 mousePositionPrevious = GetMousePosition(); + + // The canvas to draw lines on + RenderTexture canvas = LoadRenderTexture(screenWidth, screenHeight); + + // The background color of the canvas + const Color backgroundColor = RAYWHITE; + + // The line's thickness + float lineThickness = 8.0f; + // The lines hue (in HSV, from 0-360) + float lineHue = 0.0f; + + // Clear the canvas to the background color + BeginTextureMode(canvas); + ClearBackground(backgroundColor); + EndTextureMode(); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + // Disable the hint text once the user clicks + if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && startText) + { + startText = false; + } + + // Clear the canvas when the user middle-clicks + if (IsMouseButtonPressed(MOUSE_BUTTON_MIDDLE)) + { + BeginTextureMode(canvas); + ClearBackground(backgroundColor); + EndTextureMode(); + } + + // Store whether the left and right buttons are down + bool leftButtonDown = IsMouseButtonDown(MOUSE_BUTTON_LEFT); + bool rightButtonDown = IsMouseButtonDown(MOUSE_BUTTON_RIGHT); + + if (leftButtonDown || rightButtonDown) + { + // The color for the line + Color drawColor; + + if (leftButtonDown) + { + // Increase the hue value by the distance our cursor has moved since the last frame (divided by 3) + lineHue += Vector2Distance(mousePositionPrevious, GetMousePosition())/3.0f; + + // While the hue is >=360, subtract it to bring it down into the range 0-360 + // This is more visually accurate than resetting to zero + while (lineHue >= 360.0f) + { + lineHue -= 360.0f; + } + + // Create the final color + drawColor = ColorFromHSV(lineHue, 1.0f, 1.0f); + } + else if (rightButtonDown) + { + // Use the background color as an "eraser" + drawColor = backgroundColor; + } + + // Draw the line onto the canvas + BeginTextureMode(canvas); + // Circles act as "caps", smoothing corners + DrawCircleV(mousePositionPrevious, lineThickness/2.0f, drawColor); + DrawCircleV(GetMousePosition(), lineThickness/2.0f, drawColor); + DrawLineEx(mousePositionPrevious, GetMousePosition(), lineThickness, drawColor); + EndTextureMode(); + } + + // Update line thickness based on mousewheel + lineThickness += GetMouseWheelMove(); + lineThickness = Clamp(lineThickness, 1.0, 500.0f); + + // Update mouse's previous position + mousePositionPrevious = GetMousePosition(); + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + // Draw the render texture to the screen, flipped vertically to make it appear top-side up + DrawTextureRec(canvas.texture, (Rectangle){ 0.0f, 0.0f, (float)canvas.texture.width,(float)-canvas.texture.height }, Vector2Zero(), WHITE); + + // Draw the preview circle + if (!leftButtonDown) DrawCircleLinesV(GetMousePosition(), lineThickness/2.0f, (Color){ 127, 127, 127, 127 }); + + // Draw the hint text + if (startText) DrawText("try clicking and dragging!", 275, 215, 20, LIGHTGRAY); + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + // Unload the canvas render texture + UnloadRenderTexture(canvas); + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} \ No newline at end of file diff --git a/examples/shapes/shapes_lines_drawing.png b/examples/shapes/shapes_lines_drawing.png new file mode 100644 index 0000000000000000000000000000000000000000..59ef6593439152c128657ecacb80cc91eb146e07 GIT binary patch literal 34456 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%0Dx%j?@0GXzgbsVf3o;ci0R2uE<-DD}`XSk`QvzIc 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