lx-music-desktop/src/common/theme/colorUtils.js
2022-10-29 11:36:35 +08:00

74 lines
2.6 KiB
JavaScript

/* eslint-disable */
// https://github.com/PimpTrizkit/PJs/wiki/12.-Shade,-Blend-and-Convert-a-Web-Color-(pSBC.js)#micro-functions-version-4
/**
* Blend color (Lighten or Darken)
* @param {number} p 混合百分比 范围 0.0 - 1.0
* @param {string} c0 rgb(a) color1
* @param {string} c1 rgb(a) color2
* @returns color
*/
exports.RGB_Linear_Blend=(p,c0,c1)=>{
var i=parseInt,r=Math.round,P=1-p,[a,b,c,d]=c0.split(","),[e,f,g,h]=c1.split(","),x=d||h,j=x?","+(!d?h:!h?d:r((parseFloat(d)*P+parseFloat(h)*p)*1000)/1000+")"):")";
return"rgb"+(x?"a(":"(")+r(i(a[3]=="a"?a.slice(5):a.slice(4))*P+i(e[3]=="a"?e.slice(5):e.slice(4))*p)+","+r(i(b)*P+i(f)*p)+","+r(i(c)*P+i(g)*p)+j;
}
/**
* Blend color (Lighten or Darken)
* @param {number} p 混合百分比 范围 0.0 - 1.0
* @param {string} c0 rgb(a) color1
* @param {string} c1 rgb(a) color2
* @returns color
*/
exports.RGB_Log_Blend=(p,c0,c1)=>{
var i=parseInt,r=Math.round,P=1-p,[a,b,c,d]=c0.split(","),[e,f,g,h]=c1.split(","),x=d||h,j=x?","+(!d?h:!h?d:r((parseFloat(d)*P+parseFloat(h)*p)*1000)/1000+")"):")";
return"rgb"+(x?"a(":"(")+r((P*i(a[3]=="a"?a.slice(5):a.slice(4))**2+p*i(e[3]=="a"?e.slice(5):e.slice(4))**2)**0.5)+","+r((P*i(b)**2+p*i(f)**2)**0.5)+","+r((P*i(c)**2+p*i(g)**2)**0.5)+j;
}
/**
* Shade color (Lighten or Darken)
* @param {number} p Shade 百分比范围为 -1.0 - 1.0 负为黑色,正为白色
* @param {string} c0 rgb(a) color
* @returns color
*/
exports.RGB_Linear_Shade=(p,c0)=>{
var i=parseInt,r=Math.round,[a,b,c,d]=c0.split(","),n=p<0,t=n?0:255*p,P=n?1+p:1-p;
return"rgb"+(d?"a(":"(")+r(i(a[3]=="a"?a.slice(5):a.slice(4))*P+t)+","+r(i(b)*P+t)+","+r(i(c)*P+t)+(d?","+d:")");
}
/**
* Shade color (Lighten or Darken)
* @param {number} p Shade 百分比范围为 -1.0 - 1.0 负为黑色,正为白色
* @param {string} c0 rgb(a) color
* @returns color
*/
exports.RGB_Log_Shade=(p,c0)=>{
var i=parseInt,r=Math.round,[a,b,c,d]=c0.split(","),n=p<0,t=n?0:p*255**2,P=n?1+p:1-p;
return"rgb"+(d?"a(":"(")+r((P*i(a[3]=="a"?a.slice(5):a.slice(4))**2+t)**0.5)+","+r((P*i(b)**2+t)**0.5)+","+r((P*i(c)**2+t)**0.5)+(d?","+d:")");
}
/**
* 修改透明度
* @param {number} p 透明度 -1.0 - 1.0
* @param {string} color
* @returns color
*/
exports.RGB_Alpha_Shade = (p, color) => {
var i = parseInt
var n = p < 0
var [r, g, b, a] = color.split(",")
r = r[3] == 'a' ? r.slice(5) : r.slice(4)
if (a) {
a = parseFloat(a)
a = a - (n ? (1 - a) * p : a * p)
a = n ? Math.max(0, a) : Math.min(1, a)
} else {
a = 1 - p
a = Math.min(1, a)
}
return `rgba(${i(r)}, ${i(g)}, ${i(b)}, ${a.toFixed(2)})`
}