Browse Source

Merge pull request #15537 from PJB3005/18-01-09-fix-color-string-constructor-mono

Fixes Mono color creation from string being 0-255 instead of 0-1.
Rémi Verschelde 7 years ago
parent
commit
a60896869e
1 changed files with 13 additions and 13 deletions
  1. 13 13
      modules/mono/glue/cs_files/Color.cs

+ 13 - 13
modules/mono/glue/cs_files/Color.cs

@@ -336,7 +336,7 @@ namespace Godot
             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;
 
@@ -415,17 +415,17 @@ namespace Godot
 
             if (alpha)
             {
-                if ((int)_parse_col(color, 0) < 0)
+                if (_parse_col(color, 0) < 0)
                     return false;
             }
 
             int from = alpha ? 2 : 0;
 
-            if ((int)_parse_col(color, from + 0) < 0)
+            if (_parse_col(color, from + 0) < 0)
                 return false;
-            if ((int)_parse_col(color, from + 2) < 0)
+            if (_parse_col(color, from + 2) < 0)
                 return false;
-            if ((int)_parse_col(color, from + 4) < 0)
+            if (_parse_col(color, from + 4) < 0)
                 return false;
 
             return true;
@@ -467,10 +467,10 @@ namespace Godot
 
             if (alpha)
             {
-                a = _parse_col(rgba, 0);
+                a = _parse_col(rgba, 0) / 255f;
 
                 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
             {
@@ -479,20 +479,20 @@ namespace Godot
 
             int from = alpha ? 2 : 0;
 
-            r = _parse_col(rgba, from + 0);
+            r = _parse_col(rgba, from + 0) / 255f;
 
             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)
-                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)
-                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)