59 lines
1.4 KiB
Lua
59 lines
1.4 KiB
Lua
local generic_colors = {
|
|
header = "#999999",
|
|
selected = "#72FF63",
|
|
important = "#FFD700",
|
|
additional = "#CCCCDD",
|
|
highlighted = "#608631",
|
|
new = "#00F529",
|
|
warning = "#FF8800",
|
|
disabled = "#332222",
|
|
muted = "#CCCCCC",
|
|
}
|
|
|
|
local function get_base_color(c)
|
|
return generic_colors[c] or ""
|
|
end
|
|
|
|
local function hex2rgb(hex)
|
|
hex = hex:gsub("#","")
|
|
return {
|
|
r = tonumber("0x" .. hex:sub(1,2)),
|
|
g = tonumber("0x" .. hex:sub(3,4)),
|
|
b = tonumber("0x" .. hex:sub(5,6))
|
|
}
|
|
end
|
|
|
|
local function rgb2hex(rgb)
|
|
return "#" .. string.format("%x", rgb.r) .. string.format("%x", rgb.g) .. string.format("%x", rgb.b)
|
|
end
|
|
|
|
local function rgb_colors_mix(colors)
|
|
local R = 0
|
|
local G = 0
|
|
local B = 0
|
|
for _, c in ipairs(colors) do
|
|
R = R + c.r
|
|
G = G + c.g
|
|
B = B + c.b
|
|
end
|
|
R = math.floor(R / #colors + 0.5)
|
|
G = math.floor(G / #colors + 0.5)
|
|
B = math.floor(B / #colors + 0.5)
|
|
return {r=R,g=G,b=B}
|
|
end
|
|
|
|
function mail.get_color(mix)
|
|
if type(mix) == "string" then
|
|
return get_base_color(mix)
|
|
elseif #mix == 1 then
|
|
return get_base_color(mix[1])
|
|
else
|
|
local colors2mix = {}
|
|
for _, c in ipairs(mix) do
|
|
colors2mix[#colors2mix+1] = hex2rgb(get_base_color(c))
|
|
end
|
|
local mixed_color = rgb_colors_mix(colors2mix)
|
|
return rgb2hex(mixed_color)
|
|
end
|
|
end
|