diff --git a/kernel/lfbtextbuffer.cpp b/kernel/lfbtextbuffer.cpp index fb54450d..2b3b77d1 100644 --- a/kernel/lfbtextbuffer.cpp +++ b/kernel/lfbtextbuffer.cpp @@ -213,18 +213,20 @@ void LFBTextBuffer::RenderChar(TextChar textchar, size_t posx, size_t posy) uint8_t bgcoloridx = textchar.vgacolor >> 4 & 0x0F; uint32_t fgcolor = colors[fgcoloridx]; uint32_t bgcolor = colors[bgcoloridx]; - const uint8_t* charfont = VGA::GetCharacterFont(font, textchar.c); + int remap = VGA::MapWideToVGAFont(textchar.c); + const uint8_t* charfont = VGA::GetCharacterFont(font, remap); for ( size_t y = 0; y < VGA_FONT_HEIGHT; y++ ) { size_t pixely = posy * VGA_FONT_HEIGHT + y; uint8_t linebitmap = charfont[y]; - for ( size_t x = 0; x < VGA_FONT_WIDTH+1; x++ ) - { - uint32_t* line = (uint32_t*) (lfb + pixely * scansize); - size_t pixelx = posx * (VGA_FONT_WIDTH+1) + x; - bool fg = x != VGA_FONT_WIDTH && linebitmap & 1U << (7-x); - line[pixelx] = fg ? fgcolor : bgcolor; - } + uint32_t* line = (uint32_t*) (lfb + pixely * scansize); + size_t pixelxoff = posx * (VGA_FONT_WIDTH+1); + for ( size_t x = 0; x < VGA_FONT_WIDTH; x++ ) + line[pixelxoff + x] = linebitmap & 1 << (7-x) ? fgcolor : bgcolor; + uint32_t lastcolor = bgcolor; + if ( 0xB0 <= remap && remap <= 0xDF && (linebitmap & 1) ) + lastcolor = fgcolor; + line[pixelxoff + VGA_FONT_WIDTH] = lastcolor; } if ( likely(!drawcursor) ) return; diff --git a/kernel/vga.h b/kernel/vga.h index 804172fa..7cadde37 100644 --- a/kernel/vga.h +++ b/kernel/vga.h @@ -244,11 +244,8 @@ static const uint8_t font_replacement_character[16] = }; __attribute__((unused)) -static inline const uint8_t* GetCharacterFont(const uint8_t* font, wchar_t wc) +static inline const uint8_t* GetCharacterFont(const uint8_t* font, int remap) { - if ( wc == L'�' ) - return font_replacement_character; - int remap = MapWideToVGAFont(wc); if ( remap < 0 ) return font_replacement_character; return font + 16 * remap;