finish win32 gui support for double-wide characters

This commit is contained in:
Jonathan Marler 2025-09-23 13:32:13 -06:00 committed by CJ van den Berg
parent 8278a080af
commit 05b87b1406
3 changed files with 25 additions and 7 deletions

View file

@ -1083,6 +1083,7 @@ fn WndProc(
) catch |e| oom(e);
var prev_width: usize = 1;
var prev_cell: render.Cell = undefined;
var prev_codepoint: u21 = undefined;
for (global.screen.buf, global.render_cells.items) |*screen_cell, *render_cell| {
const width = screen_cell.char.width;
const codepoint = if (std.unicode.utf8ValidateSlice(screen_cell.char.grapheme))
@ -1091,16 +1092,17 @@ fn WndProc(
std.unicode.replacement_character;
if (prev_width > 1) {
render_cell.* = prev_cell;
render_cell.glyph_index = state.render_state.generateGlyph(font, codepoint, true);
render_cell.glyph_index = state.render_state.generateGlyph(font, prev_codepoint, .right);
} else {
render_cell.* = .{
.glyph_index = state.render_state.generateGlyph(font, codepoint, false),
.glyph_index = state.render_state.generateGlyph(font, codepoint, if (width == 1) .single else .left),
.background = renderColorFromVaxis(screen_cell.style.bg),
.foreground = renderColorFromVaxis(screen_cell.style.fg),
};
}
prev_width = width;
prev_cell = render_cell.*;
prev_codepoint = codepoint;
}
render.paint(
&state.render_state,