1
0
Fork 0
spectre/source/Math/Color.cpp
2016-01-10 09:26:43 +01:00

128 lines
2.6 KiB
C++

#include <Spectre/Math/Color.h>
const Color Color::Black (0 , 0 , 0 , 255);
const Color Color::White (255, 255, 255, 255);
const Color Color::Red (255, 0 , 0 , 255);
const Color Color::Green (0 , 255, 0 , 255);
const Color Color::Blue (0 , 0 , 255, 255);
const Color Color::Transparant (0 , 0 , 0 , 0 );
Color::Color(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha)
{
r = red; g = green; b = blue; a = alpha;
}
Color::Color(const Color& color)
{
r = color.r; g = color.g; b = color.b; a = color.a;
}
Color& Color::operator=(const Color& color)
{
if (*this != color) {
r = color.r;
g = color.g;
b = color.b;
a = color.a;
}
return *this;
}
Vector3f Color::toRGBf() const
{
Vector3f v(r, g, b);
return v / 255.0f;
}
Vector4f Color::toRGBAf() const
{
Vector4f v(r, g, b, a);
return v / 255.0f;
}
// ---------
// Compare
// ---------
bool operator ==(const Color& c1, const Color& c2)
{
return c1.r == c2.r && c1.g == c2.g && c1.b == c2.b && c1.a == c2.b;
}
bool operator !=(const Color& c1, const Color& c2)
{
return !(c1.r == c2.r && c1.g == c2.g && c1.b == c2.b && c1.a == c2.b);
}
// ------------
// Arithmetic
// ------------
Color operator +(const Color& c1, const Color& c2)
{
return Color(c1.r + c2.r, c1.g + c2.g, c1.b + c2.b, c1.a + c2.a);
}
Color operator -(const Color& c1, const Color& c2)
{
return Color(c1.r - c2.r, c1.g - c2.g, c1.b - c2.b, c1.a - c2.a);
}
Color operator /(const Color& c1, const Color& c2)
{
return Color(c1.r / c2.r, c1.g / c2.g, c1.b / c2.b, c1.a / c2.a);
}
Color operator *(const Color& c1, const Color& c2)
{
return Color(c1.r * c2.r, c1.g * c2.g, c1.b * c2.b, c1.a * c2.a);
}
Color& operator +=(Color& c1, const Color& c2)
{
c1.r += c2.r; c1.g += c2.g; c1.b += c2.b; c1.a += c2.a;
return c1;
}
Color& operator -=(Color& c1, const Color& c2)
{
c1.r -= c2.r; c1.g -= c2.g; c1.b -= c2.b; c1.a -= c2.a;
return c1;
}
Color& operator /=(Color& c1, const Color& c2)
{
c1.r /= c2.r; c1.g /= c2.g; c1.b /= c2.b; c1.a /= c2.a;
return c1;
}
Color& operator *=(Color& c1, const Color& c2)
{
c1.r *= c2.r; c1.g *= c2.g; c1.b *= c2.b; c1.a *= c2.a;
return c1;
}
// -------------------
// Scalar arithmetic
// -------------------
Color operator +(const Color& c, unsigned int s)
{
return Color(c.r + s, c.g + s, c.b + s, c.a + s);
}
Color operator -(const Color& c, unsigned int s)
{
return Color(c.r - s, c.g - s, c.b - s, c.a - s);
}
Color operator /(const Color& c, unsigned int s)
{
return Color(c.r / s, c.g / s, c.b / s, c.a / s);
}
Color operator *(const Color& c, unsigned int s)
{
return Color(c.r * s, c.g * s, c.b * s, c.a * s);
}