diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2021-03-14 08:35:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-14 08:35:48 +0100 |
commit | 3c8583e43bcb644d75c17c072ddf6f067439fde1 (patch) | |
tree | 5bff3f568eeefe2cdac24bea446dbc6ca6f14e4e /src/nvim/ui_compositor.c | |
parent | 314b222c25f1f21713082d3cb17f5fa442a8b3ec (diff) | |
parent | 8fe19d9d89d90eed347d9bfeb99446c0f400cca1 (diff) | |
download | rneovim-3c8583e43bcb644d75c17c072ddf6f067439fde1.tar.gz rneovim-3c8583e43bcb644d75c17c072ddf6f067439fde1.tar.bz2 rneovim-3c8583e43bcb644d75c17c072ddf6f067439fde1.zip |
Merge pull request #14020 from chentau/float_resize
Update lines after shrinking floating window
Diffstat (limited to 'src/nvim/ui_compositor.c')
-rw-r--r-- | src/nvim/ui_compositor.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/nvim/ui_compositor.c b/src/nvim/ui_compositor.c index 06efc9fa99..946215d957 100644 --- a/src/nvim/ui_compositor.c +++ b/src/nvim/ui_compositor.c @@ -127,6 +127,9 @@ bool ui_comp_put_grid(ScreenGrid *grid, int row, int col, int height, int width, bool valid, bool on_top) { bool moved; + + grid->comp_height = height; + grid->comp_width = width; if (grid->comp_index != 0) { moved = (row != grid->comp_row) || (col != grid->comp_col); if (ui_comp_should_draw()) { @@ -334,17 +337,25 @@ static void compose_line(Integer row, Integer startcol, Integer endcol, sattr_T *bg_attrs = &default_grid.attrs[default_grid.line_offset[row] +(size_t)startcol]; + int grid_width, grid_height; while (col < endcol) { int until = 0; for (size_t i = 0; i < kv_size(layers); i++) { ScreenGrid *g = kv_A(layers, i); - if (g->comp_row > row || row >= g->comp_row + g->Rows + // compose_line may have been called after a shrinking operation but + // before the resize has actually been applied. Therefore, we need to + // first check to see if any grids have pending updates to width/height, + // to ensure that we don't accidentally put any characters into `linebuf` + // that have been invalidated. + grid_width = MIN(g->Columns, g->comp_width); + grid_height = MIN(g->Rows, g->comp_height); + if (g->comp_row > row || row >= g->comp_row + grid_height || g->comp_disabled) { continue; } - if (g->comp_col <= col && col < g->comp_col+g->Columns) { + if (g->comp_col <= col && col < g->comp_col + grid_width) { grid = g; - until = g->comp_col+g->Columns; + until = g->comp_col + grid_width; } else if (g->comp_col > col) { until = MIN(until, g->comp_col); } |