summaryrefslogtreecommitdiffstats
path: root/editor/editor_node.cpp
diff options
context:
space:
mode:
authorAndrii Doroshenko (Xrayez) <xrayez@gmail.com>2020-06-24 13:08:27 +0300
committerAndrii Doroshenko (Xrayez) <xrayez@gmail.com>2020-06-24 13:08:27 +0300
commit4a86e2bb76a9efd4b0495f3c62c76a5feedb8d44 (patch)
tree2b52a8c7efaff4ab7b3a24da68e4daed1068e4f3 /editor/editor_node.cpp
parentddba410ce5fdfaf736c4c91650ec84ebb609bb8f (diff)
downloadredot-engine-4a86e2bb76a9efd4b0495f3c62c76a5feedb8d44.tar.gz
Optimize class icon loading
`get_global_class_name` for `GDScriptLanguage` is slow because it forces to parse an entire script each time. This patch ensures that the icon is actually fetched from the EditorData where they are loaded beforehand. This change also makes the behavior consistent with the existing `get_object_icon` method in EditorNode.
Diffstat (limited to 'editor/editor_node.cpp')
-rw-r--r--editor/editor_node.cpp13
1 files changed, 4 insertions, 9 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index bb34a45938..d8bc555d6d 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -3642,17 +3642,12 @@ Ref<Texture2D> EditorNode::get_class_icon(const String &p_class, const String &p
}
if (ScriptServer::is_global_class(p_class)) {
- String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(p_class);
- Ref<ImageTexture> icon = _load_custom_class_icon(icon_path);
- if (icon.is_valid()) {
- return icon;
- }
-
- Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class), "Script");
+ Ref<ImageTexture> icon;
+ Ref<Script> script = EditorNode::get_editor_data().script_class_load_script(p_class);
while (script.is_valid()) {
- String current_icon_path;
- script->get_language()->get_global_class_name(script->get_path(), nullptr, &current_icon_path);
+ StringName name = EditorNode::get_editor_data().script_class_get_name(script->get_path());
+ String current_icon_path = EditorNode::get_editor_data().script_class_get_icon_path(name);
icon = _load_custom_class_icon(current_icon_path);
if (icon.is_valid()) {
return icon;