diff --git a/include/gint/display.h b/include/gint/display.h index 553e3b5..2173cf2 100644 --- a/include/gint/display.h +++ b/include/gint/display.h @@ -60,6 +60,12 @@ void dclear(color_t color); fxcg50: Any R5G6B5 color */ void drect(int x1, int y1, int x2, int y2, color_t color); +/* drect_border(): Rectangle with border + This function draws a rectangle with an inner border. The border width must + be smaller than half the width and half the height. */ +void drect_border(int x1, int y1, int x2, int y2, int fill_color, + int border_width, int border_color); + //--- // Point drawing functions //--- diff --git a/src/render/drect_border.c b/src/render/drect_border.c new file mode 100644 index 0000000..65ac289 --- /dev/null +++ b/src/render/drect_border.c @@ -0,0 +1,31 @@ +#include +#include + +/* drect_border(): Rectangle with border */ +void drect_border(int x1, int y1, int x2, int y2, int fill, int width, + int border) +{ + if(x1 > x2) swap(x1, x2); + if(y1 > y2) swap(y1, y2); + + /* Order and bounds */ + if(x1 >= 396 || x2 < 0 || y1 >= 224 || y2 < 0) return; + if(x1 < 0) x1 = 0; + if(x2 >= 396) x2 = 395; + if(y1 < 0) y1 = 0; + if(y2 >= 224) y2 = 223; + + drect(x1, y1, x2, y1 + (width-1), border); + drect(x1, y2 - (width-1), x2, y2, border); + + y1 += width; + y2 -= width; + + drect(x1, y1, x1 + (width-1), y2, border); + drect(x2 - (width-1), y1, x2, y2, border); + + x1 += width; + x2 -= width; + + if(fill != C_NONE) drect(x1, y1, x2, y2, fill); +}