1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-18 14:21:41 +00:00

Fix custom class icon when it inherits from a script

This commit is contained in:
Haoyu Qiu
2022-04-26 23:40:33 +08:00
parent e9e2aaf812
commit 8960b990ec

View File

@@ -4095,22 +4095,28 @@ Ref<Texture2D> EditorNode::get_class_icon(const String &p_class, const String &p
ERR_FAIL_COND_V_MSG(p_class.is_empty(), nullptr, "Class name cannot be empty."); ERR_FAIL_COND_V_MSG(p_class.is_empty(), nullptr, "Class name cannot be empty.");
if (ScriptServer::is_global_class(p_class)) { if (ScriptServer::is_global_class(p_class)) {
Ref<ImageTexture> icon; String class_name = p_class;
Ref<Script> script = EditorNode::get_editor_data().script_class_load_script(p_class); Ref<Script> script = EditorNode::get_editor_data().script_class_load_script(class_name);
StringName name = p_class;
while (script.is_valid()) { while (true) {
name = EditorNode::get_editor_data().script_class_get_name(script->get_path()); String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(class_name);
String current_icon_path = EditorNode::get_editor_data().script_class_get_icon_path(name); Ref<Texture> icon = _load_custom_class_icon(icon_path);
icon = _load_custom_class_icon(current_icon_path);
if (icon.is_valid()) { if (icon.is_valid()) {
return icon; return icon; // Current global class has icon.
} }
script = script->get_base_script();
}
if (icon.is_null()) { // Find next global class along the inheritance chain.
icon = gui_base->get_theme_icon(ScriptServer::get_global_class_base(name), SNAME("EditorIcons")); do {
Ref<Script> base_script = script->get_base_script();
if (base_script.is_null()) {
// We've reached a native class, use its icon.
String base_type;
script->get_language()->get_global_class_name(script->get_path(), &base_type);
return gui_base->get_theme_icon(base_type, "EditorIcons");
}
script = base_script;
class_name = EditorNode::get_editor_data().script_class_get_name(script->get_path());
} while (class_name.is_empty());
} }
} }