diff options
author | nicm <nicm> | 2021-08-06 03:13:05 +0000 |
---|---|---|
committer | nicm <nicm> | 2021-08-06 03:13:05 +0000 |
commit | 97b5962ab1ce08f50001f2bbcd87685e8dcce222 (patch) | |
tree | 2746ab9fe3635336c37cee339c5690697ffdfc2b /tty.c | |
parent | 93cc8df6929e0a7c63ce2f0403276a064c290adb (diff) | |
download | rtmux-97b5962ab1ce08f50001f2bbcd87685e8dcce222.tar.gz rtmux-97b5962ab1ce08f50001f2bbcd87685e8dcce222.tar.bz2 rtmux-97b5962ab1ce08f50001f2bbcd87685e8dcce222.zip |
Correctly draw wide characters that are partially obscured.
Diffstat (limited to 'tty.c')
-rw-r--r-- | tty.c | 31 |
1 files changed, 19 insertions, 12 deletions
@@ -1349,7 +1349,7 @@ tty_draw_line(struct tty *tty, struct screen *s, u_int px, u_int py, u_int nx, struct grid_line *gl; struct client *c = tty->client; u_int i, j, ux, sx, width; - int flags, cleared = 0, wrapped = 0; + int flags, cleared = 0, wrapped = 0, hidden; char buf[512]; size_t len; u_int cellsize; @@ -1449,17 +1449,24 @@ tty_draw_line(struct tty *tty, struct screen *s, u_int px, u_int py, u_int nx, screen_select_cell(s, &last, gcp); else memcpy(&last, gcp, sizeof last); - if (!tty_check_overlay(tty, atx + ux, aty)) { - if (~gcp->flags & GRID_FLAG_PADDING) - ux += gcp->data.width; - } else if (ux + gcp->data.width > nx) { - tty_attributes(tty, &last, defaults, palette); - tty_cursor(tty, atx + ux, aty); - for (j = 0; j < gcp->data.width; j++) { - if (ux + j > nx) - break; - tty_putc(tty, ' '); - ux++; + + hidden = 0; + for (j = 0; j < gcp->data.width; j++) { + if (!tty_check_overlay(tty, atx + ux + j, aty)) { + hidden = 1; + break; + } + } + if (hidden || ux + gcp->data.width > nx) { + if (~gcp->flags & GRID_FLAG_PADDING) { + tty_attributes(tty, &last, defaults, palette); + tty_cursor(tty, atx + ux, aty); + for (j = 0; j < gcp->data.width; j++) { + if (ux + j > nx) + break; + tty_putc(tty, ' '); + ux++; + } } } else if (gcp->attr & GRID_ATTR_CHARSET) { tty_attributes(tty, &last, defaults, palette); |