mirror of
https://github.com/rose-pine/neovim.git
synced 2025-10-15 12:38:53 +02:00
37 lines
862 B
Lua
37 lines
862 B
Lua
local util = {}
|
|
|
|
local function get_byte(value, offset)
|
|
return bit.band(bit.rshift(value, offset), 0xFF)
|
|
end
|
|
|
|
local function get_color(color)
|
|
color = vim.api.nvim_get_color_by_name(color)
|
|
|
|
if color == -1 then
|
|
color = vim.opt.background:get() == 'dark' and 000 or 255255255
|
|
end
|
|
|
|
return { get_byte(color, 16), get_byte(color, 8), get_byte(color, 0) }
|
|
end
|
|
|
|
---@param fg string foreground color
|
|
---@param bg string background color
|
|
---@param alpha number number between 0 and 1. 0 results in bg, 1 results in fg
|
|
function util.blend(fg, bg, alpha)
|
|
bg = get_color(bg)
|
|
fg = get_color(fg)
|
|
|
|
local blendChannel = function(i)
|
|
local ret = (alpha * fg[i] + ((1 - alpha) * bg[i]))
|
|
return math.floor(math.min(math.max(0, ret), 255) + 0.5)
|
|
end
|
|
|
|
return string.format(
|
|
'#%02X%02X%02X',
|
|
blendChannel(1),
|
|
blendChannel(2),
|
|
blendChannel(3)
|
|
)
|
|
end
|
|
|
|
return util
|