From f07a124c11fbbef03afbf9885964840b230d066c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 15 Feb 2020 18:59:21 +0100 Subject: [PATCH] render: reflow: set 'linebreak' flag before inserting new line --- render.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/render.c b/render.c index a75a5935..b78e6454 100644 --- a/render.c +++ b/render.c @@ -1022,7 +1022,21 @@ reflow(struct terminal *term, struct row **new_grid, int new_cols, int new_rows, empty_count = max(0, empty_count - (cols_needed - new_cols_left)); for (int i = 0; i < empty_count + 1; i++) { + const struct cell *old_cell = &old_row->cells[c - empty_count + i]; + + /* Out of columns on current row in new grid? */ if (new_col_idx >= new_cols) { + /* + * If last cell on last row and first cell on new + * row are non-empty, wrap the line, otherwise + * insert a hard line break. + */ + if (new_row->cells[new_cols - 1].wc == 0 || + old_cell->wc == 0) + { + new_row->linebreak = true; + } + new_col_idx = 0; new_row_idx = (new_row_idx + 1) & (new_rows - 1); @@ -1040,15 +1054,6 @@ reflow(struct terminal *term, struct row **new_grid, int new_cols, int new_rows, assert(new_col_idx >= 0); assert(new_col_idx < new_cols); - const struct cell *old_cell = &old_row->cells[c - empty_count + i]; - - if (new_col_idx == 0 && new_row_idx > 0 && - (new_grid[new_row_idx - 1]->cells[new_cols - 1].wc == 0 || - old_cell->wc == 0)) - { - new_grid[new_row_idx - 1]->linebreak = true; - } - new_row->cells[new_col_idx] = *old_cell; new_row->cells[new_col_idx].attrs.clean = 1; new_col_idx++;