mirror of
https://github.com/limine-bootloader/limine
synced 2024-12-04 22:22:24 +03:00
gterm: expand font 9th column like VGA
Implement column expansion like VGA Line Graphics Mode does it, e.g. the 8th column is replicated for characters 0xC0-0xDF. Do this for all columns above 8 so font sizes like 10x16 are also usable.
This commit is contained in:
parent
58d128b9f3
commit
cd02860fc1
@ -698,15 +698,15 @@ bool gterm_init(size_t *_rows, size_t *_cols, size_t width, size_t height) {
|
|||||||
if (vga_font_bool == NULL || menu_font != NULL) {
|
if (vga_font_bool == NULL || menu_font != NULL) {
|
||||||
vga_font_bool = ext_mem_alloc(VGA_FONT_GLYPHS * vga_font_height * vga_font_width * sizeof(bool));
|
vga_font_bool = ext_mem_alloc(VGA_FONT_GLYPHS * vga_font_height * vga_font_width * sizeof(bool));
|
||||||
|
|
||||||
|
size_t bitwidth = vga_font_width > 8 ? 8 : vga_font_width;
|
||||||
for (size_t i = 0; i < VGA_FONT_GLYPHS; i++) {
|
for (size_t i = 0; i < VGA_FONT_GLYPHS; i++) {
|
||||||
uint8_t *glyph = &vga_font_bits[i * vga_font_height];
|
uint8_t *glyph = &vga_font_bits[i * vga_font_height];
|
||||||
|
|
||||||
for (size_t y = 0; y < vga_font_height; y++) {
|
for (size_t y = 0; y < vga_font_height; y++) {
|
||||||
// NOTE: the characters in VGA fonts are always at most
|
// NOTE: the characters in VGA fonts are always one byte wide.
|
||||||
// one byte wide. 9 dot wide fonts have 8 dots and one
|
// 9 dot wide fonts have 8 dots and one empty column, except
|
||||||
// empty column, except characters 0xC0-0xDF replicate
|
// characters 0xC0-0xDF replicate column 9.
|
||||||
// column 9 in Line Graphics Mode. (TODO: implement that)
|
for (size_t x = 0; x < bitwidth; x++) {
|
||||||
for (size_t x = 0; x < vga_font_width; x++) {
|
|
||||||
size_t offset = i * vga_font_height * vga_font_width + y * vga_font_width + x;
|
size_t offset = i * vga_font_height * vga_font_width + y * vga_font_width + x;
|
||||||
|
|
||||||
if ((glyph[y] & (0x80 >> x))) {
|
if ((glyph[y] & (0x80 >> x))) {
|
||||||
@ -715,6 +715,16 @@ bool gterm_init(size_t *_rows, size_t *_cols, size_t width, size_t height) {
|
|||||||
vga_font_bool[offset] = false;
|
vga_font_bool[offset] = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// fill columns above 8 like VGA Line Graphics Mode does
|
||||||
|
for (size_t x = 8; x < vga_font_width; x++) {
|
||||||
|
size_t offset = i * vga_font_height * vga_font_width + y * vga_font_width + x;
|
||||||
|
|
||||||
|
if (i >= 0xC0 && i <= 0xDF) {
|
||||||
|
vga_font_bool[offset] = (glyph[y] & 1);
|
||||||
|
} else {
|
||||||
|
vga_font_bool[offset] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user