Bladeren bron

Fix implementation of property_can_revert() in various classes

kobewi 1 jaar geleden
bovenliggende
commit
b9d25580ce

+ 6 - 12
core/config/project_settings.cpp

@@ -1167,22 +1167,16 @@ bool ProjectSettings::is_project_loaded() const {
 }
 
 bool ProjectSettings::_property_can_revert(const StringName &p_name) const {
-	if (!props.has(p_name)) {
-		return false;
-	}
-
-	return props[p_name].initial != props[p_name].variant;
+	return props.has(p_name);
 }
 
 bool ProjectSettings::_property_get_revert(const StringName &p_name, Variant &r_property) const {
-	if (!props.has(p_name)) {
-		return false;
+	const RBMap<StringName, ProjectSettings::VariantContainer>::Element *value = props.find(p_name);
+	if (value) {
+		r_property = value->value().initial.duplicate();
+		return true;
 	}
-
-	// Duplicate so that if value is array or dictionary, changing the setting will not change the stored initial value.
-	r_property = props[p_name].initial.duplicate();
-
-	return true;
+	return false;
 }
 
 void ProjectSettings::set_setting(const String &p_setting, const Variant &p_value) {

+ 9 - 13
editor/editor_settings.cpp

@@ -1424,24 +1424,20 @@ Variant _EDITOR_GET(const String &p_setting) {
 }
 
 bool EditorSettings::_property_can_revert(const StringName &p_name) const {
-	if (!props.has(p_name)) {
-		return false;
-	}
-
-	if (!props[p_name].has_default_value) {
-		return false;
+	const VariantContainer *property = props.getptr(p_name);
+	if (property) {
+		return property->has_default_value;
 	}
-
-	return props[p_name].initial != props[p_name].variant;
+	return false;
 }
 
 bool EditorSettings::_property_get_revert(const StringName &p_name, Variant &r_property) const {
-	if (!props.has(p_name) || !props[p_name].has_default_value) {
-		return false;
+	const VariantContainer *value = props.getptr(p_name);
+	if (value && value->has_default_value) {
+		r_property = value->initial;
+		return true;
 	}
-
-	r_property = props[p_name].initial;
-	return true;
+	return false;
 }
 
 void EditorSettings::add_property_hint(const PropertyInfo &p_hint) {

+ 1 - 17
editor/multi_node_edit.cpp

@@ -186,25 +186,9 @@ bool MultiNodeEdit::_property_can_revert(const StringName &p_name) const {
 	}
 
 	if (ClassDB::has_property(get_edited_class_name(), p_name)) {
-		StringName class_name;
 		for (const NodePath &E : nodes) {
 			Node *node = es->get_node_or_null(E);
-			if (!node) {
-				continue;
-			}
-
-			class_name = node->get_class_name();
-		}
-
-		Variant default_value = ClassDB::class_get_default_property_value(class_name, p_name);
-		for (const NodePath &E : nodes) {
-			Node *node = es->get_node_or_null(E);
-			if (!node) {
-				continue;
-			}
-
-			if (node->get(p_name) != default_value) {
-				// A node that doesn't have the default value has been found, so show the revert button.
+			if (node) {
 				return true;
 			}
 		}

+ 1 - 7
editor/plugins/font_config_plugin.cpp

@@ -121,13 +121,8 @@ bool EditorPropertyFontOTObject::_property_can_revert(const StringName &p_name)
 
 	if (name.begins_with("keys")) {
 		int key = name.get_slicec('/', 1).to_int();
-		if (defaults_dict.has(key) && dict.has(key)) {
-			int value = dict[key];
-			Vector3i range = defaults_dict[key];
-			return range.z != value;
-		}
+		return defaults_dict.has(key) && dict.has(key);
 	}
-
 	return false;
 }
 
@@ -142,7 +137,6 @@ bool EditorPropertyFontOTObject::_property_get_revert(const StringName &p_name,
 			return true;
 		}
 	}
-
 	return false;
 }
 

+ 12 - 10
scene/3d/node_3d.cpp

@@ -1181,15 +1181,16 @@ void Node3D::_validate_property(PropertyInfo &p_property) const {
 }
 
 bool Node3D::_property_can_revert(const StringName &p_name) const {
-	if (p_name == "basis") {
+	const String sname = p_name;
+	if (sname == "basis") {
 		return true;
-	} else if (p_name == "scale") {
+	} else if (sname == "scale") {
 		return true;
-	} else if (p_name == "quaternion") {
+	} else if (sname == "quaternion") {
 		return true;
-	} else if (p_name == "rotation") {
+	} else if (sname == "rotation") {
 		return true;
-	} else if (p_name == "position") {
+	} else if (sname == "position") {
 		return true;
 	}
 	return false;
@@ -1198,35 +1199,36 @@ bool Node3D::_property_can_revert(const StringName &p_name) const {
 bool Node3D::_property_get_revert(const StringName &p_name, Variant &r_property) const {
 	bool valid = false;
 
-	if (p_name == "basis") {
+	const String sname = p_name;
+	if (sname == "basis") {
 		Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
 		if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
 			r_property = Transform3D(variant).get_basis();
 		} else {
 			r_property = Basis();
 		}
-	} else if (p_name == "scale") {
+	} else if (sname == "scale") {
 		Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
 		if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
 			r_property = Transform3D(variant).get_basis().get_scale();
 		} else {
 			r_property = Vector3(1.0, 1.0, 1.0);
 		}
-	} else if (p_name == "quaternion") {
+	} else if (sname == "quaternion") {
 		Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
 		if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
 			r_property = Quaternion(Transform3D(variant).get_basis().get_rotation_quaternion());
 		} else {
 			r_property = Quaternion();
 		}
-	} else if (p_name == "rotation") {
+	} else if (sname == "rotation") {
 		Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
 		if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
 			r_property = Transform3D(variant).get_basis().get_euler_normalized(data.euler_rotation_order);
 		} else {
 			r_property = Vector3();
 		}
-	} else if (p_name == "position") {
+	} else if (sname == "position") {
 		Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
 		if (valid) {
 			r_property = Transform3D(variant).get_origin();

+ 3 - 6
scene/resources/material.cpp

@@ -382,14 +382,11 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
 
 bool ShaderMaterial::_property_can_revert(const StringName &p_name) const {
 	if (shader.is_valid()) {
-		const StringName *pr = remap_cache.getptr(p_name);
-		if (pr) {
-			Variant default_value = RenderingServer::get_singleton()->shader_get_parameter_default(shader->get_rid(), *pr);
-			Variant current_value = get_shader_parameter(*pr);
-			return default_value.get_type() != Variant::NIL && default_value != current_value;
-		} else if (p_name == "render_priority" || p_name == "next_pass") {
+		if (remap_cache.has(p_name)) {
 			return true;
 		}
+		const String sname = p_name;
+		return sname == "render_priority" || sname == "next_pass";
 	}
 	return false;
 }