Skip to content
Permalink
Browse files

Merge pull request #33019 from volzhs/class_icon

Resize custom class icon
  • Loading branch information...
akien-mga committed Oct 23, 2019
2 parents e96319c + 9131f70 commit 35944aebdeb4c3b5869aaeedaaded02397b7ce92
Showing with 26 additions and 12 deletions.
  1. +25 −12 editor/editor_node.cpp
  2. +1 −0 editor/editor_node.h
@@ -33,6 +33,7 @@
#include "core/bind/core_bind.h"
#include "core/class_db.h"
#include "core/io/config_file.h"
#include "core/io/image_loader.h"
#include "core/io/resource_loader.h"
#include "core/io/resource_saver.h"
#include "core/io/stream_peer_ssl.h"
@@ -3639,6 +3640,20 @@ StringName EditorNode::get_object_custom_type_name(const Object *p_object) const
return StringName();
}

Ref<ImageTexture> EditorNode::_load_custom_class_icon(const String &p_path) const {
if (p_path.length()) {
Ref<Image> img = memnew(Image);
Error err = ImageLoader::load_image(p_path, img);
if (err == OK) {
Ref<ImageTexture> icon = memnew(ImageTexture);
img->resize(16 * EDSCALE, 16 * EDSCALE, Image::INTERPOLATE_LANCZOS);
icon->create_from_image(img);
return icon;
}
}
return NULL;
}

Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p_fallback) const {
ERR_FAIL_COND_V(!p_object || !gui_base, NULL);

@@ -3652,8 +3667,10 @@ Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p
while (base_script.is_valid()) {
StringName name = EditorNode::get_editor_data().script_class_get_name(base_script->get_path());
String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(name);
if (icon_path.length())
return ResourceLoader::load(icon_path);
Ref<ImageTexture> icon = _load_custom_class_icon(icon_path);
if (icon.is_valid()) {
return icon;
}

// should probably be deprecated in 4.x
StringName base = base_script->get_instance_base_type();
@@ -3691,23 +3708,19 @@ Ref<Texture> EditorNode::get_class_icon(const String &p_class, const String &p_f

if (ScriptServer::is_global_class(p_class)) {
String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(p_class);
RES icon;

if (FileAccess::exists(icon_path)) {
icon = ResourceLoader::load(icon_path);
if (icon.is_valid())
return icon;
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");

while (script.is_valid()) {
String current_icon_path;
script->get_language()->get_global_class_name(script->get_path(), NULL, &current_icon_path);
if (FileAccess::exists(current_icon_path)) {
RES texture = ResourceLoader::load(current_icon_path);
if (texture.is_valid())
return texture;
icon = _load_custom_class_icon(current_icon_path);
if (icon.is_valid()) {
return icon;
}
script = script->get_base_script();
}
@@ -655,6 +655,7 @@ class EditorNode : public Node {

void _feature_profile_changed();
bool _is_class_editor_disabled_by_feature_profile(const StringName &p_class);
Ref<ImageTexture> _load_custom_class_icon(const String &p_path) const;

protected:
void _notification(int p_what);

0 comments on commit 35944ae

Please sign in to comment.
You can’t perform that action at this time.