33 #include "math_funcs.h" 50 bool operator==(
const Color &p_color)
const {
return (r==p_color.r && g==p_color.g && b==p_color.b && a==p_color.a ); }
51 bool operator!=(
const Color &p_color)
const {
return (r!=p_color.r || g!=p_color.g || b!=p_color.b || a!=p_color.a ); }
53 uint32_t to_32()
const;
54 uint32_t to_ARGB32()
const;
59 void set_hsv(
float p_h,
float p_s,
float p_v,
float p_alpha=1.0);
61 _FORCE_INLINE_
float& operator[](
int idx) {
62 return components[idx];
64 _FORCE_INLINE_
const float& operator[](
int idx)
const {
65 return components[idx];
70 Color inverted()
const;
71 Color contrasted()
const;
73 _FORCE_INLINE_
Color linear_interpolate(
const Color& p_b,
float p_t)
const {
77 res.r+= (p_t * (p_b.r-r));
78 res.g+= (p_t * (p_b.g-g));
79 res.b+= (p_t * (p_b.b-b));
80 res.a+= (p_t * (p_b.a-a));
85 _FORCE_INLINE_
Color blend(
const Color& p_over)
const {
89 float sa = 1.0 - p_over.a;
90 res.a = a*sa+p_over.a;
92 return Color(0,0,0,0);
94 res.r = (r*a*sa + p_over.r * p_over.a)/res.a;
95 res.g = (g*a*sa + p_over.g * p_over.a)/res.a;
96 res.b = (b*a*sa + p_over.b * p_over.a)/res.a;
101 _FORCE_INLINE_
Color to_linear()
const {
104 r<0.04045 ? r * (1.0 / 12.92) : Math::pow((r + 0.055) * (1.0 / (1 + 0.055)), 2.4),
105 g<0.04045 ? g * (1.0 / 12.92) : Math::pow((g + 0.055) * (1.0 / (1 + 0.055)), 2.4),
106 b<0.04045 ? b * (1.0 / 12.92) : Math::pow((b + 0.055) * (1.0 / (1 + 0.055)), 2.4),
111 static Color hex(uint32_t p_hex);
113 static bool html_is_valid(
const String& p_color);
114 String to_html(
bool p_alpha=
true)
const;
116 _FORCE_INLINE_
bool operator<(
const Color& p_color)
const;
123 r=0; g=0; b=0; a=1.0;
129 _FORCE_INLINE_
Color(
float p_r,
float p_g,
float p_b,
float p_a=1.0) { r=p_r; g=p_g; b=p_b; a=p_a; }
132 bool Color::operator<(
const Color& p_color)
const {
137 return (a<p_color.a);
139 return (b<p_color.b);
_FORCE_INLINE_ Color(float p_r, float p_g, float p_b, float p_a=1.0)
Definition: color.h:129
_FORCE_INLINE_ Color()
Definition: color.h:122