From 748a7ef6b374c331936078779468e7b136aa0a06 Mon Sep 17 00:00:00 2001 From: Charlie Birks Date: Wed, 9 Oct 2024 14:12:22 +0100 Subject: [PATCH] Fix Surface::line infinite loops Instead of checking if we've reached the target, count how many pixels we should draw. --- 32blit/graphics/primitive.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/32blit/graphics/primitive.cpp b/32blit/graphics/primitive.cpp index 17baf833b..29c37bdbf 100644 --- a/32blit/graphics/primitive.cpp +++ b/32blit/graphics/primitive.cpp @@ -155,12 +155,14 @@ namespace blit { Point p(p1); + int count = std::max(dx, -dy); + while (true) { if (clip.contains(p)) { pbf(&pen, this, offset(p), 1); } - if ((p.x == p2.x) && (p.y == p2.y)) break; + if (count-- == 0) break; int32_t e2 = err * 2; if (e2 >= dy) { err += dy; p.x += sx; }