Core: DarkTheme color conversion - improved algo

git-svn-id: svn://ultimatepp.org/upp/trunk@12781 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2019-02-21 14:47:14 +00:00
parent a62336d102
commit 9b5a14496f

View file

@ -219,18 +219,20 @@ int Grayscale2(const Color& c)
return (c.GetR() + c.GetG() + c.GetB()) / 3;
}
Color DarkTheme(Color c)
Color DarkTheme(Color color)
{
if(IsNull(c))
if(IsNull(color))
return Null;
int v[3];
v[0] = c.GetR();
v[1] = c.GetG();
v[2] = c.GetB();
double v[3];
v[0] = color.GetR();
v[1] = color.GetG();
v[2] = color.GetB();
static double c[3] = { 0.21, 0.72, 0.07 };
int m0 = v[0] + v[1] + v[2];
int m = 3*256 - m0;
double m0 = 0.21 * v[0] + 0.72 * v[1] + 0.07 * v[2];
double m = 256 - m0;
int i0 = 0;
int i1 = 1;
@ -245,36 +247,36 @@ Color DarkTheme(Color c)
if(m0 < m) {
m -= m0;
int a = min(v[i2] + m / 3, 255) - v[i2];
double a = min(v[i2] + m, 255.0) - v[i2];
v[i0] += a;
v[i1] += a;
v[i2] += a;
m -= 3 * a;
m -= a;
a = min(v[i1] + m / 2, 255) - v[i1];
a = min(v[i1] + m / (c[i0] + c[i1]), 255.0) - v[i1];
v[i0] += a;
v[i1] += a;
m -= 2 * a;
m -= (c[i0] + c[i1]) * a;
v[i0] = min(v[i0] + m, 255);
v[i0] = min(v[i0] + m / c[i1], 255.0);
}
else {
m = m0 - m;
int a = v[i0] - max(v[i0] - m / 3, 0);
double a = v[i0] - max(v[i0] - m, 0.0);
v[i0] -= a;
v[i1] -= a;
v[i2] -= a;
m -= 3 * a;
m -= a;
a = v[i1] - max(v[i1] - m / 2, 0);
a = v[i1] - max(v[i1] - m / (c[i1] + c[i2]), 0.0);
v[i1] -= a;
v[i2] -= a;
m -= 2 * a;
m -= (c[i1] + c[i2]) * a;
v[i2] = max(v[i2] - m, 0);
v[i2] = max(v[i2] - m / c[i2], 0.0);
}
return Color(v[0], v[1], v[2]);
return Color((int)v[0], (int)v[1], (int)v[2]);
}
Color DarkThemeCached(Color c)