Browse Source

Merge pull request #36379 from aaronfranke/color-constructors

Add a Color constructor for Color with alpha
Rémi Verschelde 5 years ago
parent
commit
ae33cf5f45

+ 11 - 1
core/color.h

@@ -205,7 +205,7 @@ struct Color {
 	operator String() const;
 
 	/**
-	 * No construct parameters, r=0, g=0, b=0. a=255
+	 * No construct parameters, r=0, g=0, b=0. a=1
 	 */
 	_FORCE_INLINE_ Color() {
 		r = 0;
@@ -223,6 +223,16 @@ struct Color {
 		b = p_b;
 		a = p_a;
 	}
+
+	/**
+	 * Construct a Color from another Color, but with the specified alpha value.
+	 */
+	_FORCE_INLINE_ Color(const Color &p_c, float p_a) {
+		r = p_c.r;
+		g = p_c.g;
+		b = p_c.b;
+		a = p_a;
+	}
 };
 
 bool Color::operator<(const Color &p_color) const {

+ 0 - 5
core/variant.cpp

@@ -102,11 +102,6 @@ String Variant::get_type_name(Variant::Type p_type) {
 			return "Plane";
 
 		} break;
-		/*
-			case QUAT: {
-
-
-			} break;*/
 		case AABB: {
 
 			return "AABB";

+ 7 - 0
core/variant_call.cpp

@@ -1075,6 +1075,11 @@ struct _VariantCall {
 		r_ret = Color::hex(*p_args[0]);
 	}
 
+	static void Color_init5(Variant &r_ret, const Variant **p_args) {
+
+		r_ret = Color(((Color)(*p_args[0])), *p_args[1]);
+	}
+
 	static void AABB_init1(Variant &r_ret, const Variant **p_args) {
 
 		r_ret = ::AABB(*p_args[0], *p_args[1]);
@@ -2211,6 +2216,8 @@ void register_variant_methods() {
 
 	_VariantCall::add_constructor(_VariantCall::Color_init1, Variant::COLOR, "r", Variant::FLOAT, "g", Variant::FLOAT, "b", Variant::FLOAT, "a", Variant::FLOAT);
 	_VariantCall::add_constructor(_VariantCall::Color_init2, Variant::COLOR, "r", Variant::FLOAT, "g", Variant::FLOAT, "b", Variant::FLOAT);
+	// init3 and init4 are the constructors for HTML hex strings and integers respectively which don't need binding here, so we skip to init5.
+	_VariantCall::add_constructor(_VariantCall::Color_init5, Variant::COLOR, "c", Variant::COLOR, "a", Variant::FLOAT);
 
 	_VariantCall::add_constructor(_VariantCall::AABB_init1, Variant::AABB, "position", Variant::VECTOR3, "size", Variant::VECTOR3);
 

+ 14 - 0
doc/classes/Color.xml

@@ -39,6 +39,20 @@
 				[/codeblock]
 			</description>
 		</method>
+		<method name="Color">
+			<return type="Color">
+			</return>
+			<argument index="0" name="c" type="Color">
+			</argument>
+			<argument index="1" name="a" type="float">
+			</argument>
+			<description>
+				Constructs a color from an existing color, but with a custom alpha value.
+				[codeblock]
+				var red = Color(Color.red, 0.5) # 50% transparent red.
+				[/codeblock]
+			</description>
+		</method>
 		<method name="Color">
 			<return type="Color">
 			</return>

+ 9 - 1
modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs

@@ -420,7 +420,7 @@ namespace Godot
             return txt;
         }
 
-        // Constructors 
+        // Constructors
         public Color(float r, float g, float b, float a = 1.0f)
         {
             this.r = r;
@@ -429,6 +429,14 @@ namespace Godot
             this.a = a;
         }
 
+        public Color(Color c, float a = 1.0f)
+        {
+            r = c.r;
+            g = c.g;
+            b = c.b;
+            this.a = a;
+        }
+
         public Color(uint rgba)
         {
             a = (rgba & 0xFF) / 255.0f;