diff options
Diffstat (limited to 'termbox')
-rw-r--r-- | termbox/termbox.c | 9 | ||||
-rw-r--r-- | termbox/termbox.h | 3 |
2 files changed, 12 insertions, 0 deletions
diff --git a/termbox/termbox.c b/termbox/termbox.c index c9ea6012..76d43753 100644 --- a/termbox/termbox.c +++ b/termbox/termbox.c @@ -181,6 +181,10 @@ void tb_present(void) front = &CELL(&front_buffer, x, y); w = wcwidth(back->ch); if (w < 1) w = 1; + if (memcmp(back, front, sizeof(struct tb_cell)) == 0) { + x += w; + continue; + } memcpy(front, back, sizeof(struct tb_cell)); send_attr(back->fg, back->bg); if (w > 1 && x >= front_buffer.width - (w - 1)) { @@ -205,6 +209,11 @@ void tb_present(void) bytebuffer_flush(&output_buffer, inout); } +void tb_sync(void) { + cellbuf_clear(&front_buffer); + tb_present(); +} + void tb_set_cursor(int cx, int cy) { assert(termw != -1); diff --git a/termbox/termbox.h b/termbox/termbox.h index c629b01c..a94d2b85 100644 --- a/termbox/termbox.h +++ b/termbox/termbox.h @@ -49,6 +49,9 @@ int tb_height(void); * tb_present(). */ void tb_present(void); +/* Variant of tb_present() that always refreshes the entire screen. */ +void tb_sync(void); + /* Returns a pointer to the internal screen state: a 1D array of cells in * raster order. You'll need to call tb_width() and tb_height() for the * array's dimensions. The array stays valid until tb_clear() or tb_present() |