mirror of
https://github.com/neovim/neovim
synced 2025-07-15 16:51:49 +00:00
fix(highlight): preserve bg transparency with winblend=100 #34825
Problem: When winblend=100 is set on floating windows with transparent background, the desktop background is not visible through the window. Solution: Add special case to preserve transparency (-1) when blend ratio is 100% and background was originally transparent.
This commit is contained in:
@ -754,10 +754,16 @@ int hl_blend_attrs(int back_attr, int front_attr, bool *through)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if we should preserve background transparency
|
// Check if we should preserve background transparency
|
||||||
// Use the raw attributes (before forcing colors) to check original transparency
|
// Special case for blend=100: preserve back layer background exactly (including bg=NONE)
|
||||||
cattrs.rgb_bg_color = (battrs_raw.rgb_bg_color == -1) && (fattrs_raw.rgb_bg_color == -1)
|
if (ratio == 100 && battrs_raw.rgb_bg_color == -1) {
|
||||||
? -1
|
// For 100% blend with transparent background, preserve the transparency
|
||||||
: rgb_blend(ratio, battrs.rgb_bg_color, fattrs.rgb_bg_color);
|
cattrs.rgb_bg_color = -1;
|
||||||
|
} else {
|
||||||
|
// Use the raw attributes (before forcing colors) to check original transparency
|
||||||
|
cattrs.rgb_bg_color = (battrs_raw.rgb_bg_color == -1) && (fattrs_raw.rgb_bg_color == -1)
|
||||||
|
? -1
|
||||||
|
: rgb_blend(ratio, battrs.rgb_bg_color, fattrs.rgb_bg_color);
|
||||||
|
}
|
||||||
cattrs.hl_blend = -1; // blend property was consumed
|
cattrs.hl_blend = -1; // blend property was consumed
|
||||||
HlKind kind = *through ? kHlBlendThrough : kHlBlend;
|
HlKind kind = *through ? kHlBlendThrough : kHlBlend;
|
||||||
id = get_attr_entry((HlEntry){ .attr = cattrs, .kind = kind,
|
id = get_attr_entry((HlEntry){ .attr = cattrs, .kind = kind,
|
||||||
|
@ -959,6 +959,7 @@ describe('float window', function()
|
|||||||
[28] = { foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGrey },
|
[28] = { foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGrey },
|
||||||
[29] = { background = Screen.colors.Yellow1, foreground = Screen.colors.Blue4 },
|
[29] = { background = Screen.colors.Yellow1, foreground = Screen.colors.Blue4 },
|
||||||
[30] = { background = Screen.colors.Grey, foreground = Screen.colors.Blue4, bold = true },
|
[30] = { background = Screen.colors.Grey, foreground = Screen.colors.Blue4, bold = true },
|
||||||
|
[31] = { foreground = Screen.colors.Grey0 },
|
||||||
}
|
}
|
||||||
screen:set_default_attr_ids(attrs)
|
screen:set_default_attr_ids(attrs)
|
||||||
end)
|
end)
|
||||||
@ -1839,9 +1840,9 @@ describe('float window', function()
|
|||||||
grid = [[
|
grid = [[
|
||||||
neeed some dummy |
|
neeed some dummy |
|
||||||
background text |
|
background text |
|
||||||
to sh{1: halloj! }{23:f}ect |
|
to sh{1: halloj! }{31:f}ect |
|
||||||
of co{1: BORDAA }{24:i}ng |
|
of co{1: BORDAA }{24:i}ng |
|
||||||
of bo{23:r}{24:der shado}w |
|
of bo{31:r}{24:der shado}w |
|
||||||
^ |
|
^ |
|
||||||
|
|
|
|
||||||
]],
|
]],
|
||||||
|
Reference in New Issue
Block a user