From 45b821645adb0e06d60a4cb96bdc18c2b72cd332 Mon Sep 17 00:00:00 2001 From: nick black Date: Tue, 14 Apr 2020 04:55:33 -0400 Subject: [PATCH] Only left sides of wide glyphs are 2 columns At various places in rendering and rasterizing, we advance two columns upon encountering a wide glyph. When dealing with a single plane, this is always correct, because we're always hitting the first column of the multicolumn glyph. Once multiple planes are brought into play, though, we can very much hit the second column of said glyph, in which case we mustn't advance two columns, but only one. Resolves #474 by way of #475. w00t! --- src/lib/render.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/render.c b/src/lib/render.c index 5e517a79f..4ee0f7857 100644 --- a/src/lib/render.c +++ b/src/lib/render.c @@ -307,7 +307,7 @@ paint(ncplane* p, cell* lastframe, struct crender* rvec, } crender->p = p; targc->attrword = vis->attrword; - }else if(cell_double_wide_p(vis)){ + }else if(cell_wide_left_p(vis)){ cell_set_wide(targc); } } @@ -355,7 +355,7 @@ fprintf(stderr, "POOL: %p NC: %p SRC: %p\n", pool->pool, nc, crender->p); }*/ if(cellcmp_and_dupfar(pool, prevcell, crender->p, targc)){ crender->damaged = true; - if(cell_double_wide_p(targc)){ + if(cell_wide_left_p(targc)){ ncplane* tmpp = crender->p; ++crender; crender->p = tmpp; @@ -846,7 +846,7 @@ notcurses_rasterize(notcurses* nc, const struct crender* rvec){ // here. no updates are performed to elision state nor lastframe. ++nc->stats.cellelisions; ++needmove; - if(cell_double_wide_p(srccell)){ + if(cell_wide_left_p(srccell)){ ++needmove; ++nc->stats.cellelisions; } @@ -964,7 +964,7 @@ fprintf(stderr, "RAST %u [%s] to %d/%d\n", srccell->gcluster, egcpool_extended_g }*/ ret |= term_putc(out, &nc->pool, srccell); } - if(cell_double_wide_p(srccell)){ + if(cell_wide_left_p(srccell)){ ++x; } //fprintf(stderr, "damageidx: %ld\n", damageidx);