62 lines
2.1 KiB
C++
62 lines
2.1 KiB
C++
#include <graphics/rect.h>
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|