From 6bc6d66bbe4b644c958723b02564cc7d64b8266d Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 20 Jun 2021 15:36:42 +0200 Subject: Add param cursor for sq1; fix bug in line drawing --- src/renderer.c | 42 ++++++++++++++---------------------------- 1 file changed, 14 insertions(+), 28 deletions(-) (limited to 'src/renderer.c') diff --git a/src/renderer.c b/src/renderer.c index 0ce3107..07d79d6 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -128,35 +128,21 @@ draw_line(size_t x0, size_t y0, size_t x1, size_t y1, u8 clr) { } } else { // Diagonal line. - int x_step = x0 > x1 ? -1 : 1; - int y_step = y0 > y1 ? -1 : 1; - size_t dx = x0 > x1 ? x0 - x1 : x1 - x0; - size_t dy = y0 > y1 ? y0 - y1 : y1 - y0; - size_t x = x0; - size_t y = y0; - if (dx >= dy) { - // Positive slope. - int diff = 2 * dy - dx; - for (size_t i = 0; i <= dx; ++i) { - draw_pixel(x, y, clr); - if (diff >= 0) { - y += y_step; - diff -= 2 * dx; - } - x += x_step; - diff += 2 * dy; + int dx = x0 > x1 ? x0 - x1 : x1 - x0; + int dy = y0 > y1 ? y1 - y0 : y0 - y1; + int x_step = x0 < x1 ? 1 : -1; + int y_step = y0 < y1 ? 1 : -1; + int err = dx + dy; + while (!(x0 == x1 && y0 == y1)) { + draw_pixel(x0, y0, clr); + int diff = 2 * err; + if (diff >= dy) { + err += dy; + x0 += x_step; } - } else { - // Negative slope. - int diff = 2 * dx - dy; - for (size_t i = 0; i <= dy; ++i) { - draw_pixel(x, y, clr); - if (diff >= 0) { - x += x_step; - diff -= 2 * dy; - } - y -= y_step; - diff += 2 * dx; + if (diff <= dx) { + err += dx; + y0 += y_step; } } } -- cgit v1.2.1