diff --git a/src/hulk/framebuffer.d b/src/hulk/framebuffer.d index c470e30..b099a3d 100644 --- a/src/hulk/framebuffer.d +++ b/src/hulk/framebuffer.d @@ -54,6 +54,57 @@ struct Framebuffer memset32(m_buffer, color, m_buffer_size); } + /** + * Draw a solid rectangle on the framebuffer. + * + * @param x X coordinate of left side of rectangle. + * @param y Y coordinate of bottom side of rectangle. + * @param width Width of rectangle. + * @param height Height of rectangle. + * @param color Color of rectangle. + */ + void rect(size_t x, size_t y, size_t width, size_t height, uint color) + { + for (size_t iy = 0u; iy < height; iy++) + { + size_t buffer_index = buffer_index(x, y); + memset32(&m_buffer[buffer_index], color, width); + y++; + } + } + + /** + * Draw a horizontal line. + * + * @param x X coordinate of left side of line. + * @param y Y coordinate of line. + * @param width Width of line. + * @param color Color of line. + */ + void hline(size_t x, size_t y, size_t width, uint color) + { + size_t buffer_index = buffer_index(x, y); + memset32(&m_buffer[buffer_index], color, width); + } + + /** + * Draw a vertical line. + * + * @param x X coordinate of line. + * @param y Y coordinate of bottom of line. + * @param height Height of line. + * @param color Color of line. + */ + void vline(size_t x, size_t y, size_t height, uint color) + { + size_t buffer_index = buffer_index(x, y); + for (size_t iy = 0u; iy < height; iy++) + { + m_buffer[buffer_index] = color; + buffer_index -= m_stride; + } + } + /** * Blit an 8-bit alpha bitmap to the framebuffer. *