Fixes Mono color creation from string.

Fixes #15468

Also improves the error messages if the string isn't hex, because saying that the color value is negative is just a side effect of the implementation and tells you nothing.
This commit is contained in:
Pieter-Jan Briers 2018-01-09 21:33:18 +01:00
parent c037f6339f
commit 6e14cf991a

View file

@ -336,7 +336,7 @@ namespace Godot
this.r = (rgba & 0xFF) / 255.0f; this.r = (rgba & 0xFF) / 255.0f;
} }
private static float _parse_col(string str, int ofs) private static int _parse_col(string str, int ofs)
{ {
int ig = 0; int ig = 0;
@ -415,17 +415,17 @@ namespace Godot
if (alpha) if (alpha)
{ {
if ((int)_parse_col(color, 0) < 0) if (_parse_col(color, 0) < 0)
return false; return false;
} }
int from = alpha ? 2 : 0; int from = alpha ? 2 : 0;
if ((int)_parse_col(color, from + 0) < 0) if (_parse_col(color, from + 0) < 0)
return false; return false;
if ((int)_parse_col(color, from + 2) < 0) if (_parse_col(color, from + 2) < 0)
return false; return false;
if ((int)_parse_col(color, from + 4) < 0) if (_parse_col(color, from + 4) < 0)
return false; return false;
return true; return true;
@ -467,10 +467,10 @@ namespace Godot
if (alpha) if (alpha)
{ {
a = _parse_col(rgba, 0); a = _parse_col(rgba, 0) / 255f;
if (a < 0) if (a < 0)
throw new ArgumentOutOfRangeException("Invalid color code. Alpha is " + a + " but zero or greater is expected: " + rgba); throw new ArgumentOutOfRangeException("Invalid color code. Alpha part is not valid hexadecimal: " + rgba);
} }
else else
{ {
@ -479,20 +479,20 @@ namespace Godot
int from = alpha ? 2 : 0; int from = alpha ? 2 : 0;
r = _parse_col(rgba, from + 0); r = _parse_col(rgba, from + 0) / 255f;
if (r < 0) if (r < 0)
throw new ArgumentOutOfRangeException("Invalid color code. Red is " + r + " but zero or greater is expected: " + rgba); throw new ArgumentOutOfRangeException("Invalid color code. Red part is not valid hexadecimal: " + rgba);
g = _parse_col(rgba, from + 2); g = _parse_col(rgba, from + 2) / 255f;
if (g < 0) if (g < 0)
throw new ArgumentOutOfRangeException("Invalid color code. Green is " + g + " but zero or greater is expected: " + rgba); throw new ArgumentOutOfRangeException("Invalid color code. Green part is not valid hexadecimal: " + rgba);
b = _parse_col(rgba, from + 4); b = _parse_col(rgba, from + 4) / 255f;
if (b < 0) if (b < 0)
throw new ArgumentOutOfRangeException("Invalid color code. Blue is " + b + " but zero or greater is expected: " + rgba); throw new ArgumentOutOfRangeException("Invalid color code. Blue part is not valid hexadecimal: " + rgba);
} }
public static bool operator ==(Color left, Color right) public static bool operator ==(Color left, Color right)