mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
fix(float): apply 'winblend' to title/footer highlight (#25999)
This commit is contained in:
parent
b331302442
commit
9ecb43b637
@ -725,6 +725,7 @@ static void win_redr_bordertext(win_T *wp, VirtText vt, int col)
|
|||||||
if (text == NULL) {
|
if (text == NULL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
attr = hl_apply_winblend(wp, attr);
|
||||||
col += grid_line_puts(col, text, -1, attr);
|
col += grid_line_puts(col, text, -1, attr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,6 +323,23 @@ int hl_get_ui_attr(int ns_id, int idx, int final_id, bool optional)
|
|||||||
.id1 = idx, .id2 = final_id });
|
.id1 = idx, .id2 = final_id });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Apply 'winblend' to highlight attributes.
|
||||||
|
///
|
||||||
|
/// @param wp The window to get 'winblend' value from.
|
||||||
|
/// @param attr The original attribute code.
|
||||||
|
///
|
||||||
|
/// @return The attribute code with 'winblend' applied.
|
||||||
|
int hl_apply_winblend(win_T *wp, int attr)
|
||||||
|
{
|
||||||
|
HlEntry entry = attr_entry(attr);
|
||||||
|
// if blend= attribute is not set, 'winblend' value overrides it.
|
||||||
|
if (entry.attr.hl_blend == -1 && wp->w_p_winbl > 0) {
|
||||||
|
entry.attr.hl_blend = (int)wp->w_p_winbl;
|
||||||
|
attr = get_attr_entry(entry);
|
||||||
|
}
|
||||||
|
return attr;
|
||||||
|
}
|
||||||
|
|
||||||
void update_window_hl(win_T *wp, bool invalid)
|
void update_window_hl(win_T *wp, bool invalid)
|
||||||
{
|
{
|
||||||
int ns_id = wp->w_ns_hl;
|
int ns_id = wp->w_ns_hl;
|
||||||
@ -358,13 +375,8 @@ void update_window_hl(win_T *wp, bool invalid)
|
|||||||
wp->w_hl_attr_normal = float_win ? HL_ATTR(HLF_NFLOAT) : 0;
|
wp->w_hl_attr_normal = float_win ? HL_ATTR(HLF_NFLOAT) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if blend= attribute is not set, 'winblend' value overrides it.
|
if (wp->w_floating) {
|
||||||
if (wp->w_floating && wp->w_p_winbl > 0) {
|
wp->w_hl_attr_normal = hl_apply_winblend(wp, wp->w_hl_attr_normal);
|
||||||
HlEntry entry = attr_entry(wp->w_hl_attr_normal);
|
|
||||||
if (entry.attr.hl_blend == -1) {
|
|
||||||
entry.attr.hl_blend = (int)wp->w_p_winbl;
|
|
||||||
wp->w_hl_attr_normal = get_attr_entry(entry);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wp->w_float_config.shadow = false;
|
wp->w_float_config.shadow = false;
|
||||||
@ -375,13 +387,8 @@ void update_window_hl(win_T *wp, bool invalid)
|
|||||||
attr = hl_get_ui_attr(ns_id, HLF_BORDER,
|
attr = hl_get_ui_attr(ns_id, HLF_BORDER,
|
||||||
wp->w_float_config.border_hl_ids[i], false);
|
wp->w_float_config.border_hl_ids[i], false);
|
||||||
}
|
}
|
||||||
HlAttrs a = syn_attr2entry(attr);
|
attr = hl_apply_winblend(wp, attr);
|
||||||
if (a.hl_blend == -1 && wp->w_p_winbl > 0) {
|
if (syn_attr2entry(attr).hl_blend > 0) {
|
||||||
HlEntry entry = attr_entry(attr);
|
|
||||||
a.hl_blend = entry.attr.hl_blend = (int)wp->w_p_winbl;
|
|
||||||
attr = get_attr_entry(entry);
|
|
||||||
}
|
|
||||||
if (a.hl_blend > 0) {
|
|
||||||
wp->w_float_config.shadow = true;
|
wp->w_float_config.shadow = true;
|
||||||
}
|
}
|
||||||
wp->w_float_config.border_attr[i] = attr;
|
wp->w_float_config.border_attr[i] = attr;
|
||||||
@ -400,13 +407,8 @@ void update_window_hl(win_T *wp, bool invalid)
|
|||||||
wp->w_hl_attr_normalnc = hl_def[HLF_INACTIVE];
|
wp->w_hl_attr_normalnc = hl_def[HLF_INACTIVE];
|
||||||
}
|
}
|
||||||
|
|
||||||
// if blend= attribute is not set, 'winblend' value overrides it.
|
if (wp->w_floating) {
|
||||||
if (wp->w_floating && wp->w_p_winbl > 0) {
|
wp->w_hl_attr_normalnc = hl_apply_winblend(wp, wp->w_hl_attr_normalnc);
|
||||||
HlEntry entry = attr_entry(wp->w_hl_attr_normalnc);
|
|
||||||
if (entry.attr.hl_blend == -1) {
|
|
||||||
entry.attr.hl_blend = (int)wp->w_p_winbl;
|
|
||||||
wp->w_hl_attr_normalnc = get_attr_entry(entry);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9198,6 +9198,9 @@ describe('float window', function()
|
|||||||
[20] = {background = Screen.colors.White, foreground = Screen.colors.Gray0};
|
[20] = {background = Screen.colors.White, foreground = Screen.colors.Gray0};
|
||||||
[21] = {background = Screen.colors.White, bold = true, foreground = tonumber('0x00007f')};
|
[21] = {background = Screen.colors.White, bold = true, foreground = tonumber('0x00007f')};
|
||||||
[22] = {background = Screen.colors.Gray90, foreground = Screen.colors.Gray0};
|
[22] = {background = Screen.colors.Gray90, foreground = Screen.colors.Gray0};
|
||||||
|
[23] = {blend = 100, bold = true, foreground = Screen.colors.Magenta};
|
||||||
|
[24] = {foreground = tonumber('0x7f007f'), bold = true, background = Screen.colors.White};
|
||||||
|
[25] = {foreground = tonumber('0x7f007f'), bold = true, background = Screen.colors.Grey90};
|
||||||
})
|
})
|
||||||
insert([[
|
insert([[
|
||||||
Lorem ipsum dolor sit amet, consectetur
|
Lorem ipsum dolor sit amet, consectetur
|
||||||
@ -9483,8 +9486,8 @@ describe('float window', function()
|
|||||||
]])
|
]])
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Check that 'winblend' applies to border
|
-- Check that 'winblend' applies to border/title/footer
|
||||||
meths.win_set_config(win, {border='single'})
|
meths.win_set_config(win, {border='single', title='Title', footer='Footer'})
|
||||||
meths.set_option_value('winblend', 100, {win=win.id})
|
meths.set_option_value('winblend', 100, {win=win.id})
|
||||||
meths.set_option_value("cursorline", true, {win=0})
|
meths.set_option_value("cursorline", true, {win=0})
|
||||||
command('hi clear VertSplit')
|
command('hi clear VertSplit')
|
||||||
@ -9513,21 +9516,21 @@ describe('float window', function()
|
|||||||
## grid 3
|
## grid 3
|
||||||
|
|
|
|
||||||
## grid 4
|
## grid 4
|
||||||
{17:┌───────────────┐}|
|
{17:┌}{23:Title}{17:──────────┐}|
|
||||||
{17:│}{11:popup text}{18: }{17:│}|
|
{17:│}{11:popup text}{18: }{17:│}|
|
||||||
{17:│}{19:~ }{17:│}|
|
{17:│}{19:~ }{17:│}|
|
||||||
{17:│}{19:~ }{17:│}|
|
{17:│}{19:~ }{17:│}|
|
||||||
{17:└───────────────┘}|
|
{17:└}{23:Footer}{17:─────────┘}|
|
||||||
]], float_pos={[4] = {{id = 1001}, "NW", 1, 2, 5, true}}}
|
]], float_pos={[4] = {{id = 1001}, "NW", 1, 2, 5, true}}}
|
||||||
else
|
else
|
||||||
screen:expect([[
|
screen:expect([[
|
||||||
Ut enim ad minim veniam, quis nostrud |
|
Ut enim ad minim veniam, quis nostrud |
|
||||||
exercitation ullamco laboris nisi ut aliquip ex |
|
exercitation ullamco laboris nisi ut aliquip ex |
|
||||||
ea co{20:┌───────────────┐}Duis aute irure dolor in |
|
ea co{20:┌}{24:Title}{20:──────────┐}Duis aute irure dolor in |
|
||||||
repre{20:│}{5:popup}{6:it i}{5:text}{20:lu│}tate velit esse cillum |
|
repre{20:│}{5:popup}{6:it i}{5:text}{20:lu│}tate velit esse cillum |
|
||||||
dolor{20:│}{21:~}{20:eu fugiat null│} pariatur. Excepteur sint |
|
dolor{20:│}{21:~}{20:eu fugiat null│} pariatur. Excepteur sint |
|
||||||
occae{20:│}{21:~}{20:t cupidatat no│} proident, sunt in culpa |
|
occae{20:│}{21:~}{20:t cupidatat no│} proident, sunt in culpa |
|
||||||
{16:^qui o}{22:└───────────────┘}{16:ollit anim id est }|
|
{16:^qui o}{22:└}{25:Footer}{22:─────────┘}{16:ollit anim id est }|
|
||||||
laborum. |
|
laborum. |
|
||||||
|
|
|
|
||||||
]])
|
]])
|
||||||
|
Loading…
Reference in New Issue
Block a user