Merge pull request #54868 from akien-mga/color-from_hsv-static
This commit is contained in:
commit
51c8e4429b
@ -107,6 +107,39 @@ uint64_t Color::to_rgba64() const {
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String _to_hex(float p_val) {
|
||||||
|
int v = Math::round(p_val * 255);
|
||||||
|
v = CLAMP(v, 0, 255);
|
||||||
|
String ret;
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
char32_t c[2] = { 0, 0 };
|
||||||
|
int lv = v & 0xF;
|
||||||
|
if (lv < 10) {
|
||||||
|
c[0] = '0' + lv;
|
||||||
|
} else {
|
||||||
|
c[0] = 'a' + lv - 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
v >>= 4;
|
||||||
|
String cs = (const char32_t *)c;
|
||||||
|
ret = cs + ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
String Color::to_html(bool p_alpha) const {
|
||||||
|
String txt;
|
||||||
|
txt += _to_hex(r);
|
||||||
|
txt += _to_hex(g);
|
||||||
|
txt += _to_hex(b);
|
||||||
|
if (p_alpha) {
|
||||||
|
txt += _to_hex(a);
|
||||||
|
}
|
||||||
|
return txt;
|
||||||
|
}
|
||||||
|
|
||||||
float Color::get_h() const {
|
float Color::get_h() const {
|
||||||
float min = MIN(r, g);
|
float min = MIN(r, g);
|
||||||
min = MIN(min, b);
|
min = MIN(min, b);
|
||||||
@ -249,20 +282,6 @@ Color Color::hex64(uint64_t p_hex) {
|
|||||||
return Color(r, g, b, a);
|
return Color(r, g, b, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color Color::from_rgbe9995(uint32_t p_rgbe) {
|
|
||||||
float r = p_rgbe & 0x1ff;
|
|
||||||
float g = (p_rgbe >> 9) & 0x1ff;
|
|
||||||
float b = (p_rgbe >> 18) & 0x1ff;
|
|
||||||
float e = (p_rgbe >> 27);
|
|
||||||
float m = Math::pow(2, e - 15.0 - 9.0);
|
|
||||||
|
|
||||||
float rd = r * m;
|
|
||||||
float gd = g * m;
|
|
||||||
float bd = b * m;
|
|
||||||
|
|
||||||
return Color(rd, gd, bd, 1.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int _parse_col4(const String &p_str, int p_ofs) {
|
static int _parse_col4(const String &p_str, int p_ofs) {
|
||||||
char character = p_str[p_ofs];
|
char character = p_str[p_ofs];
|
||||||
|
|
||||||
@ -428,45 +447,26 @@ Color Color::from_string(const String &p_string, const Color &p_default) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String _to_hex(float p_val) {
|
Color Color::from_hsv(float p_h, float p_s, float p_v, float p_alpha) {
|
||||||
int v = Math::round(p_val * 255);
|
|
||||||
v = CLAMP(v, 0, 255);
|
|
||||||
String ret;
|
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
char32_t c[2] = { 0, 0 };
|
|
||||||
int lv = v & 0xF;
|
|
||||||
if (lv < 10) {
|
|
||||||
c[0] = '0' + lv;
|
|
||||||
} else {
|
|
||||||
c[0] = 'a' + lv - 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
v >>= 4;
|
|
||||||
String cs = (const char32_t *)c;
|
|
||||||
ret = cs + ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
String Color::to_html(bool p_alpha) const {
|
|
||||||
String txt;
|
|
||||||
txt += _to_hex(r);
|
|
||||||
txt += _to_hex(g);
|
|
||||||
txt += _to_hex(b);
|
|
||||||
if (p_alpha) {
|
|
||||||
txt += _to_hex(a);
|
|
||||||
}
|
|
||||||
return txt;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color Color::from_hsv(float p_h, float p_s, float p_v, float p_a) const {
|
|
||||||
Color c;
|
Color c;
|
||||||
c.set_hsv(p_h, p_s, p_v, p_a);
|
c.set_hsv(p_h, p_s, p_v, p_alpha);
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Color Color::from_rgbe9995(uint32_t p_rgbe) {
|
||||||
|
float r = p_rgbe & 0x1ff;
|
||||||
|
float g = (p_rgbe >> 9) & 0x1ff;
|
||||||
|
float b = (p_rgbe >> 18) & 0x1ff;
|
||||||
|
float e = (p_rgbe >> 27);
|
||||||
|
float m = Math::pow(2, e - 15.0 - 9.0);
|
||||||
|
|
||||||
|
float rd = r * m;
|
||||||
|
float gd = g * m;
|
||||||
|
float bd = b * m;
|
||||||
|
|
||||||
|
return Color(rd, gd, bd, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
Color::operator String() const {
|
Color::operator String() const {
|
||||||
return "(" + String::num(r, 4) + ", " + String::num(g, 4) + ", " + String::num(b, 4) + ", " + String::num(a, 4) + ")";
|
return "(" + String::num(r, 4) + ", " + String::num(g, 4) + ", " + String::num(b, 4) + ", " + String::num(a, 4) + ")";
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ struct Color {
|
|||||||
uint64_t to_rgba64() const;
|
uint64_t to_rgba64() const;
|
||||||
uint64_t to_argb64() const;
|
uint64_t to_argb64() const;
|
||||||
uint64_t to_abgr64() const;
|
uint64_t to_abgr64() const;
|
||||||
|
String to_html(bool p_alpha = true) const;
|
||||||
float get_h() const;
|
float get_h() const;
|
||||||
float get_s() const;
|
float get_s() const;
|
||||||
float get_v() const;
|
float get_v() const;
|
||||||
@ -189,8 +190,7 @@ struct Color {
|
|||||||
static String get_named_color_name(int p_idx);
|
static String get_named_color_name(int p_idx);
|
||||||
static Color get_named_color(int p_idx);
|
static Color get_named_color(int p_idx);
|
||||||
static Color from_string(const String &p_string, const Color &p_default);
|
static Color from_string(const String &p_string, const Color &p_default);
|
||||||
String to_html(bool p_alpha = true) const;
|
static Color from_hsv(float p_h, float p_s, float p_v, float p_alpha = 1.0);
|
||||||
Color from_hsv(float p_h, float p_s, float p_v, float p_a) const;
|
|
||||||
static Color from_rgbe9995(uint32_t p_rgbe);
|
static Color from_rgbe9995(uint32_t p_rgbe);
|
||||||
|
|
||||||
_FORCE_INLINE_ bool operator<(const Color &p_color) const; //used in set keys
|
_FORCE_INLINE_ bool operator<(const Color &p_color) const; //used in set keys
|
||||||
|
@ -1422,8 +1422,6 @@ static void _register_variant_builtin_methods() {
|
|||||||
bind_method(String, sha1_buffer, sarray(), varray());
|
bind_method(String, sha1_buffer, sarray(), varray());
|
||||||
bind_method(String, sha256_buffer, sarray(), varray());
|
bind_method(String, sha256_buffer, sarray(), varray());
|
||||||
bind_method(String, is_empty, sarray(), varray());
|
bind_method(String, is_empty, sarray(), varray());
|
||||||
// FIXME: Static function, not sure how to bind
|
|
||||||
//bind_method(String, humanize_size, sarray("size"), varray());
|
|
||||||
|
|
||||||
bind_method(String, is_absolute_path, sarray(), varray());
|
bind_method(String, is_absolute_path, sarray(), varray());
|
||||||
bind_method(String, is_relative_path, sarray(), varray());
|
bind_method(String, is_relative_path, sarray(), varray());
|
||||||
@ -1635,17 +1633,15 @@ static void _register_variant_builtin_methods() {
|
|||||||
bind_method(Color, to_argb64, sarray(), varray());
|
bind_method(Color, to_argb64, sarray(), varray());
|
||||||
bind_method(Color, to_abgr64, sarray(), varray());
|
bind_method(Color, to_abgr64, sarray(), varray());
|
||||||
bind_method(Color, to_rgba64, sarray(), varray());
|
bind_method(Color, to_rgba64, sarray(), varray());
|
||||||
|
bind_method(Color, to_html, sarray("with_alpha"), varray(true));
|
||||||
|
|
||||||
bind_method(Color, clamp, sarray("min", "max"), varray(Color(0, 0, 0, 0), Color(1, 1, 1, 1)));
|
bind_method(Color, clamp, sarray("min", "max"), varray(Color(0, 0, 0, 0), Color(1, 1, 1, 1)));
|
||||||
bind_method(Color, inverted, sarray(), varray());
|
bind_method(Color, inverted, sarray(), varray());
|
||||||
bind_method(Color, lerp, sarray("to", "weight"), varray());
|
bind_method(Color, lerp, sarray("to", "weight"), varray());
|
||||||
bind_method(Color, lightened, sarray("amount"), varray());
|
bind_method(Color, lightened, sarray("amount"), varray());
|
||||||
bind_method(Color, darkened, sarray("amount"), varray());
|
bind_method(Color, darkened, sarray("amount"), varray());
|
||||||
bind_method(Color, to_html, sarray("with_alpha"), varray(true));
|
|
||||||
bind_method(Color, blend, sarray("over"), varray());
|
bind_method(Color, blend, sarray("over"), varray());
|
||||||
|
|
||||||
// FIXME: Color is immutable, need to probably find a way to do this via constructor
|
|
||||||
//ADDFUNC4R(COLOR, COLOR, Color, from_hsv, FLOAT, "h", FLOAT, "s", FLOAT, "v", FLOAT, "a", varray(1.0));
|
|
||||||
bind_method(Color, is_equal_approx, sarray("to"), varray());
|
bind_method(Color, is_equal_approx, sarray("to"), varray());
|
||||||
|
|
||||||
bind_static_method(Color, hex, sarray("hex"), varray());
|
bind_static_method(Color, hex, sarray("hex"), varray());
|
||||||
@ -1657,6 +1653,7 @@ static void _register_variant_builtin_methods() {
|
|||||||
bind_static_method(Color, get_named_color_name, sarray("idx"), varray());
|
bind_static_method(Color, get_named_color_name, sarray("idx"), varray());
|
||||||
bind_static_method(Color, get_named_color, sarray("idx"), varray());
|
bind_static_method(Color, get_named_color, sarray("idx"), varray());
|
||||||
bind_static_method(Color, from_string, sarray("str", "default"), varray());
|
bind_static_method(Color, from_string, sarray("str", "default"), varray());
|
||||||
|
bind_static_method(Color, from_hsv, sarray("h", "s", "v", "alpha"), varray(1.0));
|
||||||
bind_static_method(Color, from_rgbe9995, sarray("rgbe"), varray());
|
bind_static_method(Color, from_rgbe9995, sarray("rgbe"), varray());
|
||||||
|
|
||||||
/* RID */
|
/* RID */
|
||||||
|
@ -147,6 +147,24 @@
|
|||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="from_hsv" qualifiers="static">
|
||||||
|
<return type="Color" />
|
||||||
|
<argument index="0" name="h" type="float" />
|
||||||
|
<argument index="1" name="s" type="float" />
|
||||||
|
<argument index="2" name="v" type="float" />
|
||||||
|
<argument index="3" name="alpha" type="float" default="1.0" />
|
||||||
|
<description>
|
||||||
|
Constructs a color from an [url=https://en.wikipedia.org/wiki/HSL_and_HSV]HSV profile[/url]. [code]h[/code] (hue), [code]s[/code] (saturation), and [code]v[/code] (value) are typically between 0 and 1.
|
||||||
|
[codeblocks]
|
||||||
|
[gdscript]
|
||||||
|
var c = Color.from_hsv(0.58, 0.5, 0.79, 0.8)
|
||||||
|
[/gdscript]
|
||||||
|
[csharp]
|
||||||
|
var c = Color.FromHsv(0.58f, 0.5f, 0.79f, 0.8f);
|
||||||
|
[/csharp]
|
||||||
|
[/codeblocks]
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="from_rgbe9995" qualifiers="static">
|
<method name="from_rgbe9995" qualifiers="static">
|
||||||
<return type="Color" />
|
<return type="Color" />
|
||||||
<argument index="0" name="rgbe" type="int" />
|
<argument index="0" name="rgbe" type="int" />
|
||||||
|
Loading…
Reference in New Issue
Block a user