Enderal SE
https://mod.pub/enderal-se/38-enderal-se
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
2.9 KiB
198 lines
2.9 KiB
#include "Colors.h"
|
|
|
|
UInt32 ARGBColor::GetColor()
|
|
{
|
|
return MAKE_COLOR(m_alpha, m_red, m_green, m_blue);
|
|
}
|
|
|
|
void ARGBColor::SetARGB(UInt8 alpha, UInt8 red, UInt8 green, UInt8 blue)
|
|
{
|
|
m_alpha = alpha;
|
|
m_red = red;
|
|
m_green = green;
|
|
m_blue = blue;
|
|
}
|
|
|
|
void ARGBColor::GetARGB(UInt8 & alpha, UInt8 & red, UInt8 & green, UInt8 & blue)
|
|
{
|
|
alpha = m_alpha;
|
|
red = m_red;
|
|
green = m_green;
|
|
blue = m_blue;
|
|
}
|
|
|
|
void ARGBColor::SetHSV(double hue, double saturation, double value)
|
|
{
|
|
double h,s,v;
|
|
double r,g,b;
|
|
|
|
h = hue;
|
|
s = saturation;
|
|
v = value;
|
|
|
|
if (hue < 0.0)
|
|
hue += 360.0;
|
|
|
|
if (s != 0.0) {
|
|
double f, p, q, t;
|
|
if (h == 360.0)
|
|
h = 0.0;
|
|
h /= 60.0;
|
|
|
|
int i = (int)h;
|
|
f = h - i;
|
|
p = v * (1.0 - s);
|
|
q = v * (1.0 - (s * f));
|
|
t = v * (1.0 - (s * (1.0 - f)));
|
|
|
|
switch (i) {
|
|
case 0: r = v; g = t; b = p; break;
|
|
case 1: r = q; g = v; b = p; break;
|
|
case 2: r = p; g = v; b = t; break;
|
|
case 3: r = p; g = q; b = v; break;
|
|
case 4: r = t; g = p; b = v; break;
|
|
case 5: r = v; g = p; b = q; break;
|
|
}
|
|
}
|
|
else {
|
|
r = v;
|
|
g = v;
|
|
b = v;
|
|
}
|
|
|
|
m_red = r * 255;
|
|
m_green = g * 255;
|
|
m_blue = b * 255;
|
|
}
|
|
|
|
void ARGBColor::GetHSV(double & hue, double & saturation, double & value)
|
|
{
|
|
double r,g,b, rgb_max, rgb_min, delta, h, s;
|
|
r = m_red / 255.0;
|
|
g = m_green / 255.0;
|
|
b = m_blue / 255.0;
|
|
rgb_max = MAX3(r, g, b);
|
|
rgb_min = MIN3(r, g, b);
|
|
delta = rgb_max - rgb_min;
|
|
h = 0;
|
|
s = 0;
|
|
|
|
if ( rgb_max != 0.0 )
|
|
s = delta / rgb_max;
|
|
|
|
if ( s != 0.0 )
|
|
{
|
|
double rc = (rgb_max - r) / delta;
|
|
double gc = (rgb_max - g) / delta;
|
|
double bc = (rgb_max - b) / delta;
|
|
|
|
if ( r == rgb_max )
|
|
h = bc - gc;
|
|
else if ( g == rgb_max )
|
|
h = 2.0f + rc - bc;
|
|
else if ( b == rgb_max )
|
|
h = 4.0f + gc - rc;
|
|
|
|
h *= 60.0f;
|
|
if ( h < 0.0 )
|
|
h += 360.0f;
|
|
}
|
|
|
|
hue = h;
|
|
saturation = s;
|
|
value = rgb_max;
|
|
}
|
|
|
|
UInt8 ARGBColor::GetAlpha()
|
|
{
|
|
return m_alpha;
|
|
}
|
|
|
|
UInt8 ARGBColor::GetRed()
|
|
{
|
|
return m_red;
|
|
}
|
|
|
|
UInt8 ARGBColor::GetGreen()
|
|
{
|
|
return m_green;
|
|
}
|
|
|
|
UInt8 ARGBColor::GetBlue()
|
|
{
|
|
return m_blue;
|
|
}
|
|
|
|
void ARGBColor::SetAlpha(UInt8 alpha)
|
|
{
|
|
m_alpha = alpha;
|
|
}
|
|
|
|
void ARGBColor::SetRed(UInt8 red)
|
|
{
|
|
m_red = red;
|
|
}
|
|
|
|
void ARGBColor::SetGreen(UInt8 green)
|
|
{
|
|
m_green = green;
|
|
}
|
|
|
|
void ARGBColor::SetBlue(UInt8 blue)
|
|
{
|
|
m_blue = blue;
|
|
}
|
|
|
|
void ARGBColor::SetHue(double newHue)
|
|
{
|
|
double hue;
|
|
double sat;
|
|
double val;
|
|
GetHSV(hue, sat, val);
|
|
SetHSV(newHue, sat, val);
|
|
}
|
|
|
|
void ARGBColor::SetSaturation(double newSat)
|
|
{
|
|
double hue;
|
|
double sat;
|
|
double val;
|
|
GetHSV(hue, sat, val);
|
|
SetHSV(hue, newSat, val);
|
|
}
|
|
|
|
void ARGBColor::SetValue(double newVal)
|
|
{
|
|
double hue;
|
|
double sat;
|
|
double val;
|
|
GetHSV(hue, sat, val);
|
|
SetHSV(hue, sat, newVal);
|
|
}
|
|
|
|
double ARGBColor::GetHue()
|
|
{
|
|
double hue;
|
|
double sat;
|
|
double val;
|
|
GetHSV(hue, sat, val);
|
|
return hue;
|
|
}
|
|
|
|
double ARGBColor::GetSaturation()
|
|
{
|
|
double hue;
|
|
double sat;
|
|
double val;
|
|
GetHSV(hue, sat, val);
|
|
return sat;
|
|
}
|
|
|
|
double ARGBColor::GetValue()
|
|
{
|
|
double hue;
|
|
double sat;
|
|
double val;
|
|
GetHSV(hue, sat, val);
|
|
return val;
|
|
}
|
|
|