From f55445079ad8e84cd337063b8cbac6eaf06d5592 Mon Sep 17 00:00:00 2001 From: Aaron Franke Date: Sun, 6 Dec 2020 17:37:34 -0500 Subject: Replace ColorN and from HTML with a string constructor --- .../mono/glue/GodotSharp/GodotSharp/Core/Color.cs | 101 ++++++++++++++------- 1 file changed, 66 insertions(+), 35 deletions(-) (limited to 'modules/mono/glue') diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs index 90141928ca..0c333d06ef 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs @@ -104,7 +104,7 @@ namespace Godot /// /// The HSV hue of this color, on the range 0 to 1. /// - /// Getting is a long process, refer to the source code for details. Setting uses . + /// Getting is a long process, refer to the source code for details. Setting uses . public float h { get @@ -145,14 +145,14 @@ namespace Godot } set { - this = FromHsv(value, s, v, a); + this = FromHSV(value, s, v, a); } } /// /// The HSV saturation of this color, on the range 0 to 1. /// - /// Getting is equivalent to the ratio between the min and max RGB value. Setting uses . + /// Getting is equivalent to the ratio between the min and max RGB value. Setting uses . public float s { get @@ -166,14 +166,14 @@ namespace Godot } set { - this = FromHsv(h, value, v, a); + this = FromHSV(h, value, v, a); } } /// /// The HSV value (brightness) of this color, on the range 0 to 1. /// - /// Getting is equivalent to using `Max()` on the RGB components. Setting uses . + /// Getting is equivalent to using `Max()` on the RGB components. Setting uses . public float v { get @@ -182,7 +182,7 @@ namespace Godot } set { - this = FromHsv(h, s, value, a); + this = FromHSV(h, s, value, a); } } @@ -455,7 +455,7 @@ namespace Godot /// /// Whether or not to include alpha. If false, the color is RGB instead of RGBA. /// A string for the HTML hexadecimal representation of this color. - public string ToHtml(bool includeAlpha = true) + public string ToHTML(bool includeAlpha = true) { var txt = string.Empty; @@ -531,19 +531,51 @@ namespace Godot r = (rgba & 0xFFFF) / 65535.0f; } + /// + /// Constructs a color either from an HTML color code or from a + /// standardized color name. Supported + /// color names are the same as the constants. + /// + /// The HTML color code or color name to construct from. + public Color(string code) + { + if (HtmlIsValid(code)) + { + this = FromHTML(code); + } + else + { + this = Named(code); + } + } + + /// + /// Constructs a color either from an HTML color code or from a + /// standardized color name, with `alpha` on the range of 0 to 1. Supported + /// color names are the same as the constants. + /// + /// The HTML color code or color name to construct from. + /// The alpha (transparency) value, typically on the range of 0 to 1. + public Color(string code, float alpha) + { + this = new Color(code); + a = alpha; + } + /// /// Constructs a color from the HTML hexadecimal color string in RGBA format. /// /// A string for the HTML hexadecimal representation of this color. - public Color(string rgba) + private static Color FromHTML(string rgba) { + Color c; if (rgba.Length == 0) { - r = 0f; - g = 0f; - b = 0f; - a = 1.0f; - return; + c.r = 0f; + c.g = 0f; + c.b = 0f; + c.a = 1.0f; + return c; } if (rgba[0] == '#') @@ -577,47 +609,48 @@ namespace Godot throw new ArgumentOutOfRangeException("Invalid color code. Length is " + rgba.Length + " but a length of 6 or 8 is expected: " + rgba); } - a = 1.0f; + c.a = 1.0f; if (isShorthand) { - r = ParseCol4(rgba, 0) / 15f; - g = ParseCol4(rgba, 1) / 15f; - b = ParseCol4(rgba, 2) / 15f; + c.r = ParseCol4(rgba, 0) / 15f; + c.g = ParseCol4(rgba, 1) / 15f; + c.b = ParseCol4(rgba, 2) / 15f; if (alpha) { - a = ParseCol4(rgba, 3) / 15f; + c.a = ParseCol4(rgba, 3) / 15f; } } else { - r = ParseCol8(rgba, 0) / 255f; - g = ParseCol8(rgba, 2) / 255f; - b = ParseCol8(rgba, 4) / 255f; + c.r = ParseCol8(rgba, 0) / 255f; + c.g = ParseCol8(rgba, 2) / 255f; + c.b = ParseCol8(rgba, 4) / 255f; if (alpha) { - a = ParseCol8(rgba, 6) / 255f; + c.a = ParseCol8(rgba, 6) / 255f; } } - if (r < 0) + if (c.r < 0) { throw new ArgumentOutOfRangeException("Invalid color code. Red part is not valid hexadecimal: " + rgba); } - if (g < 0) + if (c.g < 0) { throw new ArgumentOutOfRangeException("Invalid color code. Green part is not valid hexadecimal: " + rgba); } - if (b < 0) + if (c.b < 0) { throw new ArgumentOutOfRangeException("Invalid color code. Blue part is not valid hexadecimal: " + rgba); } - if (a < 0) + if (c.a < 0) { throw new ArgumentOutOfRangeException("Invalid color code. Alpha part is not valid hexadecimal: " + rgba); } + return c; } /// @@ -640,9 +673,8 @@ namespace Godot /// the constants defined in . /// /// The name of the color. - /// The alpha (transparency) component represented on the range of 0 to 1. Default: 1. /// The constructed color. - public static Color ColorN(string name, float alpha = 1f) + private static Color Named(string name) { name = name.Replace(" ", String.Empty); name = name.Replace("-", String.Empty); @@ -656,9 +688,7 @@ namespace Godot throw new ArgumentOutOfRangeException($"Invalid Color Name: {name}"); } - Color color = Colors.namedColors[name]; - color.a = alpha; - return color; + return Colors.namedColors[name]; } /// @@ -671,11 +701,11 @@ namespace Godot /// The HSV value (brightness), typically on the range of 0 to 1. /// The alpha (transparency) value, typically on the range of 0 to 1. /// The constructed color. - public static Color FromHsv(float hue, float saturation, float value, float alpha = 1.0f) + public static Color FromHSV(float hue, float saturation, float value, float alpha = 1.0f) { if (saturation == 0) { - // acp_hromatic (grey) + // Achromatic (grey) return new Color(value, value, value, alpha); } @@ -715,7 +745,7 @@ namespace Godot /// Output parameter for the HSV hue. /// Output parameter for the HSV saturation. /// Output parameter for the HSV value. - public void ToHsv(out float hue, out float saturation, out float value) + public void ToHSV(out float hue, out float saturation, out float value) { float max = (float)Mathf.Max(r, Mathf.Max(g, b)); float min = (float)Mathf.Min(r, Mathf.Min(g, b)); @@ -803,7 +833,8 @@ namespace Godot } // Check if each hex digit is valid. - for (int i = 0; i < len; i++) { + for (int i = 0; i < len; i++) + { if (ParseCol4(color, i) == -1) { return false; -- cgit v1.2.3