diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-03-28 15:27:32 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2024-03-29 08:15:28 +0100 |
commit | 2e4e12756a697d4767ec294e1f268384395e7a7f (patch) | |
tree | 5dc431001eefa5e4dc26651eea1e7c1dcd093f76 /test/functional/ui/screen.lua | |
parent | e2224a7933b6e30ab6efb0b7ad4e3f26da57c226 (diff) | |
download | rneovim-2e4e12756a697d4767ec294e1f268384395e7a7f.tar.gz rneovim-2e4e12756a697d4767ec294e1f268384395e7a7f.tar.bz2 rneovim-2e4e12756a697d4767ec294e1f268384395e7a7f.zip |
feat(ui): indicate margins for the area used by win_viewport
Problem: using win_viewport for implementing smooth scrolling in an external
UI might run into problems when winbar or borders is used, as there is
no indication that the entire grid is not used for scrolled buffer text.
Solution: add `win_viewport_margins` event.
Diffstat (limited to 'test/functional/ui/screen.lua')
-rw-r--r-- | test/functional/ui/screen.lua | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua index d741b440c5..ee9334a9fe 100644 --- a/test/functional/ui/screen.lua +++ b/test/functional/ui/screen.lua @@ -204,6 +204,7 @@ function Screen.new(width, height) wildmenu_selected = nil, win_position = {}, win_viewport = {}, + win_viewport_margins = {}, float_pos = {}, msg_grid = nil, msg_grid_pos = nil, @@ -337,6 +338,7 @@ local ext_keys = { 'ruler', 'float_pos', 'win_viewport', + 'win_viewport_margins', } local expect_keys = { @@ -621,6 +623,9 @@ screen:redraw_debug() to show all intermediate screen states.]] if expected.win_viewport == nil then extstate.win_viewport = nil end + if expected.win_viewport_margins == nil then + extstate.win_viewport_margins = nil + end if expected.float_pos then expected.float_pos = deepcopy(expected.float_pos) @@ -993,6 +998,7 @@ function Screen:_handle_grid_destroy(grid) if self._options.ext_multigrid then self.win_position[grid] = nil self.win_viewport[grid] = nil + self.win_viewport_margins[grid] = nil end end @@ -1048,6 +1054,16 @@ function Screen:_handle_win_viewport( } end +function Screen:_handle_win_viewport_margins(grid, win, top, bottom, left, right) + self.win_viewport_margins[grid] = { + win = win, + top = top, + bottom = bottom, + left = left, + right = right, + } +end + function Screen:_handle_win_float_pos(grid, ...) self.win_position[grid] = nil self.float_pos[grid] = { ... } @@ -1466,6 +1482,8 @@ function Screen:_extstate_repr(attr_state) end local win_viewport = (next(self.win_viewport) and self.win_viewport) or nil + local win_viewport_margins = (next(self.win_viewport_margins) and self.win_viewport_margins) + or nil return { popupmenu = self.popupmenu, @@ -1480,6 +1498,7 @@ function Screen:_extstate_repr(attr_state) msg_history = msg_history, float_pos = self.float_pos, win_viewport = win_viewport, + win_viewport_margins = win_viewport_margins, } end |