diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-08-18 13:52:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-18 13:52:59 +0200 |
commit | 9bbac874f9e56c56e8f891ef691df293d11f11c6 (patch) | |
tree | bd3191e119459b2622f860e7345623a95c350a1d | |
parent | d351f1c871ee9901db389e164789ea33d3e1871f (diff) | |
parent | 628f8f3dfdbc734096b04c3040c1f4d2cea873c4 (diff) | |
download | rneovim-9bbac874f9e56c56e8f891ef691df293d11f11c6.tar.gz rneovim-9bbac874f9e56c56e8f891ef691df293d11f11c6.tar.bz2 rneovim-9bbac874f9e56c56e8f891ef691df293d11f11c6.zip |
Merge pull request #10798 from bfredl/multifix
multigrid: fixes
-rw-r--r-- | runtime/doc/ui.txt | 2 | ||||
-rw-r--r-- | src/nvim/api/ui_events.in.h | 2 | ||||
-rw-r--r-- | src/nvim/highlight.c | 7 | ||||
-rw-r--r-- | src/nvim/terminal.c | 1 | ||||
-rw-r--r-- | test/functional/ui/float_spec.lua | 50 | ||||
-rw-r--r-- | test/functional/ui/multigrid_spec.lua | 50 | ||||
-rw-r--r-- | test/functional/ui/popupmenu_spec.lua | 3 | ||||
-rw-r--r-- | test/functional/ui/screen.lua | 11 |
8 files changed, 73 insertions, 53 deletions
diff --git a/runtime/doc/ui.txt b/runtime/doc/ui.txt index 1440e2ac78..7d213f959b 100644 --- a/runtime/doc/ui.txt +++ b/runtime/doc/ui.txt @@ -292,6 +292,8 @@ numerical highlight ids to the actual attributes. `bold`: bold text. `underline`: underlined text. The line has `special` color. `undercurl`: undercurled text. The curl has `special` color. + `blend`: Blend level (0-100). Could be used by UIs to support + blending floating windows to the background. For absent color keys the default color should be used. Don't store the default value in the table, rather a sentinel value, so that diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 41bf0af65b..9f58257e53 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -100,7 +100,7 @@ void raw_line(Integer grid, Integer row, Integer startcol, void event(char *name, Array args, bool *args_consumed) FUNC_API_NOEXPORT; -void win_pos(Integer grid, Integer win, Integer startrow, +void win_pos(Integer grid, Window win, Integer startrow, Integer startcol, Integer width, Integer height) FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void win_float_pos(Integer grid, Window win, String anchor, Integer anchor_grid, diff --git a/src/nvim/highlight.c b/src/nvim/highlight.c index f11880cb2b..3a61409dfe 100644 --- a/src/nvim/highlight.c +++ b/src/nvim/highlight.c @@ -233,6 +233,7 @@ int hl_get_underline(void) .rgb_fg_color = -1, .rgb_bg_color = -1, .rgb_sp_color = -1, + .hl_blend = -1, }, .kind = kHlUI, .id1 = 0, @@ -427,6 +428,8 @@ int hl_blend_attrs(int back_attr, int front_attr, bool *through) cattrs.rgb_bg_color = rgb_blend(ratio, battrs.rgb_bg_color, fattrs.rgb_bg_color); + cattrs.hl_blend = -1; // blend property was consumed + HlKind kind = *through ? kHlBlendThrough : kHlBlend; id = get_attr_entry((HlEntry){ .attr = cattrs, .kind = kind, .id1 = back_attr, .id2 = front_attr }); @@ -614,6 +617,10 @@ Dictionary hlattrs2dict(HlAttrs ae, bool use_rgb) } } + if (ae.hl_blend > -1) { + PUT(hl, "blend", INTEGER_OBJ(ae.hl_blend)); + } + return hl; } diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index 5aeea3223b..3faf6dd5bb 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -662,6 +662,7 @@ void terminal_get_line_attributes(Terminal *term, win_T *wp, int linenr, .rgb_fg_color = vt_fg, .rgb_bg_color = vt_bg, .rgb_sp_color = -1, + .hl_blend = -1, }); } diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index 3e77349843..8dfe36c799 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -4144,14 +4144,14 @@ describe('floating windows', function() [4:----------------------------------------]| [4:----------------------------------------]| :tabnew | - ## grid 2 + ## grid 2 (hidden) x | {0:~ }| {0:~ }| {0:~ }| {0:~ }| {0:~ }| - ## grid 3 + ## grid 3 (hidden) {1:y }| {2:~ }| ## grid 4 @@ -4193,7 +4193,7 @@ describe('floating windows', function() ## grid 3 {1:y }| {2:~ }| - ## grid 4 + ## grid 4 (hidden) | {0:~ }| {0:~ }| @@ -4223,13 +4223,13 @@ describe('floating windows', function() [4:----------------------------------------]| [4:----------------------------------------]| :tabnext | - ## grid 2 + ## grid 2 (hidden) x | {0:~ }| {0:~ }| {0:~ }| {0:~ }| - ## grid 3 + ## grid 3 (hidden) {1:y }| {2:~ }| ## grid 4 @@ -4267,7 +4267,7 @@ describe('floating windows', function() [4:----------------------------------------]| [4:----------------------------------------]| :tabnew | - ## grid 2 + ## grid 2 (hidden) x | {0:~ }| {0:~ }| @@ -4313,7 +4313,7 @@ describe('floating windows', function() {0:~ }| {0:~ }| {0:~ }| - ## grid 4 + ## grid 4 (hidden) | {0:~ }| {0:~ }| @@ -4333,7 +4333,7 @@ describe('floating windows', function() [4:----------------------------------------]| [4:----------------------------------------]| :tabnext | - ## grid 2 + ## grid 2 (hidden) x | {0:~ }| {0:~ }| @@ -4365,7 +4365,11 @@ describe('floating windows', function() [5] = {foreground = tonumber('0x990000'), background = tonumber('0xfff1ff')}, [6] = {foreground = tonumber('0x332533'), background = tonumber('0xfff1ff')}, [7] = {background = tonumber('0xffcfff'), bold = true, foreground = tonumber('0x0000d8')}, - [8] = {background = Screen.colors.LightMagenta, bold = true, foreground = Screen.colors.Blue1} + [8] = {background = Screen.colors.LightMagenta, bold = true, foreground = Screen.colors.Blue1}, + [9] = {background = Screen.colors.LightMagenta, blend=30}, + [10] = {foreground = Screen.colors.Red, background = Screen.colors.LightMagenta, blend=0}, + [11] = {foreground = Screen.colors.Red, background = Screen.colors.LightMagenta, blend=80}, + [12] = {background = Screen.colors.LightMagenta, bold = true, foreground = Screen.colors.Blue1, blend=30}, }) insert([[ Lorem ipsum dolor sit amet, consectetur @@ -4445,9 +4449,9 @@ describe('floating windows', function() qui officia deserunt mollit anim id est | laborum^. | ## grid 4 - {1:test }| - {1: }| - {1:popup text }| + {9:test }| + {9: }| + {9:popup text }| ]], float_pos={[4] = {{id = 1002}, "NW", 1, 2, 5, true}}, unchanged=true} else screen:expect([[ @@ -4487,9 +4491,9 @@ describe('floating windows', function() qui officia deserunt mollit anim id est | laborum^. | ## grid 4 - {1:test }| - {1: }| - {4:popup text}{1: }| + {9:test }| + {9: }| + {10:popup text}{9: }| ]], float_pos={[4] = {{id = 1002}, "NW", 1, 2, 5, true}}} else screen:expect([[ @@ -4497,7 +4501,7 @@ describe('floating windows', function() exercitation ullamco laboris nisi ut aliquip ex | ea co{2:test}{3:o consequat}. Duis aute irure dolor in | repre{3:henderit in vol}uptate velit esse cillum | - dolor{4:popup text}{3:ul}la pariatur. Excepteur sint | + dolor{10:popup text}{3:ul}la pariatur. Excepteur sint | occaecat cupidatat non proident, sunt in culpa | qui officia deserunt mollit anim id est | laborum^. | @@ -4528,9 +4532,9 @@ describe('floating windows', function() qui officia deserunt mollit anim id est | laborum^. | ## grid 4 - {1:test }| - {1: }| - {4:popup text}{1: }| + {9:test }| + {9: }| + {11:popup text}{9: }| ]], float_pos={[4] = {{id = 1002}, "NW", 1, 2, 5, true}}, unchanged=true} else screen:expect([[ @@ -4570,9 +4574,9 @@ describe('floating windows', function() qui officia deserunt mollit anim id est | laborum^. | ## grid 4 - {4:popup text}{1: }| - {8:~ }| - {8:~ }| + {11:popup text}{9: }| + {12:~ }| + {12:~ }| ]], float_pos={[4] = {{id = 1002}, "NW", 1, 2, 5, true}}} else meths.input_mouse('wheel', 'down', '', 0, 4, 7) @@ -4672,7 +4676,7 @@ describe('floating windows', function() [2] = {foreground = Screen.colors.Grey0, background = tonumber('0xffcfff')}, [3] = {bold = true, foreground = Screen.colors.Blue1}, [4] = {background = tonumber('0xffcfff'), bold = true, foreground = tonumber('0xb282ff')}, - [5] = {background = Screen.colors.LightMagenta}, + [5] = {background = Screen.colors.LightMagenta, blend=30}, }) if multigrid then screen:expect{grid=[[ diff --git a/test/functional/ui/multigrid_spec.lua b/test/functional/ui/multigrid_spec.lua index c5a23e4661..a910f5e2ea 100644 --- a/test/functional/ui/multigrid_spec.lua +++ b/test/functional/ui/multigrid_spec.lua @@ -76,7 +76,7 @@ describe('ext_multigrid', function() it('positions windows correctly', function() command('vsplit') - screen:expect([[ + screen:expect{grid=[[ ## grid 1 [3:--------------------------]{12:│}[2:--------------------------]| [3:--------------------------]{12:│}[2:--------------------------]| @@ -118,15 +118,15 @@ describe('ext_multigrid', function() {1:~ }| {1:~ }| {1:~ }| - ]], nil, nil, function() + ]], condition=function() eq({ - [2] = { win = 1000, startrow = 0, startcol = 27, width = 26, height = 12 }, - [3] = { win = 1001, startrow = 0, startcol = 0, width = 26, height = 12 } + [2] = { win = {id=1000}, startrow = 0, startcol = 27, width = 26, height = 12 }, + [3] = { win = {id=1001}, startrow = 0, startcol = 0, width = 26, height = 12 } }, screen.win_position) - end) + end} command('wincmd l') command('split') - screen:expect([[ + screen:expect{grid=[[ ## grid 1 [3:--------------------------]{12:│}[4:--------------------------]| [3:--------------------------]{12:│}[4:--------------------------]| @@ -168,16 +168,16 @@ describe('ext_multigrid', function() {1:~ }| {1:~ }| {1:~ }| - ]], nil, nil, function() + ]], condition=function() eq({ - [2] = { win = 1000, startrow = 7, startcol = 27, width = 26, height = 5 }, - [3] = { win = 1001, startrow = 0, startcol = 0, width = 26, height = 12 }, - [4] = { win = 1002, startrow = 0, startcol = 27, width = 26, height = 6 } + [2] = { win = {id=1000}, startrow = 7, startcol = 27, width = 26, height = 5 }, + [3] = { win = {id=1001}, startrow = 0, startcol = 0, width = 26, height = 12 }, + [4] = { win = {id=1002}, startrow = 0, startcol = 27, width = 26, height = 6 } }, screen.win_position) - end) + end} command('wincmd h') command('q') - screen:expect([[ + screen:expect{grid=[[ ## grid 1 [4:-----------------------------------------------------]| [4:-----------------------------------------------------]| @@ -206,12 +206,12 @@ describe('ext_multigrid', function() {1:~ }| {1:~ }| {1:~ }| - ]], nil, nil, function() + ]], condition=function() eq({ - [2] = { win = 1000, startrow = 7, startcol = 0, width = 53, height = 5 }, - [4] = { win = 1002, startrow = 0, startcol = 0, width = 53, height = 6 } + [2] = { win = {id=1000}, startrow = 7, startcol = 0, width = 53, height = 5 }, + [4] = { win = {id=1002}, startrow = 0, startcol = 0, width = 53, height = 6 } }, screen.win_position) - end) + end} end) describe('split', function () @@ -1206,7 +1206,7 @@ describe('ext_multigrid', function() ]]) end) - it('handles switich tabs', function() + it('handles switch tabs', function() command('vsp') screen:expect([[ ## grid 1 @@ -1271,7 +1271,7 @@ describe('ext_multigrid', function() [4:-----------------------------------------------------]| {11:[No Name] }| | - ## grid 2 + ## grid 2 (hidden) | {1:~ }| {1:~ }| @@ -1284,7 +1284,7 @@ describe('ext_multigrid', function() {1:~ }| {1:~ }| {1:~ }| - ## grid 3 + ## grid 3 (hidden) | {1:~ }| {1:~ }| @@ -1328,7 +1328,7 @@ describe('ext_multigrid', function() [4:-----------------------------------------------------]| {12:[No Name] }| | - ## grid 2 + ## grid 2 (hidden) | {1:~ }| {1:~ }| @@ -1341,7 +1341,7 @@ describe('ext_multigrid', function() {1:~ }| {1:~ }| {1:~ }| - ## grid 3 + ## grid 3 (hidden) | {1:~ }| {1:~ }| @@ -1409,13 +1409,13 @@ describe('ext_multigrid', function() {1:~ }| {1:~ }| {1:~ }| - ## grid 4 + ## grid 4 (hidden) | {1:~ }| {1:~ }| {1:~ }| {1:~ }| - ## grid 5 + ## grid 5 (hidden) | {1:~ }| {1:~ }| @@ -1440,7 +1440,7 @@ describe('ext_multigrid', function() [4:-----------------------------------------------------]| {12:[No Name] }| | - ## grid 2 + ## grid 2 (hidden) | {1:~ }| {1:~ }| @@ -1452,7 +1452,7 @@ describe('ext_multigrid', function() {1:~ }| {1:~ }| {1:~ }| - ## grid 3 + ## grid 3 (hidden) | {1:~ }| {1:~ }| diff --git a/test/functional/ui/popupmenu_spec.lua b/test/functional/ui/popupmenu_spec.lua index 9bfea28ed7..c4cfc9d8d3 100644 --- a/test/functional/ui/popupmenu_spec.lua +++ b/test/functional/ui/popupmenu_spec.lua @@ -1644,6 +1644,7 @@ describe('builtin popupmenu', function() [42] = {foreground = tonumber('0x0c0c0c'), background = tonumber('0xe5a8e5')}, [43] = {background = tonumber('0x7f5d7f'), bold = true, foreground = tonumber('0x3f3f3f')}, [44] = {foreground = tonumber('0x3f3f3f'), background = tonumber('0x7f5d7f')}, + [45] = {background = Screen.colors.WebGray, blend=0}, }) command('syntax on') command('set mouse=a') @@ -1761,7 +1762,7 @@ describe('builtin popupmenu', function() Lorem ipsum d{1:ol}or sit amet, consectetur | adipisicing elit, sed do eiusmod tempor | bla bla incididunt^ | - incidid{22: incididunt }{27: }d{1:ol}ore magna aliqua. | + incidid{45: incididunt }{27: }d{1:ol}ore magna aliqua. | Ut enim{28: }{29:ut}{28: minim veniam}{25:,} quis nostrud | exercit{28:a}{29:labore}{28:llamco la}{25:b}oris nisi ut aliquip ex | {2:[No Nam}{30:e}{43:et}{30:[+] }{32: }{2: }| diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua index 81a15cada2..df0fce4199 100644 --- a/test/functional/ui/screen.lua +++ b/test/functional/ui/screen.lua @@ -316,9 +316,10 @@ local ext_keys = { -- cmdline_block: Expected ext_cmdline block (for function definitions) -- wildmenu_items: Expected items for ext_wildmenu -- wildmenu_pos: Expected position for ext_wildmenu -function Screen:expect(expected, attr_ids, attr_ignore) +function Screen:expect(expected, attr_ids, attr_ignore, ...) local grid, condition = nil, nil local expected_rows = {} + assert(next({...}) == nil, "invalid args to expect()") if type(expected) == "table" then assert(not (attr_ids ~= nil or attr_ignore ~= nil)) local is_key = {grid=true, attr_ids=true, attr_ignore=true, condition=true, @@ -1211,7 +1212,11 @@ function Screen:render(headers, attr_state, preview) local rv = {} for igrid,grid in pairs(self._grids) do if headers then - table.insert(rv, "## grid "..igrid) + local suffix = "" + if igrid > 1 and self.win_position[igrid] == nil and self.float_pos[igrid] == nil then + suffix = " (hidden)" + end + table.insert(rv, "## grid "..igrid..suffix) end for i = 1, grid.height do local cursor = self._cursor.grid == igrid and self._cursor.row == i @@ -1491,7 +1496,7 @@ function Screen:_equal_attrs(a, b) a.underline == b.underline and a.undercurl == b.undercurl and a.italic == b.italic and a.reverse == b.reverse and a.foreground == b.foreground and a.background == b.background and - a.special == b.special + a.special == b.special and a.blend == b.blend end function Screen:_equal_info(a, b) |