mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 00:20:05 +08:00
feat(cpicker): add hwb color space
This commit is contained in:
parent
98e67a214c
commit
a9a14ff85b
@ -74,7 +74,7 @@ end
|
|||||||
|
|
||||||
local function copy_color()
|
local function copy_color()
|
||||||
local from, to = vim
|
local from, to = vim
|
||||||
.regex([[#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)\|cmyk(\d\+%,\s\d\+%,\s\d\+%,\s\d\+%)]])
|
.regex([[#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)\|cmyk(\d\+%,\s\d\+%,\s\d\+%,\s\d\+%)\|hwb(\d\+,\s\d\+%,\s\d\+%)]])
|
||||||
:match_str(vim.fn.getline('.'))
|
:match_str(vim.fn.getline('.'))
|
||||||
if from then
|
if from then
|
||||||
vim.fn.setreg('+', string.sub(vim.fn.getline('.'), from, to + 1))
|
vim.fn.setreg('+', string.sub(vim.fn.getline('.'), from, to + 1))
|
||||||
|
112
bundle/cpicker.nvim/lua/cpicker/formats/hwb.lua
Normal file
112
bundle/cpicker.nvim/lua/cpicker/formats/hwb.lua
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
--=============================================================================
|
||||||
|
-- hwb.lua
|
||||||
|
-- Copyright (c) 2019-2024 Wang Shidong & Contributors
|
||||||
|
-- Author: Wang Shidong < wsdjeg@outlook.com >
|
||||||
|
-- URL: https://spacevim.org
|
||||||
|
-- License: GPLv3
|
||||||
|
--=============================================================================
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
local color = require('spacevim.api.color')
|
||||||
|
local util = require('cpicker.util')
|
||||||
|
|
||||||
|
local hue = 0 -- [0, 360]
|
||||||
|
local whiteness = 0 -- [0, 100%]
|
||||||
|
local blackness = 0 -- [0, 100%]
|
||||||
|
|
||||||
|
local function on_change_argv()
|
||||||
|
return 'hwb', { hue, whiteness, blackness }
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.buf_text()
|
||||||
|
local rst = {}
|
||||||
|
local h_bar = util.generate_bar(hue, '+', 360)
|
||||||
|
local w_bar = util.generate_bar(whiteness, '+')
|
||||||
|
local b_bar = util.generate_bar(blackness, '+')
|
||||||
|
table.insert(rst, 'HWB: H: ' .. string.format('%4s', math.floor(hue + 0.5)) .. ' ' .. h_bar)
|
||||||
|
table.insert(
|
||||||
|
rst,
|
||||||
|
' W: ' .. string.format('%3s', math.floor(whiteness * 100 + 0.5)) .. '% ' .. w_bar
|
||||||
|
)
|
||||||
|
table.insert(
|
||||||
|
rst,
|
||||||
|
' B: ' .. string.format('%3s', math.floor(blackness * 100 + 0.5)) .. '% ' .. b_bar
|
||||||
|
)
|
||||||
|
return rst
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.color_code()
|
||||||
|
return
|
||||||
|
' =========' .. string.format(
|
||||||
|
' hwb(%s, %s%%, %s%%)',
|
||||||
|
math.floor(hue + 0.5),
|
||||||
|
math.floor(whiteness * 100 + 0.5),
|
||||||
|
math.floor(blackness * 100 + 0.5)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function increase_hwb_h()
|
||||||
|
if hue <= 359 then
|
||||||
|
hue = hue + 1
|
||||||
|
elseif hue < 360 then
|
||||||
|
hue = 360
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function reduce_hwb_h()
|
||||||
|
if hue >= 1 then
|
||||||
|
hue = hue - 1
|
||||||
|
elseif hue > 0 then
|
||||||
|
hue = 0
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function increase_hwb_w()
|
||||||
|
if whiteness <= 0.99 then
|
||||||
|
whiteness = whiteness + 0.01
|
||||||
|
elseif whiteness < 1 then
|
||||||
|
whiteness = 1
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function reduce_hwb_w()
|
||||||
|
if whiteness >= 0.01 then
|
||||||
|
whiteness = whiteness - 0.01
|
||||||
|
elseif whiteness > 0 and whiteness < 0.01 then
|
||||||
|
whiteness = 0
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function increase_hwb_b()
|
||||||
|
if blackness <= 0.99 then
|
||||||
|
blackness = blackness + 0.01
|
||||||
|
elseif blackness < 1 then
|
||||||
|
blackness = 1
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
local function reduce_hwb_b()
|
||||||
|
if blackness >= 0.01 then
|
||||||
|
blackness = blackness - 0.01
|
||||||
|
elseif blackness > 0 and blackness < 0.01 then
|
||||||
|
blackness = 0
|
||||||
|
end
|
||||||
|
return on_change_argv()
|
||||||
|
end
|
||||||
|
function M.increase_reduce_functions()
|
||||||
|
return {
|
||||||
|
{ increase_hwb_h, reduce_hwb_h },
|
||||||
|
{ increase_hwb_w, reduce_hwb_w },
|
||||||
|
{ increase_hwb_b, reduce_hwb_b },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.on_change(f, code)
|
||||||
|
if f == 'hwb' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
hue, whiteness, blackness = color[f .. '2hwb'](unpack(code))
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
|
|
@ -5,7 +5,7 @@ let b:current_syntax = 'spacevim_cpicker'
|
|||||||
syntax case ignore
|
syntax case ignore
|
||||||
|
|
||||||
syn match ProcessBar /[?=+]\+/
|
syn match ProcessBar /[?=+]\+/
|
||||||
syn match SpaceVimPickerCode /#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)\|cmyk(\d\+%,\s\d\+%,\s\d\+%,\s\d\+%)/
|
syn match SpaceVimPickerCode /#[0123456789ABCDEF]\+\|rgb(\d\+,\s\d\+,\s\d\+)\|hsl(\d\+,\s\d\+%,\s\d\+%)\|hsv(\d\+,\s\d\+%,\s\d\+%)\|cmyk(\d\+%,\s\d\+%,\s\d\+%,\s\d\+%)\|hwb(\d\+,\s\d\+%,\s\d\+%)/
|
||||||
syn match SpaceVimPickerBackground /=\+/
|
syn match SpaceVimPickerBackground /=\+/
|
||||||
|
|
||||||
highlight ProcessBar ctermfg=Gray ctermbg=Gray guifg=Gray guibg=Gray
|
highlight ProcessBar ctermfg=Gray ctermbg=Gray guifg=Gray guibg=Gray
|
||||||
|
@ -84,9 +84,9 @@ color.rgb2cmyk = function(r, g, b)
|
|||||||
local c, m, y, k
|
local c, m, y, k
|
||||||
k = 1 - math.max(r, g, b)
|
k = 1 - math.max(r, g, b)
|
||||||
if k ~= 1 then
|
if k ~= 1 then
|
||||||
c = (1 - r - k) / (1 - k)
|
c = (1 - r - k) / (1 - k)
|
||||||
m = (1 - g - k) / (1 - k)
|
m = (1 - g - k) / (1 - k)
|
||||||
y = (1 - b - k) / (1 - k)
|
y = (1 - b - k) / (1 - k)
|
||||||
else
|
else
|
||||||
c, m, y = 0, 0, 0
|
c, m, y = 0, 0, 0
|
||||||
end
|
end
|
||||||
@ -160,10 +160,10 @@ end
|
|||||||
color.hsl2hsv = function(h, s, l)
|
color.hsl2hsv = function(h, s, l)
|
||||||
return color.rgb2hsv(color.hsl2rgb(h, s, l))
|
return color.rgb2hsv(color.hsl2rgb(h, s, l))
|
||||||
end
|
end
|
||||||
color.hsl2cmyk = function (h, s, l)
|
color.hsl2cmyk = function(h, s, l)
|
||||||
return color.rgb2cmyk(color.hsl2rgb(h, s, l))
|
return color.rgb2cmyk(color.hsl2rgb(h, s, l))
|
||||||
end
|
end
|
||||||
color.hsv2cmyk = function (h, s, v)
|
color.hsv2cmyk = function(h, s, v)
|
||||||
return color.rgb2cmyk(color.hsv2rgb(h, s, v))
|
return color.rgb2cmyk(color.hsv2rgb(h, s, v))
|
||||||
end
|
end
|
||||||
color.cmyk2hsv = function(c, m, y, k)
|
color.cmyk2hsv = function(c, m, y, k)
|
||||||
@ -174,6 +174,65 @@ color.cmyk2hsl = function(c, m, y, k)
|
|||||||
return color.rgb2hsl(color.cmyk2rgb(c, m, y, k))
|
return color.rgb2hsl(color.cmyk2rgb(c, m, y, k))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
color.hwb2rgb = function(h, w, b)
|
||||||
|
if w + b >= 1 then
|
||||||
|
local gray = w / (w + b)
|
||||||
|
return gray, gray, gray
|
||||||
|
end
|
||||||
|
local r, g, b = color.hsl2rgb(h, 1, 0.5)
|
||||||
|
r = r * (1 - w - b) + w
|
||||||
|
if r > 1 then
|
||||||
|
r = 1
|
||||||
|
elseif r < 0 then
|
||||||
|
r = 0
|
||||||
|
end
|
||||||
|
g = g * (1 - w - b) + w
|
||||||
|
if g > 1 then
|
||||||
|
g = 1
|
||||||
|
elseif g < 0 then
|
||||||
|
g = 0
|
||||||
|
end
|
||||||
|
b = b * (1 - w - b) + w
|
||||||
|
if b > 1 then
|
||||||
|
b = 1
|
||||||
|
elseif b < 0 then
|
||||||
|
b = 0
|
||||||
|
end
|
||||||
|
return r, g, b
|
||||||
|
end
|
||||||
|
|
||||||
|
color.rgb2hwb = function(r, g, b)
|
||||||
|
local h = color.rgb2hsl(r, g, b)
|
||||||
|
local w = math.min(r, g, b)
|
||||||
|
b = 1 - math.max(r, g, b)
|
||||||
|
return h, w, b
|
||||||
|
end
|
||||||
|
|
||||||
|
color.hsv2hwb = function(h, s, v)
|
||||||
|
return color.rgb2hwb(color.hsv2rgb(h, s, v))
|
||||||
|
end
|
||||||
|
|
||||||
|
color.hsl2hwb = function(h, s, l)
|
||||||
|
return color.rgb2hwb(color.hsl2rgb(h, s, l))
|
||||||
|
end
|
||||||
|
|
||||||
|
color.cmyk2hwb = function(c, m, y, k)
|
||||||
|
return color.rgb2hwb(color.cmyk2rgb(c, m, y, k))
|
||||||
|
end
|
||||||
|
|
||||||
|
color.hwb2hsl = function(h, w, b)
|
||||||
|
return color.rgb2hwb(color.hwb2rgb(h, w, b))
|
||||||
|
end
|
||||||
|
|
||||||
|
color.hwb2hsv = function(h, w, b)
|
||||||
|
|
||||||
|
return color.rgb2hsv(color.hwb2rgb(h, w, b))
|
||||||
|
end
|
||||||
|
|
||||||
|
color.hwb2cmyk = function(h, w, b)
|
||||||
|
return color.rgb2cmyk(color.hwb2rgb(h, w, b))
|
||||||
|
end
|
||||||
|
|
||||||
local function decimalToHex(decimal)
|
local function decimalToHex(decimal)
|
||||||
local hex = ''
|
local hex = ''
|
||||||
local hexChars = '0123456789ABCDEF'
|
local hexChars = '0123456789ABCDEF'
|
||||||
@ -206,4 +265,8 @@ color.cmyk2hex = function(c, y, m, k)
|
|||||||
return color.rgb2hex(color.cmyk2rgb(c, y, m, k))
|
return color.rgb2hex(color.cmyk2rgb(c, y, m, k))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
color.hwb2hex = function(h, w, b)
|
||||||
|
return color.rgb2hex(color.hwb2rgb(h, w, b))
|
||||||
|
end
|
||||||
|
|
||||||
return color
|
return color
|
||||||
|
Loading…
Reference in New Issue
Block a user