diff options
author | Thomas Adam <thomas@xteddy.org> | 2017-10-06 13:33:32 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2017-10-06 13:33:32 +0100 |
commit | 2be01ab4ec95b147d4a779f72872099e5d466fde (patch) | |
tree | 0cb31291a023799d53a7fd702a602e89be4163ce /screen-write.c | |
parent | 8aaf86a6ead9852631342d0d2d526a7eaede15cf (diff) | |
parent | b462063cd59647e7f98eb11bde9bb0fef41bb2bd (diff) | |
download | rtmux-2be01ab4ec95b147d4a779f72872099e5d466fde.tar.gz rtmux-2be01ab4ec95b147d4a779f72872099e5d466fde.tar.bz2 rtmux-2be01ab4ec95b147d4a779f72872099e5d466fde.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'screen-write.c')
-rw-r--r-- | screen-write.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/screen-write.c b/screen-write.c index 15f8d07f..f090d6fa 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1243,6 +1243,7 @@ screen_write_collect_end(struct screen_write_ctx *ctx) struct screen *s = ctx->s; struct screen_write_collect_item *ci = ctx->item; struct grid_cell gc; + u_int xx; if (ci->used == 0) return; @@ -1255,9 +1256,27 @@ screen_write_collect_end(struct screen_write_ctx *ctx) log_debug("%s: %u %s (at %u,%u)", __func__, ci->used, ci->data, s->cx, s->cy); + if (s->cx != 0) { + for (xx = s->cx; xx > 0; xx--) { + grid_view_get_cell(s->grid, xx, s->cy, &gc); + if (~gc.flags & GRID_FLAG_PADDING) + break; + grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } + if (gc.data.width > 1) + grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } + memcpy(&gc, &ci->gc, sizeof gc); grid_view_set_cells(s->grid, s->cx, s->cy, &gc, ci->data, ci->used); s->cx += ci->used; + + for (xx = s->cx; xx < screen_size_x(s); xx++) { + grid_view_get_cell(s->grid, xx, s->cy, &gc); + if (~gc.flags & GRID_FLAG_PADDING) + break; + grid_view_set_cell(s->grid, xx, s->cy, &grid_default_cell); + } } /* Write cell data, collecting if necessary. */ @@ -1388,6 +1407,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) * already ensured there is enough room. */ for (xx = s->cx + 1; xx < s->cx + width; xx++) { + log_debug("%s: new padding at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &screen_write_pad_cell); skip = 0; } @@ -1537,10 +1557,12 @@ screen_write_overwrite(struct screen_write_ctx *ctx, struct grid_cell *gc, grid_view_get_cell(gd, xx, s->cy, &tmp_gc); if (~tmp_gc.flags & GRID_FLAG_PADDING) break; + log_debug("%s: padding at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); } /* Overwrite the character at the start of this padding. */ + log_debug("%s: character at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); done = 1; } @@ -1557,6 +1579,7 @@ screen_write_overwrite(struct screen_write_ctx *ctx, struct grid_cell *gc, grid_view_get_cell(gd, xx, s->cy, &tmp_gc); if (~tmp_gc.flags & GRID_FLAG_PADDING) break; + log_debug("%s: overwrite at %u,%u", __func__, xx, s->cy); grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); done = 1; } |