From 3ea8b9298f75513388cde1aef7bb7af614cd3ec4 Mon Sep 17 00:00:00 2001 From: Seweryn Date: Sun, 26 Jul 2026 20:54:54 +0200 Subject: [PATCH 1/4] Refactor text insertion logic in rtext.c (#6022) Fixed nasty bug, text after insertion is deleted --- src/rtext.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rtext.c b/src/rtext.c index d138f1f90..93e34a6f6 100644 --- a/src/rtext.c +++ b/src/rtext.c @@ -1987,8 +1987,8 @@ char *TextInsert(const char *text, const char *insert, int position) // TODO: Allow copying data inserted up to maximum buffer size and stop for (int i = 0; i < position; i++) buffer[i] = text[i]; - for (int i = position; i < insertLen + position; i++) buffer[i] = insert[i - position]; - for (int i = (insertLen + position); i < (textLen + insertLen); i++) buffer[i] = text[i - insertLen]; + for (int i = 0; i < insertLen; i++) buffer[i+position] = insert[i]; + for (int i = position; i < textLen; i++) buffer[i+insertLen] = text[i]; buffer[textLen + insertLen] = '\0'; // Add EOL } From de24a6c1eba456ffcc0d572a1949a1352db0f7c3 Mon Sep 17 00:00:00 2001 From: Leonardo Gomes Date: Mon, 27 Jul 2026 11:29:32 -0300 Subject: [PATCH 2/4] fix: use rlGetPixelDataSize in rlgl.h (#6024) --- src/rlgl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rlgl.h b/src/rlgl.h index be24bbb78..44341137e 100644 --- a/src/rlgl.h +++ b/src/rlgl.h @@ -3755,7 +3755,7 @@ void *rlReadTexturePixels(unsigned int id, int width, int height, int format) glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); #else // Reading data as original texture format, in some platforms (RPI, Wasm) it works - pixels = (unsigned char *)RL_MALLOC(GetPixelDataSize(width, height, format)); + pixels = (unsigned char *)RL_MALLOC(rlGetPixelDataSize(width, height, format)); unsigned int glInternalFormat = 0, glFormat = 0, glType = 0; rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType); glReadPixels(0, 0, width, height, glFormat, glType, pixels); From 935f3da3ffd4b2e3eb4af1ee9826f45ae241a68c Mon Sep 17 00:00:00 2001 From: Matthew Roush Date: Mon, 27 Jul 2026 10:30:30 -0400 Subject: [PATCH 3/4] [examples] Add shapes_polygon_lines (#6023) Add an example to demonstrate/observe DrawPolyLinesEx() behavior. --- examples/shapes/shapes_polygon_lines.c | 118 +++++++++++++++++++++++ examples/shapes/shapes_polygon_lines.png | Bin 0 -> 20632 bytes 2 files changed, 118 insertions(+) create mode 100644 examples/shapes/shapes_polygon_lines.c create mode 100644 examples/shapes/shapes_polygon_lines.png diff --git a/examples/shapes/shapes_polygon_lines.c b/examples/shapes/shapes_polygon_lines.c new file mode 100644 index 000000000..fc42688e8 --- /dev/null +++ b/examples/shapes/shapes_polygon_lines.c @@ -0,0 +1,118 @@ +/******************************************************************************************* +* +* raylib [shapes] example - polygon lines +* +* Example complexity rating: [★★☆☆] 2/4 +* +* Example originally created with raylib 6.1, last time updated with raylib 6.1 +* +* Example contributed by Matthew Roush (@MatthewRoush) 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) 2026 Matthew Roush (@MatthewRoush) +* +********************************************************************************************/ + +#include "raylib.h" + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - polygon lines"); + + int thick = 2; + float rotation = 0.0f; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (IsKeyPressed(KEY_UP)) thick = thick + 1; + if (IsKeyPressed(KEY_DOWN)) thick = thick - 1; + + thick = (thick < 1) ? 1 : (thick > 60) ? 60 : thick; + + rotation += (360.0f/10.0f)*GetFrameTime(); + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText(TextFormat("thick = %d", thick), 10, 280, 20, LIME); + + // The square and circle outlines in the top left should match + // The fist pair of outlines are drawn using `DrawRectangleLinesEx()` and `DrawCircleLinesEx()` + // The second pair are drawn using `DrawPolyLinesEx()` with parameters that should visually match the first pair + + DrawText("These should look identical!", 10, 10, 20, MAROON); + + // Outline pair 1 + DrawRectangle(10, 40, 50, 50, LIGHTGRAY); + DrawRectangleLinesEx((Rectangle){ 10, 40, 50, 50 }, (float)thick, RED); + + DrawCircle(95, 65, 25, LIGHTGRAY); + DrawCircleLinesEx((Vector2){ 95, 65 }, 25, (float)thick, RED); + + DrawText("DrawRectangleLinesEx() and DrawCircleLinesEx()", 130, 60, 10, BLACK); + + // Outline pair 2 + DrawPoly((Vector2){ 35, 125 }, 4, 35.355f, 45, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 35, 125 }, 4, 35.355f, 45, (float)thick, RED); + + DrawPoly((Vector2){ 95, 125 }, 36, 25, 0, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 95, 125 }, 36, 25, 0, (float)thick, RED); + + DrawText("DrawPolyLinesEx()", 130, 120, 10, BLACK); + + // Some other shapes, all of these outlines should have the same looking thickness + DrawPoly((Vector2){ 290, 220 }, 3, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 290, 220 }, 3, 60, rotation, (float)thick, BLUE); + + DrawPoly((Vector2){ 430, 220 }, 4, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 430, 220 }, 4, 60, rotation, (float)thick, BLUE); + + DrawPoly((Vector2){ 570, 220 }, 5, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 570, 220 }, 5, 60, rotation, (float)thick, BLUE); + + DrawPoly((Vector2){ 710, 220 }, 6, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 710, 220 }, 6, 60, rotation, (float)thick, BLUE); + + DrawPoly((Vector2){ 290, 360 }, 7, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 290, 360 }, 7, 60, rotation, (float)thick, BLUE); + + DrawPoly((Vector2){ 430, 360 }, 8, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 430, 360 }, 8, 60, rotation, (float)thick, BLUE); + + DrawPoly((Vector2){ 570, 360 }, 9, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 570, 360 }, 9, 60, rotation, (float)thick, BLUE); + + DrawPoly((Vector2){ 710, 360 }, 10, 60, rotation, LIGHTGRAY); + DrawPolyLinesEx((Vector2){ 710, 360 }, 10, 60, rotation, (float)thick, BLUE); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/shapes/shapes_polygon_lines.png b/examples/shapes/shapes_polygon_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..83ec926aef777517ef3e5a04a642d6cd587cd784 GIT binary patch literal 20632 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 Date: Wed, 29 Jul 2026 04:03:22 -0400 Subject: [PATCH 4/4] [rshapes] Fix `DrawRectangleLinesEx()` (#6027) Previously DrawRectangleLinesEx() would draw lines overlapping each other when they were thick enough (which was only noticeable if the color's alpha was lower than 255.) --- src/rshapes.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rshapes.c b/src/rshapes.c index 76fb0c3c2..cc994b99e 100644 --- a/src/rshapes.c +++ b/src/rshapes.c @@ -631,7 +631,9 @@ void DrawRectangleLines(int posX, int posY, int width, int height, Color color) // Draw rectangle outline with line thickness void DrawRectangleLinesEx(Rectangle rec, float thick, Color color) { - if ((thick > rec.width) || (thick > rec.height)) + if (thick <= 0.0f) return; + + if ((thick > rec.width/2) || (thick > rec.height/2)) { if (rec.width >= rec.height) thick = rec.height/2; else if (rec.width <= rec.height) thick = rec.width/2;