diff --git a/src/draw.c b/src/draw.c index 83194fee6c06f4a43439c12c1a31c5f9669ece57..3f592432c7f1a4677dc7b0e46bc00ea61ced160a 100644 --- a/src/draw.c +++ b/src/draw.c @@ -1,60 +1,62 @@ +#include <stdbool.h> + #include "../utils/gfx/gfx.h" #include "field.h" void gfx_draw_line(struct gfx_context_t *ctxt, coordinates_t p0, coordinates_t p1, uint32_t color) { - int dx = abs(p1.column - p0.column); - int sx = p0.column < p1.column ? 1 : -1; - int dy = -abs(p1.row - p0.row); - int sy = p0.row < p1.row ? 1 : -1; - int error = dx + dy; - - while (true) { - gfx_putpixel(ctxt, p0.column, p0.row, color); - - if (p0.column == p1.column && p0.row == p1.row) - break; - - int e2 = 2 * error; - - if (e2 >= dy) { - if (p0.column == p1.column) - break; - error = error + dy; - p0.column = p0.column + sx; - } - - if (e2 <= dx) { - if (p0.row == p1.row) - break; - error = error + dx; - p0.row = p0.row + sy; - } - } + int dx = abs(p1.column - p0.column); + int sx = p0.column < p1.column ? 1 : -1; + int dy = -abs(p1.row - p0.row); + int sy = p0.row < p1.row ? 1 : -1; + int error = dx + dy; + + while (true) { + gfx_putpixel(ctxt, p0.column, p0.row, color); + + if (p0.column == p1.column && p0.row == p1.row) + break; + + int e2 = 2 * error; + + if (e2 >= dy) { + if (p0.column == p1.column) + break; + error = error + dy; + p0.column = p0.column + sx; + } + + if (e2 <= dx) { + if (p0.row == p1.row) + break; + error = error + dx; + p0.row = p0.row + sy; + } + } } void gfx_draw_circle(struct gfx_context_t *ctxt, coordinates c, uint32_t r, uint32_t color) { - int x = 0; - int y = r; - int d = r - 1; - while(y >= x){ - gfx_putpixel(ctxt, c.row + x, c.column + y, color); - gfx_putpixel(ctxt, c.row + y, c.column + x, color); - gfx_putpixel(ctxt, c.row - x, c.column + y, color); - gfx_putpixel(ctxt, c.row - y, c.column + x, color); - gfx_putpixel(ctxt, c.row + x, c.column - y, color); - gfx_putpixel(ctxt, c.row + y, c.column - x, color); - gfx_putpixel(ctxt, c.row - x, c.column - y, color); - gfx_putpixel(ctxt, c.row - y, c.column - x, color); - if(d >= 2*x){ - d = d-2*x-1; - x++; - }else if(d < 2 * (r-y)){ - d = d + 2*y-1; - y--; - }else { - d = d + 2 * (y-x-1); - y--; - x++; - } - } + int x = 0; + int y = r; + int d = r - 1; + while (y >= x) { + gfx_putpixel(ctxt, c.row + x, c.column + y, color); + gfx_putpixel(ctxt, c.row + y, c.column + x, color); + gfx_putpixel(ctxt, c.row - x, c.column + y, color); + gfx_putpixel(ctxt, c.row - y, c.column + x, color); + gfx_putpixel(ctxt, c.row + x, c.column - y, color); + gfx_putpixel(ctxt, c.row + y, c.column - x, color); + gfx_putpixel(ctxt, c.row - x, c.column - y, color); + gfx_putpixel(ctxt, c.row - y, c.column - x, color); + if (d >= 2 * x) { + d = d - 2 * x - 1; + x++; + } else if (d < 2 * (r - y)) { + d = d + 2 * y - 1; + y--; + } else { + d = d + 2 * (y - x - 1); + y--; + x++; + } + } }