#include void gfx_fill_rect(EFI_GRAPHICS_OUTPUT_BLT_PIXEL* buf, UINT32 buf_w, UINT32 buf_h, UINT32 x, UINT32 y, UINT32 w, UINT32 h, EFI_GRAPHICS_OUTPUT_BLT_PIXEL color) { if (x >= buf_w || y >= buf_h) return; UINT32 x2 = x + w; UINT32 y2 = y + h; if (x2 > buf_w) x2 = buf_w; if (y2 > buf_h) y2 = buf_h; for (UINT32 row = y; row < y2; row++) { EFI_GRAPHICS_OUTPUT_BLT_PIXEL* p = buf + (buf_w * row) + x; for (UINT32 col = x; col < x2; col++) { p->Blue = color.Blue; p->Green = color.Green; p->Red = color.Red; p->Reserved = color.Reserved; p++; } } } void gfx_draw_rect(EFI_GRAPHICS_OUTPUT_BLT_PIXEL* buf, UINT32 buf_w, UINT32 buf_h, UINT32 x, UINT32 y, UINT32 w, UINT32 h, EFI_GRAPHICS_OUTPUT_BLT_PIXEL color) { if (x >= buf_w || y >= buf_h) return; UINT32 x2 = x + w; UINT32 y2 = y + h; if (x2 > buf_w) x2 = buf_w; if (y2 > buf_h) y2 = buf_h; // Top edge for (UINT32 col = x; col < x2; col++) { EFI_GRAPHICS_OUTPUT_BLT_PIXEL* p = buf + (buf_w * y) + col; p->Blue = color.Blue; p->Green = color.Green; p->Red = color.Red; p->Reserved = color.Reserved; } // Bottom edge if (y2 - 1 < buf_h) { for (UINT32 col = x; col < x2; col++) { EFI_GRAPHICS_OUTPUT_BLT_PIXEL* p = buf + (buf_w * (y2 - 1)) + col; p->Blue = color.Blue; p->Green = color.Green; p->Red = color.Red; p->Reserved = color.Reserved; } } // Left edge for (UINT32 row = y; row < y2; row++) { EFI_GRAPHICS_OUTPUT_BLT_PIXEL* p = buf + (buf_w * row) + x; p->Blue = color.Blue; p->Green = color.Green; p->Red = color.Red; p->Reserved = color.Reserved; } // Right edge if (x2 - 1 < buf_w) { for (UINT32 row = y; row < y2; row++) { EFI_GRAPHICS_OUTPUT_BLT_PIXEL* p = buf + (buf_w * row) + (x2 - 1); p->Blue = color.Blue; p->Green = color.Green; p->Red = color.Red; p->Reserved = color.Reserved; } } }