mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 16:28:17 +00:00
multigrid: Put everything on default_grid if not ext_multigrid
This commit is contained in:

committed by
Björn Linse

parent
d5754eae02
commit
0432e1586e
@@ -257,9 +257,7 @@ void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(utkarshme): Check if grid exists
|
ui_grid_resize((GridHandle)grid, (int)width, (int)height, error);
|
||||||
|
|
||||||
ui_grid_resize((GridHandle)grid, (int)width, (int)height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Pushes data into UI.UIData, to be consumed later by remote_ui_flush().
|
/// Pushes data into UI.UIData, to be consumed later by remote_ui_flush().
|
||||||
|
@@ -164,6 +164,8 @@ EXTERN int screen_Columns INIT(= 0); /* actual size of ScreenLines[] */
|
|||||||
EXTERN ScreenGrid default_grid INIT(= { 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0,
|
EXTERN ScreenGrid default_grid INIT(= { 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0,
|
||||||
0, 0 });
|
0, 0 });
|
||||||
|
|
||||||
|
#define DEFAULT_GRID_HANDLE 1 /* handle for the default_grid */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When vgetc() is called, it sets mod_mask to the set of modifiers that are
|
* When vgetc() is called, it sets mod_mask to the set of modifiers that are
|
||||||
* held down based on the MOD_MASK_* symbols that are read first.
|
* held down based on the MOD_MASK_* symbols that are read first.
|
||||||
|
@@ -118,11 +118,11 @@
|
|||||||
|
|
||||||
#define MB_FILLER_CHAR '<' /* character used when a double-width character
|
#define MB_FILLER_CHAR '<' /* character used when a double-width character
|
||||||
* doesn't fit. */
|
* doesn't fit. */
|
||||||
|
#define W_ENDCOL(wp) (wp->w_wincol + wp->w_width)
|
||||||
|
#define W_ENDROW(wp) (wp->w_winrow + wp->w_height)
|
||||||
|
|
||||||
#define W_ENDCOL(wp) (wp->w_width + wp->w_wincol)
|
// Get the offset for the current line buffer when redrawing a line for a grid
|
||||||
#define W_ENDROW(wp) (wp->w_height + wp->w_winrow)
|
#define GRID_TMPLINE(grid) ((grid)->Rows * (grid)->Columns)
|
||||||
|
|
||||||
#define DEFAULT_GRID_HANDLE 1
|
|
||||||
|
|
||||||
static match_T search_hl; /* used for 'hlsearch' highlight matching */
|
static match_T search_hl; /* used for 'hlsearch' highlight matching */
|
||||||
|
|
||||||
@@ -1772,7 +1772,7 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T
|
|||||||
* 6. set highlighting for the Visual area an other text
|
* 6. set highlighting for the Visual area an other text
|
||||||
*/
|
*/
|
||||||
col = 0;
|
col = 0;
|
||||||
off = (int)(grid->Rows * grid->Columns);
|
off = (int)GRID_TMPLINE(grid);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 1. Add the cmdwin_type for the command-line window
|
* 1. Add the cmdwin_type for the command-line window
|
||||||
@@ -2674,7 +2674,7 @@ win_line (
|
|||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
off = (unsigned)(grid->Rows * grid->Columns);
|
off = (unsigned)GRID_TMPLINE(grid);
|
||||||
int col = 0; // Visual column on screen.
|
int col = 0; // Visual column on screen.
|
||||||
if (wp->w_p_rl) {
|
if (wp->w_p_rl) {
|
||||||
// Rightleft window: process the text in the normal direction, but put
|
// Rightleft window: process the text in the normal direction, but put
|
||||||
@@ -4274,7 +4274,7 @@ win_line (
|
|||||||
}
|
}
|
||||||
|
|
||||||
col = 0;
|
col = 0;
|
||||||
off = (unsigned)(grid->Rows * grid->Columns);
|
off = (unsigned)GRID_TMPLINE(grid);
|
||||||
if (wp->w_p_rl) {
|
if (wp->w_p_rl) {
|
||||||
col = grid->Columns - 1; /* col is not used if breaking! */
|
col = grid->Columns - 1; /* col is not used if breaking! */
|
||||||
off += col;
|
off += col;
|
||||||
@@ -4366,7 +4366,20 @@ static void grid_move_line(ScreenGrid *grid, int row, int coloff, int endcol,
|
|||||||
if (endcol > grid->Columns)
|
if (endcol > grid->Columns)
|
||||||
endcol = grid->Columns;
|
endcol = grid->Columns;
|
||||||
|
|
||||||
off_from = (unsigned)(grid->Rows * grid->Columns);
|
// If UI is not externalized, merge the contents of global and window grids
|
||||||
|
if (!ui_is_external(kUIMultigrid) && grid != &default_grid) {
|
||||||
|
row += grid->OffsetRow;
|
||||||
|
coloff += grid->OffsetColumn;
|
||||||
|
memcpy(default_grid.ScreenLines + GRID_TMPLINE(&default_grid),
|
||||||
|
grid->ScreenLines + GRID_TMPLINE(grid),
|
||||||
|
sizeof(schar_T) * grid->Columns);
|
||||||
|
memcpy(default_grid.ScreenAttrs + GRID_TMPLINE(&default_grid),
|
||||||
|
grid->ScreenAttrs + GRID_TMPLINE(grid),
|
||||||
|
sizeof(sattr_T) * grid->Columns);
|
||||||
|
grid = &default_grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
off_from = (unsigned)GRID_TMPLINE(grid);
|
||||||
off_to = grid->LineOffset[row] + coloff;
|
off_to = grid->LineOffset[row] + coloff;
|
||||||
max_off_from = off_from + grid->Columns;
|
max_off_from = off_from + grid->Columns;
|
||||||
max_off_to = grid->LineOffset[row] + grid->Columns;
|
max_off_to = grid->LineOffset[row] + grid->Columns;
|
||||||
@@ -4460,7 +4473,8 @@ static void grid_move_line(ScreenGrid *grid, int row, int coloff, int endcol,
|
|||||||
// blank out the rest of the line
|
// blank out the rest of the line
|
||||||
// TODO(bfredl): we could cache winline widths
|
// TODO(bfredl): we could cache winline widths
|
||||||
while (col < clear_width) {
|
while (col < clear_width) {
|
||||||
if (grid->ScreenLines[off_to][0] != ' ' || grid->ScreenLines[off_to][1] != NUL
|
if (grid->ScreenLines[off_to][0] != ' '
|
||||||
|
|| grid->ScreenLines[off_to][1] != NUL
|
||||||
|| grid->ScreenAttrs[off_to] != bg_attr) {
|
|| grid->ScreenAttrs[off_to] != bg_attr) {
|
||||||
grid->ScreenLines[off_to][0] = ' ';
|
grid->ScreenLines[off_to][0] = ' ';
|
||||||
grid->ScreenLines[off_to][1] = NUL;
|
grid->ScreenLines[off_to][1] = NUL;
|
||||||
@@ -5111,7 +5125,7 @@ win_redr_custom (
|
|||||||
*wp->w_p_stl == NUL ? 0 : OPT_LOCAL);
|
*wp->w_p_stl == NUL ? 0 : OPT_LOCAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
col += wp->w_winrow;
|
col += wp->w_wincol;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxwidth <= 0)
|
if (maxwidth <= 0)
|
||||||
@@ -5258,7 +5272,9 @@ void grid_getbytes(ScreenGrid *grid, int row, int col, char_u *bytes,
|
|||||||
{
|
{
|
||||||
unsigned off;
|
unsigned off;
|
||||||
|
|
||||||
if (grid == NULL) {
|
if (!ui_is_external(kUIMultigrid)) {
|
||||||
|
row += grid->OffsetRow;
|
||||||
|
col += grid->OffsetColumn;
|
||||||
grid = &default_grid;
|
grid = &default_grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5321,6 +5337,13 @@ void grid_puts_len(ScreenGrid *grid, char_u *text, int textlen, int row,
|
|||||||
grid = &default_grid;
|
grid = &default_grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If UI is not externalized, keep working on the default grid
|
||||||
|
if (!ui_is_external(kUIMultigrid) && grid != &default_grid) {
|
||||||
|
row += grid->OffsetRow;
|
||||||
|
col += grid->OffsetColumn;
|
||||||
|
grid = &default_grid;
|
||||||
|
}
|
||||||
|
|
||||||
// safety check
|
// safety check
|
||||||
if (grid->ScreenLines == NULL || row >= grid->Rows || col >= grid->Columns) {
|
if (grid->ScreenLines == NULL || row >= grid->Rows || col >= grid->Columns) {
|
||||||
return;
|
return;
|
||||||
@@ -5777,6 +5800,15 @@ void grid_fill(ScreenGrid *grid, int start_row, int end_row, int start_col,
|
|||||||
grid = &default_grid;
|
grid = &default_grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if grids are not externalized, keep working on the default_grid
|
||||||
|
if (!ui_is_external(kUIMultigrid) && grid != &default_grid) {
|
||||||
|
start_row += grid->OffsetRow;
|
||||||
|
end_row += grid->OffsetRow;
|
||||||
|
start_col += grid->OffsetColumn;
|
||||||
|
end_col += grid->OffsetColumn;
|
||||||
|
grid = &default_grid;
|
||||||
|
}
|
||||||
|
|
||||||
if (end_row > grid->Rows) // safety check
|
if (end_row > grid->Rows) // safety check
|
||||||
end_row = grid->Rows;
|
end_row = grid->Rows;
|
||||||
if (end_col > grid->Columns) // safety check
|
if (end_col > grid->Columns) // safety check
|
||||||
@@ -6275,6 +6307,14 @@ int grid_ins_lines(ScreenGrid *grid, int row, int line_count, int end,
|
|||||||
grid = &default_grid;
|
grid = &default_grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If UI is not externalized, keep working on default grid
|
||||||
|
if (!ui_is_external(kUIMultigrid) && grid != &default_grid) {
|
||||||
|
row += grid->OffsetRow;
|
||||||
|
end += grid->OffsetRow;
|
||||||
|
col += grid->OffsetColumn;
|
||||||
|
grid = &default_grid;
|
||||||
|
}
|
||||||
|
|
||||||
if (!screen_valid(TRUE) || line_count <= 0) {
|
if (!screen_valid(TRUE) || line_count <= 0) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
@@ -6326,6 +6366,14 @@ int grid_del_lines(ScreenGrid *grid, int row, int line_count, int end,
|
|||||||
grid = &default_grid;
|
grid = &default_grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If UI is not externalized, keep working on default grid
|
||||||
|
if (!ui_is_external(kUIMultigrid) && grid != &default_grid) {
|
||||||
|
row += grid->OffsetRow;
|
||||||
|
end += grid->OffsetRow;
|
||||||
|
col += grid->OffsetColumn;
|
||||||
|
grid = &default_grid;
|
||||||
|
}
|
||||||
|
|
||||||
if (!screen_valid(TRUE) || line_count <= 0) {
|
if (!screen_valid(TRUE) || line_count <= 0) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
@@ -440,13 +440,16 @@ Array ui_array(void)
|
|||||||
return all_uis;
|
return all_uis;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ui_grid_resize(GridHandle grid_handle, int width, int height)
|
void ui_grid_resize(GridHandle grid_handle, int width, int height, Error *error)
|
||||||
{
|
{
|
||||||
win_T *wp = get_win_by_grid_handle(grid_handle);
|
if (grid_handle == DEFAULT_GRID_HANDLE) {
|
||||||
|
screen_resize(width, height);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
win_T *wp = get_win_by_grid_handle(grid_handle);
|
||||||
if (wp == NULL) {
|
if (wp == NULL) {
|
||||||
//TODO(utkarshme): error out
|
api_set_error(error, kErrorTypeValidation, "No window with the given handle");
|
||||||
abort();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user