2016-02-20 23:25:00 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-09-30 02:56:11 +02:00
|
|
|
#include "Base/Color4.hpp"
|
|
|
|
#include "Base/Color3.hpp"
|
|
|
|
#include "Base/Shared.hpp"
|
2016-08-24 22:17:18 +02:00
|
|
|
#include "Base/DynArg.hpp"
|
2020-09-03 19:33:51 +02:00
|
|
|
#include "Base/Buffer.hpp"
|
2016-06-05 03:15:23 +02:00
|
|
|
#include "Library/Numeric/Random.hpp"
|
2015-09-30 02:56:11 +02:00
|
|
|
|
2016-03-21 21:37:58 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
#include <limits>
|
|
|
|
|
2015-09-30 02:56:11 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
namespace SqMod {
|
|
|
|
|
2016-11-15 20:20:25 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
SQMODE_DECL_TYPENAME(Typename, _SC("Color4"))
|
|
|
|
|
2015-09-30 02:56:11 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
const Color4 Color4::NIL = Color4();
|
2016-03-22 01:05:50 +01:00
|
|
|
const Color4 Color4::MIN = Color4(std::numeric_limits< Color4::Value >::min());
|
|
|
|
const Color4 Color4::MAX = Color4(std::numeric_limits< Color4::Value >::max());
|
2015-09-30 02:56:11 +02:00
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
SQChar Color4::Delim = ',';
|
2020-09-03 20:05:38 +02:00
|
|
|
bool Color4::UpperCaseHex = false;
|
2015-09-30 02:56:11 +02:00
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2020-03-22 08:16:40 +01:00
|
|
|
Color4::Color4() noexcept
|
2015-09-30 02:56:11 +02:00
|
|
|
: r(0), g(0), b(0), a(0)
|
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
/* ... */
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-02-20 23:25:00 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2020-03-22 08:16:40 +01:00
|
|
|
Color4::Color4(Value sv) noexcept
|
2016-03-10 04:57:13 +01:00
|
|
|
: r(sv), g(sv), b(sv), a(0)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
/* ... */
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-02-20 23:25:00 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2020-03-22 08:16:40 +01:00
|
|
|
Color4::Color4(Value rv, Value gv, Value bv) noexcept
|
2015-09-30 02:56:11 +02:00
|
|
|
: r(rv), g(gv), b(bv), a(0)
|
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
/* ... */
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-02-20 23:25:00 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2020-03-22 08:16:40 +01:00
|
|
|
Color4::Color4(Value rv, Value gv, Value bv, Value av) noexcept
|
2015-09-30 02:56:11 +02:00
|
|
|
: r(rv), g(gv), b(bv), a(av)
|
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
/* ... */
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator = (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r = s;
|
|
|
|
g = s;
|
|
|
|
b = s;
|
|
|
|
a = s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator = (const Color3 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r = c.r;
|
|
|
|
g = c.g;
|
|
|
|
b = c.b;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator += (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r += c.r;
|
|
|
|
g += c.g;
|
|
|
|
b += c.b;
|
|
|
|
a += c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator -= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r -= c.r;
|
|
|
|
g -= c.g;
|
|
|
|
b -= c.b;
|
|
|
|
a -= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator *= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r *= c.r;
|
|
|
|
g *= c.g;
|
|
|
|
b *= c.b;
|
|
|
|
a *= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator /= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r /= c.r;
|
|
|
|
g /= c.g;
|
|
|
|
b /= c.b;
|
|
|
|
a /= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator %= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r %= c.r;
|
|
|
|
g %= c.g;
|
|
|
|
b %= c.b;
|
|
|
|
a %= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator &= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r &= c.r;
|
|
|
|
g &= c.g;
|
|
|
|
b &= c.b;
|
|
|
|
a &= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator |= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r |= c.r;
|
|
|
|
g |= c.g;
|
|
|
|
b |= c.b;
|
|
|
|
a |= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator ^= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r ^= c.r;
|
|
|
|
g ^= c.g;
|
|
|
|
b ^= c.b;
|
|
|
|
a ^= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator <<= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r <<= c.r;
|
|
|
|
g <<= c.g;
|
|
|
|
b <<= c.b;
|
|
|
|
a <<= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator >>= (const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r >>= c.r;
|
|
|
|
g >>= c.g;
|
|
|
|
b >>= c.b;
|
|
|
|
a >>= c.a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator += (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r += s;
|
|
|
|
g += s;
|
|
|
|
b += s;
|
|
|
|
a += s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator -= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r -= s;
|
|
|
|
g -= s;
|
|
|
|
b -= s;
|
|
|
|
a -= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator *= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r *= s;
|
|
|
|
g *= s;
|
|
|
|
b *= s;
|
|
|
|
a *= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator /= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r /= s;
|
|
|
|
g /= s;
|
|
|
|
b /= s;
|
|
|
|
a /= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator %= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r %= s;
|
|
|
|
g %= s;
|
|
|
|
b %= s;
|
|
|
|
a %= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator &= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r &= s;
|
|
|
|
g &= s;
|
|
|
|
b &= s;
|
|
|
|
a &= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator |= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r |= s;
|
|
|
|
g |= s;
|
|
|
|
b |= s;
|
|
|
|
a |= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator ^= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r ^= s;
|
|
|
|
g ^= s;
|
|
|
|
b ^= s;
|
|
|
|
a ^= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator <<= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r <<= s;
|
|
|
|
g <<= s;
|
|
|
|
b <<= s;
|
|
|
|
a <<= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator >>= (Value s)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r >>= s;
|
|
|
|
g >>= s;
|
|
|
|
b >>= s;
|
|
|
|
a >>= s;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator ++ ()
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
++r;
|
|
|
|
++g;
|
|
|
|
++b;
|
|
|
|
++a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 & Color4::operator -- ()
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
--r;
|
|
|
|
--g;
|
|
|
|
--b;
|
|
|
|
--a;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2020-03-22 08:16:40 +01:00
|
|
|
Color4 Color4::operator ++ (int) // NOLINT(cert-dcl21-cpp)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
Color4 state(*this);
|
|
|
|
++r;
|
|
|
|
++g;
|
|
|
|
++b;
|
|
|
|
++a;
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2020-03-22 08:16:40 +01:00
|
|
|
Color4 Color4::operator -- (int) // NOLINT(cert-dcl21-cpp)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
Color4 state(*this);
|
|
|
|
--r;
|
|
|
|
--g;
|
|
|
|
--b;
|
|
|
|
--a;
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator + (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r + c.r), static_cast<Value>(g + c.g), static_cast<Value>(b + c.b), static_cast<Value>(a + c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator - (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r - c.r), static_cast<Value>(g - c.g), static_cast<Value>(b - c.b), static_cast<Value>(a - c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator * (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r * c.r), static_cast<Value>(g * c.g), static_cast<Value>(b * c.b), static_cast<Value>(a * c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator / (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r / c.r), static_cast<Value>(g / c.g), static_cast<Value>(b / c.b), static_cast<Value>(a / c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator % (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r % c.r), static_cast<Value>(g % c.g), static_cast<Value>(b % c.b), static_cast<Value>(a % c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator & (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r & c.r), static_cast<Value>(g & c.g), static_cast<Value>(b & c.b), static_cast<Value>(a & c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator | (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r | c.r), static_cast<Value>(g | c.g), static_cast<Value>(b | c.b), static_cast<Value>(a | c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator ^ (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r ^ c.r), static_cast<Value>(g ^ c.g), static_cast<Value>(b ^ c.b), static_cast<Value>(a ^ c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator << (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r << c.r), static_cast<Value>(g << c.g), static_cast<Value>(b << c.b), static_cast<Value>(a << c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator >> (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r >> c.r), static_cast<Value>(g >> c.g), static_cast<Value>(b >> c.b), static_cast<Value>(a >> c.a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator + (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r + s), static_cast<Value>(g + s), static_cast<Value>(b + s), static_cast<Value>(a + s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator - (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r - s), static_cast<Value>(g - s), static_cast<Value>(b - s), static_cast<Value>(a - s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator * (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r * s), static_cast<Value>(g * s), static_cast<Value>(b * s), static_cast<Value>(a * s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator / (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r / s), static_cast<Value>(g / s), static_cast<Value>(b / s), static_cast<Value>(a / s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator % (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r % s), static_cast<Value>(g % s), static_cast<Value>(b % s), static_cast<Value>(a % s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator & (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r & s), static_cast<Value>(g & s), static_cast<Value>(b & s), static_cast<Value>(a & s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator | (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r | s), static_cast<Value>(g | s), static_cast<Value>(b | s), static_cast<Value>(a | s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator ^ (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r ^ s), static_cast<Value>(g ^ s), static_cast<Value>(b ^ s), static_cast<Value>(a ^ s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator << (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r << s), static_cast<Value>(g << s), static_cast<Value>(b << s), static_cast<Value>(a << s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator >> (Value s) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(r >> s), static_cast<Value>(g >> s), static_cast<Value>(b >> s), static_cast<Value>(a >> s)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator + () const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {r, g, b, a};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator - () const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {0, 0, 0, 0};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
Color4 Color4::operator ~ () const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {static_cast<Value>(~r), static_cast<Value>(~g), static_cast<Value>(~b), static_cast<Value>(~a)};
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
bool Color4::operator == (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
return (r == c.r) && (g == c.g) && (b == c.b) && (a == c.a);
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
bool Color4::operator != (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-07-29 17:00:10 +02:00
|
|
|
return (r != c.r) || (g != c.g) || (b != c.b) || (a != c.a);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
bool Color4::operator < (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
return (r < c.r) && (g < c.g) && (b < c.b) && (a < c.a);
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
bool Color4::operator > (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
return (r > c.r) && (g > c.g) && (b > c.b) && (a > c.a);
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
bool Color4::operator <= (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
return (r <= c.r) && (g <= c.g) && (b <= c.b) && (a <= c.a);
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
bool Color4::operator >= (const Color4 & c) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
return (r >= c.r) && (g >= c.g) && (b >= c.b) && (a >= c.a);
|
|
|
|
}
|
|
|
|
|
2015-11-09 00:35:39 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Color4::operator Color3 () const
|
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return {r, g, b};
|
2015-11-09 00:35:39 +01:00
|
|
|
}
|
|
|
|
|
2015-09-30 02:56:11 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
Int32 Color4::Cmp(const Color4 & o) const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
if (*this == o)
|
2016-05-22 05:20:38 +02:00
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
return 0;
|
2016-05-22 05:20:38 +02:00
|
|
|
}
|
2016-02-20 23:25:00 +01:00
|
|
|
else if (*this > o)
|
2016-05-22 05:20:38 +02:00
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
return 1;
|
2016-05-22 05:20:38 +02:00
|
|
|
}
|
2016-02-20 23:25:00 +01:00
|
|
|
else
|
2016-05-22 05:20:38 +02:00
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
return -1;
|
2016-05-22 05:20:38 +02:00
|
|
|
}
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
CSStr Color4::ToString() const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-03-10 04:57:13 +01:00
|
|
|
return ToStrF("%u,%u,%u,%u", r, g, b, a);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-07-24 22:18:12 +02:00
|
|
|
void Color4::SetScalar(Value ns)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r = ns;
|
|
|
|
g = ns;
|
|
|
|
b = ns;
|
|
|
|
a = ns;
|
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-07-24 23:10:26 +02:00
|
|
|
void Color4::SetColor3(const Color3 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-07-24 23:10:26 +02:00
|
|
|
r = c.r;
|
|
|
|
g = c.g;
|
|
|
|
b = c.b;
|
|
|
|
a = 0;
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-07-24 23:10:26 +02:00
|
|
|
void Color4::SetColor3Ex(Value nr, Value ng, Value nb)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r = nr;
|
|
|
|
g = ng;
|
|
|
|
b = nb;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-07-24 23:10:26 +02:00
|
|
|
void Color4::SetColor4(const Color4 & c)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
r = c.r;
|
|
|
|
g = c.g;
|
|
|
|
b = c.b;
|
2016-07-24 23:10:26 +02:00
|
|
|
a = c.a;
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-07-24 23:10:26 +02:00
|
|
|
void Color4::SetColor4Ex(Value nr, Value ng, Value nb, Value na)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-07-24 23:10:26 +02:00
|
|
|
r = nr;
|
|
|
|
g = ng;
|
|
|
|
b = nb;
|
|
|
|
a = na;
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2019-02-17 16:23:59 +01:00
|
|
|
void Color4::SetStr(SQChar delim, StackStrF & values)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-11-16 15:19:02 +01:00
|
|
|
SetColor4(Color4::GetEx(delim, values));
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2019-02-17 16:23:59 +01:00
|
|
|
void Color4::SetName(StackStrF & name)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-07-24 22:18:12 +02:00
|
|
|
SetColor3(GetColor(name));
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
Uint32 Color4::GetRGB() const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return Uint32(r << 16u | g << 8u | b); // NOLINT(hicpp-signed-bitwise)
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
void Color4::SetRGB(Uint32 p)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
r = static_cast< Value >((p >> 16u) & 0xFFu);
|
|
|
|
g = static_cast< Value >((p >> 8u) & 0xFFu);
|
|
|
|
b = static_cast< Value >((p) & 0xFFu);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
Uint32 Color4::GetRGBA() const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return Uint32(r << 24u | g << 16u | b << 8u | a); // NOLINT(hicpp-signed-bitwise)
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
void Color4::SetRGBA(Uint32 p)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
r = static_cast< Value >((p >> 24u) & 0xFFu);
|
|
|
|
g = static_cast< Value >((p >> 16u) & 0xFFu);
|
|
|
|
b = static_cast< Value >((p >> 8u) & 0xFFu);
|
|
|
|
a = static_cast< Value >((p) & 0xFFu);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
Uint32 Color4::GetARGB() const
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
return Uint32(a << 24u | r << 16u | g << 8u | b); // NOLINT(hicpp-signed-bitwise)
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2016-02-20 23:25:00 +01:00
|
|
|
void Color4::SetARGB(Uint32 p)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2020-03-22 08:16:40 +01:00
|
|
|
a = static_cast< Value >((p >> 24u) & 0xFFu);
|
|
|
|
r = static_cast< Value >((p >> 16u) & 0xFFu);
|
|
|
|
g = static_cast< Value >((p >> 8u) & 0xFFu);
|
|
|
|
b = static_cast< Value >((p) & 0xFFu);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
void Color4::Generate()
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-02-20 23:25:00 +01:00
|
|
|
r = GetRandomUint8();
|
|
|
|
g = GetRandomUint8();
|
|
|
|
b = GetRandomUint8();
|
|
|
|
a = GetRandomUint8();
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
void Color4::Generate(Value min, Value max)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
if (max < min)
|
2016-05-22 05:20:38 +02:00
|
|
|
{
|
2016-03-21 21:37:58 +01:00
|
|
|
STHROWF("max value is lower than min value");
|
2016-05-22 05:20:38 +02:00
|
|
|
}
|
2016-03-10 04:57:13 +01:00
|
|
|
|
|
|
|
r = GetRandomUint8(min, max);
|
|
|
|
g = GetRandomUint8(min, max);
|
|
|
|
b = GetRandomUint8(min, max);
|
|
|
|
a = GetRandomUint8(min, max);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2016-07-24 22:18:12 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
void Color4::Generate(Value rmin, Value rmax, Value gmin, Value gmax, Value bmin, Value bmax, Value amin, Value amax)
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
if (rmax < rmin || gmax < gmin || bmax < bmin || amax < amin)
|
2016-05-22 05:20:38 +02:00
|
|
|
{
|
2016-03-21 21:37:58 +01:00
|
|
|
STHROWF("max value is lower than min value");
|
2016-05-22 05:20:38 +02:00
|
|
|
}
|
2016-03-10 04:57:13 +01:00
|
|
|
|
|
|
|
r = GetRandomUint8(rmin, rmax);
|
|
|
|
g = GetRandomUint8(gmin, gmax);
|
|
|
|
b = GetRandomUint8(bmin, bmax);
|
|
|
|
a = GetRandomUint8(bmin, bmax);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
void Color4::Random()
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-07-24 22:18:12 +02:00
|
|
|
SetColor3(GetRandomColor());
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2015-11-01 04:48:01 +01:00
|
|
|
void Color4::Inverse()
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
2016-03-10 04:57:13 +01:00
|
|
|
r = static_cast< Value >(~r);
|
|
|
|
g = static_cast< Value >(~g);
|
|
|
|
b = static_cast< Value >(~b);
|
|
|
|
a = static_cast< Value >(~a);
|
2015-09-30 02:56:11 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 19:52:46 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
LightObj Color4::ToHex() const
|
|
|
|
{
|
|
|
|
SQChar buff[16]; // 9 should be enough
|
|
|
|
// Attempt to perform the format in the local buffer
|
2020-09-03 20:05:38 +02:00
|
|
|
if (std::snprintf(buff, 16, UpperCaseHex ? "%02X%02X%02X%02X" : "%02x%02x%02x%02x", r, g, b, a) <= 0)
|
2020-09-03 19:52:46 +02:00
|
|
|
{
|
|
|
|
STHROWF("Format failed (somehow)");
|
|
|
|
}
|
|
|
|
// Return the resulted string
|
|
|
|
return LightObj{buff, -1};
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
LightObj Color4::ToHex3() const
|
|
|
|
{
|
|
|
|
SQChar buff[16]; // 7 should be enough
|
|
|
|
// Attempt to perform the format in the local buffer
|
2020-09-03 20:05:38 +02:00
|
|
|
if (std::snprintf(buff, 16, UpperCaseHex ? "%02X%02X%02X" : "%02x%02x%02x", r, g, b) <= 0)
|
2020-09-03 19:52:46 +02:00
|
|
|
{
|
|
|
|
STHROWF("Format failed (somehow)");
|
|
|
|
}
|
|
|
|
// Return the resulted string
|
|
|
|
return LightObj{buff, -1};
|
|
|
|
}
|
|
|
|
|
2020-09-03 19:33:51 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
LightObj Color4::Format(const String & spec, StackStrF & fmt) const
|
|
|
|
{
|
|
|
|
String out;
|
|
|
|
// Attempt to build the format string
|
|
|
|
if (!BuildFormatString(out, fmt, 4, spec))
|
|
|
|
{
|
|
|
|
return LightObj{}; // Default to null
|
|
|
|
}
|
|
|
|
// Empty string is unacceptable
|
|
|
|
else if (out.empty())
|
|
|
|
{
|
|
|
|
STHROWF("Unable to build a valid format string.");
|
|
|
|
}
|
|
|
|
// Grab a temporary buffer
|
|
|
|
Buffer buff(out.size());
|
|
|
|
// Generate the string
|
|
|
|
Buffer::SzType n = buff.WriteF(0, out.c_str(), r, g, b, a);
|
|
|
|
// Did the format failed?
|
|
|
|
if (!n && !out.empty())
|
|
|
|
{
|
|
|
|
STHROWF("Format failed. Please check format specifier and parameter count.");
|
|
|
|
}
|
|
|
|
// Return the resulted string
|
|
|
|
return LightObj{buff.Begin< SQChar >(), static_cast< SQInteger >(n)};
|
|
|
|
}
|
|
|
|
|
2016-03-21 21:37:58 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2019-02-17 16:23:59 +01:00
|
|
|
const Color4 & Color4::Get(StackStrF & str)
|
2016-03-21 21:37:58 +01:00
|
|
|
{
|
2016-11-16 15:19:02 +01:00
|
|
|
return Color4::GetEx(Color4::Delim, str);
|
2016-03-21 21:37:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2019-02-17 16:23:59 +01:00
|
|
|
const Color4 & Color4::GetEx(SQChar delim, StackStrF & str)
|
2016-03-21 21:37:58 +01:00
|
|
|
{
|
|
|
|
static Color4 col;
|
|
|
|
// The minimum and maximum values supported by the Color4 type
|
2020-09-03 17:26:24 +02:00
|
|
|
static constexpr Uint32 min = std::numeric_limits< Color4::Value >::min();
|
|
|
|
static constexpr Uint32 max = std::numeric_limits< Color4::Value >::max();
|
2016-03-21 21:37:58 +01:00
|
|
|
// Clear previous values, if any
|
|
|
|
col.Clear();
|
|
|
|
// Is the specified string empty?
|
2016-11-16 15:19:02 +01:00
|
|
|
if (str.mLen <= 0)
|
2016-03-21 21:37:58 +01:00
|
|
|
{
|
|
|
|
return col; // Return the value as is!
|
|
|
|
}
|
2020-09-03 17:26:24 +02:00
|
|
|
// The format specifications that will be used to scan the string
|
|
|
|
SQChar fs[] = _SC(" %u , %u , %u , %u ");
|
2016-03-21 21:37:58 +01:00
|
|
|
// Assign the specified delimiter
|
|
|
|
fs[4] = delim;
|
|
|
|
fs[9] = delim;
|
|
|
|
fs[14] = delim;
|
|
|
|
// The sscanf function requires at least 32 bit integers
|
|
|
|
Uint32 r = 0, g = 0, b = 0, a = 0;
|
|
|
|
// Attempt to extract the component values from the specified string
|
2016-11-16 15:19:02 +01:00
|
|
|
std::sscanf(str.mPtr, fs, &r, &g, &b, &a);
|
2016-03-21 21:37:58 +01:00
|
|
|
// Cast the extracted integers to the value used by the Color4 type
|
|
|
|
col.r = static_cast< Color4::Value >(Clamp(r, min, max));
|
|
|
|
col.g = static_cast< Color4::Value >(Clamp(g, min, max));
|
|
|
|
col.b = static_cast< Color4::Value >(Clamp(b, min, max));
|
|
|
|
col.a = static_cast< Color4::Value >(Clamp(a, min, max));
|
|
|
|
// Return the resulted value
|
|
|
|
return col;
|
|
|
|
}
|
|
|
|
|
2020-09-03 20:05:38 +02:00
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
|
|
* Retrieve the hex case preference of the Color4 type.
|
|
|
|
*/
|
|
|
|
static bool SqGetColor4UpperCaseHex()
|
|
|
|
{
|
|
|
|
return Color4::UpperCaseHex;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
|
|
* Modify the hex case preference of the Color4 type.
|
|
|
|
*/
|
|
|
|
static void SqSetColor4UpperCaseHex(bool t)
|
|
|
|
{
|
|
|
|
Color4::UpperCaseHex = t;
|
|
|
|
}
|
|
|
|
|
2015-09-30 02:56:11 +02:00
|
|
|
// ================================================================================================
|
2020-03-22 08:16:40 +01:00
|
|
|
#pragma clang diagnostic push
|
|
|
|
#pragma clang diagnostic ignored "-Wunused-parameter"
|
2016-02-20 23:25:00 +01:00
|
|
|
void Register_Color4(HSQUIRRELVM vm)
|
2020-03-22 08:16:40 +01:00
|
|
|
#pragma clang diagnostic pop
|
2015-09-30 02:56:11 +02:00
|
|
|
{
|
|
|
|
typedef Color4::Value Val;
|
|
|
|
|
2016-11-15 20:55:03 +01:00
|
|
|
RootTable(vm).Bind(Typename::Str,
|
|
|
|
Class< Color4 >(vm, Typename::Str)
|
2016-05-22 05:20:38 +02:00
|
|
|
// Constructors
|
2015-09-30 02:56:11 +02:00
|
|
|
.Ctor()
|
2016-02-20 23:25:00 +01:00
|
|
|
.Ctor< Val >()
|
|
|
|
.Ctor< Val, Val, Val >()
|
|
|
|
.Ctor< Val, Val, Val, Val >()
|
2016-05-22 05:20:38 +02:00
|
|
|
// Member Variables
|
2016-07-17 14:39:59 +02:00
|
|
|
.Var(_SC("r"), &Color4::r)
|
|
|
|
.Var(_SC("g"), &Color4::g)
|
|
|
|
.Var(_SC("b"), &Color4::b)
|
|
|
|
.Var(_SC("a"), &Color4::a)
|
2016-05-22 05:20:38 +02:00
|
|
|
.Var(_SC("R"), &Color4::r)
|
|
|
|
.Var(_SC("G"), &Color4::g)
|
|
|
|
.Var(_SC("B"), &Color4::b)
|
|
|
|
.Var(_SC("A"), &Color4::a)
|
2016-06-03 20:26:19 +02:00
|
|
|
// Core Meta-methods
|
2016-08-24 22:17:18 +02:00
|
|
|
.SquirrelFunc(_SC("cmp"), &SqDynArgFwd< SqDynArgCmpFn< Color4 >, SQFloat, SQInteger, bool, std::nullptr_t, Color4 >)
|
2016-11-15 20:20:25 +01:00
|
|
|
.SquirrelFunc(_SC("_typename"), &Typename::Fn)
|
|
|
|
.Func(_SC("_tostring"), &Color4::ToString)
|
2016-06-03 20:26:19 +02:00
|
|
|
// Meta-methods
|
2016-08-24 22:17:18 +02:00
|
|
|
.SquirrelFunc(_SC("_add"), &SqDynArgFwd< SqDynArgAddFn< Color4 >, SQFloat, SQInteger, bool, std::nullptr_t, Color4 >)
|
|
|
|
.SquirrelFunc(_SC("_sub"), &SqDynArgFwd< SqDynArgSubFn< Color4 >, SQFloat, SQInteger, bool, std::nullptr_t, Color4 >)
|
|
|
|
.SquirrelFunc(_SC("_mul"), &SqDynArgFwd< SqDynArgMulFn< Color4 >, SQFloat, SQInteger, bool, std::nullptr_t, Color4 >)
|
|
|
|
.SquirrelFunc(_SC("_div"), &SqDynArgFwd< SqDynArgDivFn< Color4 >, SQFloat, SQInteger, bool, std::nullptr_t, Color4 >)
|
|
|
|
.SquirrelFunc(_SC("_modulo"), &SqDynArgFwd< SqDynArgModFn< Color4 >, SQFloat, SQInteger, bool, std::nullptr_t, Color4 >)
|
2016-05-22 05:20:38 +02:00
|
|
|
.Func< Color4 (Color4::*)(void) const >(_SC("_unm"), &Color4::operator -)
|
2016-07-24 22:18:12 +02:00
|
|
|
// Properties
|
|
|
|
.Prop(_SC("RGB"), &Color4::GetRGB, &Color4::SetRGB)
|
|
|
|
.Prop(_SC("RGBA"), &Color4::GetRGBA, &Color4::SetRGBA)
|
|
|
|
.Prop(_SC("ARGB"), &Color4::GetARGB, &Color4::SetARGB)
|
2020-09-03 19:52:46 +02:00
|
|
|
.Prop(_SC("Hex"), &Color4::ToHex)
|
|
|
|
.Prop(_SC("Hex3"), &Color4::ToHex3)
|
2016-07-24 22:18:12 +02:00
|
|
|
// Member Methods
|
|
|
|
.Func(_SC("SetScalar"), &Color4::SetScalar)
|
|
|
|
.Func(_SC("SetColor3"), &Color4::SetColor3)
|
2016-07-24 23:10:26 +02:00
|
|
|
.Func(_SC("SetColor3Ex"), &Color4::SetColor3Ex)
|
2016-07-24 22:18:12 +02:00
|
|
|
.Func(_SC("SetColor4"), &Color4::SetColor4)
|
2016-07-24 23:10:26 +02:00
|
|
|
.Func(_SC("SetColor4Ex"), &Color4::SetColor4Ex)
|
2016-11-16 15:19:02 +01:00
|
|
|
.FmtFunc(_SC("SetStr"), &Color4::SetStr)
|
|
|
|
.FmtFunc(_SC("SetName"), &Color4::SetName)
|
2016-02-20 23:25:00 +01:00
|
|
|
.Func(_SC("Clear"), &Color4::Clear)
|
2020-09-03 19:33:51 +02:00
|
|
|
.FmtFunc(_SC("Format"), &Color4::Format)
|
2016-02-20 23:25:00 +01:00
|
|
|
.Func(_SC("Random"), &Color4::Random)
|
|
|
|
.Func(_SC("Inverse"), &Color4::Inverse)
|
2016-07-24 22:18:12 +02:00
|
|
|
// Member Overloads
|
|
|
|
.Overload< void (Color4::*)(void) >(_SC("Generate"), &Color4::Generate)
|
|
|
|
.Overload< void (Color4::*)(Val, Val) >(_SC("Generate"), &Color4::Generate)
|
|
|
|
.Overload< void (Color4::*)(Val, Val, Val, Val, Val, Val, Val, Val) >(_SC("Generate"), &Color4::Generate)
|
2016-07-24 20:29:37 +02:00
|
|
|
// Static Functions
|
|
|
|
.StaticFunc(_SC("GetDelimiter"), &SqGetDelimiter< Color4 >)
|
|
|
|
.StaticFunc(_SC("SetDelimiter"), &SqSetDelimiter< Color4 >)
|
2020-09-03 20:05:38 +02:00
|
|
|
.StaticFunc(_SC("GetUpperCaseHex"), &SqGetColor4UpperCaseHex)
|
|
|
|
.StaticFunc(_SC("SetUpperCaseHex"), &SqSetColor4UpperCaseHex)
|
2016-11-16 15:19:02 +01:00
|
|
|
.StaticFmtFunc(_SC("FromStr"), &Color4::Get)
|
|
|
|
.StaticFmtFunc(_SC("FromStrEx"), &Color4::GetEx)
|
2016-05-22 05:20:38 +02:00
|
|
|
// Operator Exposure
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opAddAssign"), &Color4::operator +=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opSubAssign"), &Color4::operator -=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opMulAssign"), &Color4::operator *=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opDivAssign"), &Color4::operator /=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opModAssign"), &Color4::operator %=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opAndAssign"), &Color4::operator &=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opOrAssign"), &Color4::operator |=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opXorAssign"), &Color4::operator ^=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opShlAssign"), &Color4::operator <<=)
|
|
|
|
.Func< Color4 & (Color4::*)(const Color4 &) >(_SC("opShrAssign"), &Color4::operator >>=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opAddAssignS"), &Color4::operator +=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opSubAssignS"), &Color4::operator -=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opMulAssignS"), &Color4::operator *=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opDivAssignS"), &Color4::operator /=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opModAssignS"), &Color4::operator %=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opAndAssignS"), &Color4::operator &=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opOrAssignS"), &Color4::operator |=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opXorAssignS"), &Color4::operator ^=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opShlAssignS"), &Color4::operator <<=)
|
|
|
|
.Func< Color4 & (Color4::*)(Color4::Value) >(_SC("opShrAssignS"), &Color4::operator >>=)
|
|
|
|
.Func< Color4 & (Color4::*)(void) >(_SC("opPreInc"), &Color4::operator ++)
|
|
|
|
.Func< Color4 & (Color4::*)(void) >(_SC("opPreDec"), &Color4::operator --)
|
|
|
|
.Func< Color4 (Color4::*)(int) >(_SC("opPostInc"), &Color4::operator ++)
|
|
|
|
.Func< Color4 (Color4::*)(int) >(_SC("opPostDec"), &Color4::operator --)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opAdd"), &Color4::operator +)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opSub"), &Color4::operator -)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opMul"), &Color4::operator *)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opDiv"), &Color4::operator /)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opMod"), &Color4::operator %)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opAnd"), &Color4::operator &)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opOr"), &Color4::operator |)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opShl"), &Color4::operator ^)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opShl"), &Color4::operator <<)
|
|
|
|
.Func< Color4 (Color4::*)(const Color4 &) const >(_SC("opShr"), &Color4::operator >>)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opAddS"), &Color4::operator +)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opSubS"), &Color4::operator -)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opMulS"), &Color4::operator *)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opDivS"), &Color4::operator /)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opModS"), &Color4::operator %)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opAndS"), &Color4::operator &)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opOrS"), &Color4::operator |)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opShlS"), &Color4::operator ^)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opShlS"), &Color4::operator <<)
|
|
|
|
.Func< Color4 (Color4::*)(Color4::Value) const >(_SC("opShrS"), &Color4::operator >>)
|
|
|
|
.Func< Color4 (Color4::*)(void) const >(_SC("opUnPlus"), &Color4::operator +)
|
|
|
|
.Func< Color4 (Color4::*)(void) const >(_SC("opUnMinus"), &Color4::operator -)
|
|
|
|
.Func< Color4 (Color4::*)(void) const >(_SC("opCom"), &Color4::operator ~)
|
|
|
|
.Func< bool (Color4::*)(const Color4 &) const >(_SC("opEqual"), &Color4::operator ==)
|
|
|
|
.Func< bool (Color4::*)(const Color4 &) const >(_SC("opNotEqual"), &Color4::operator !=)
|
|
|
|
.Func< bool (Color4::*)(const Color4 &) const >(_SC("opLessThan"), &Color4::operator <)
|
|
|
|
.Func< bool (Color4::*)(const Color4 &) const >(_SC("opGreaterThan"), &Color4::operator >)
|
|
|
|
.Func< bool (Color4::*)(const Color4 &) const >(_SC("opLessEqual"), &Color4::operator <=)
|
|
|
|
.Func< bool (Color4::*)(const Color4 &) const >(_SC("opGreaterEqual"), &Color4::operator >=)
|
2015-09-30 02:56:11 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
} // Namespace:: SqMod
|