From e11298e56be560de64bbccfe74fef7ff85c623d1 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Mon, 8 Aug 2022 21:25:55 +0200 Subject: stdio.h; gcc $(WARNINGS) --- kernel/src/misc/graphics.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) (limited to 'kernel/src/misc/graphics.c') diff --git a/kernel/src/misc/graphics.c b/kernel/src/misc/graphics.c index 488e4fa..5cb11bf 100644 --- a/kernel/src/misc/graphics.c +++ b/kernel/src/misc/graphics.c @@ -1,19 +1,22 @@ #include +#include #include -#include #include #include #include -uint64_t* pixel_offset(fb_t fb, uint32_t x, uint32_t y) +fb_t main_fb; + +uint64_t* pixel_offset(fb_t fb, int32_t x, int32_t y) { - return (uint64_t*)((char*)fb.addr + y * fb.pitch + x * fb.bpp / 8); + return (uint64_t*)((char*)fb.addr + y * (int32_t)fb.pitch + x * fb.bpp / 8); } -void fb_draw_pixel(fb_t fb, uint32_t x, uint32_t y, uint32_t col) +void fb_draw_pixel(fb_t fb, int32_t x, int32_t y, uint32_t col) { - if (x >= fb.width || y >= fb.height) return; + if (x < 0 || y < 0) return; + if (x >= (int32_t)fb.width || y >= (int32_t)fb.height) return; uint32_t* fb_offset = (uint32_t*)pixel_offset(fb, x, y); *fb_offset = col; @@ -21,7 +24,7 @@ void fb_draw_pixel(fb_t fb, uint32_t x, uint32_t y, uint32_t col) /* https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm */ -void fb_draw_line_low(fb_t fb, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t col) +void fb_draw_line_low(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) { int32_t dx = x1 - x0; int32_t dy = y1 - y0; @@ -45,7 +48,7 @@ void fb_draw_line_low(fb_t fb, uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y } -void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t col) +void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) { int32_t dx = x1 - x0; int32_t dy = y1 - y0; @@ -68,7 +71,7 @@ void fb_draw_line_high(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, } } -void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t col) +void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t col) { if (abs(y1 - y0) < abs(x1 - x0)) { if (x0 > x1) @@ -83,14 +86,14 @@ void fb_draw_line(fb_t fb, int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32 } } -void fb_draw_character(fb_t fb, char c, uint32_t x, uint32_t y, uint32_t char_col, uint32_t bg_col) +void fb_draw_character(fb_t fb, char c, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col) { if (c < 0) return; - uint32_t offset = 32 + c * 16; - for (uint32_t i = 0 ; i < 16; i++) + int32_t offset = 32 + c * 16; + for (int32_t i = 0 ; i < 16; i++) { - for (uint32_t j = 0 ; j < 8; j++) + for (int32_t j = 0 ; j < 8; j++) { if (font[offset + i] & (1 << (7 - j))) { fb_draw_pixel(fb, x + j, y + i, char_col); @@ -101,9 +104,9 @@ void fb_draw_character(fb_t fb, char c, uint32_t x, uint32_t y, uint32_t char_co } } -void fb_draw_string(fb_t fb, const char* s, uint32_t x, uint32_t y, uint32_t char_col, uint32_t bg_col) +void fb_draw_string(fb_t fb, const char* s, int32_t x, int32_t y, uint32_t char_col, uint32_t bg_col) { - for (uint32_t i = 0; i < strlen(s); i++) { - fb_draw_character(fb, s[i], x + i * 8, y, char_col, bg_col); + for (size_t i = 0; i < strlen(s); i++) { + fb_draw_character(fb, s[i], (x + (int32_t)i * 8), y, char_col, bg_col); } } -- cgit v1.2.3