diff options
Diffstat (limited to 'editor/editor_resource_picker.cpp')
-rw-r--r-- | editor/editor_resource_picker.cpp | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp index eee589489d..50820ac12f 100644 --- a/editor/editor_resource_picker.cpp +++ b/editor/editor_resource_picker.cpp @@ -102,7 +102,7 @@ void EditorResourcePicker::_update_resource_preview(const String &p_path, const } if (p_preview.is_valid()) { - preview_rect->set_offset(SIDE_LEFT, assign_button->get_icon()->get_width() + assign_button->get_theme_stylebox(SNAME("normal"))->get_content_margin(SIDE_LEFT) + get_theme_constant(SNAME("h_separation"), SNAME("Button"))); + preview_rect->set_offset(SIDE_LEFT, assign_button->get_icon()->get_width() + assign_button->get_theme_stylebox(CoreStringName(normal))->get_content_margin(SIDE_LEFT) + get_theme_constant(SNAME("h_separation"), SNAME("Button"))); // Resource-specific stretching. if (Ref<GradientTexture1D>(edited_resource).is_valid() || Ref<Gradient>(edited_resource).is_valid()) { @@ -488,8 +488,8 @@ void EditorResourcePicker::set_create_options(Object *p_menu_node) { if (!base_type.is_empty()) { int idx = 0; - HashSet<StringName> allowed_types; - _get_allowed_types(false, &allowed_types); + _ensure_allowed_types(); + HashSet<StringName> allowed_types = allowed_types_without_convert; for (const StringName &E : allowed_types) { const String &t = E; @@ -593,23 +593,29 @@ static void _add_allowed_type(const StringName &p_type, HashSet<StringName> *p_v } } -void EditorResourcePicker::_get_allowed_types(bool p_with_convert, HashSet<StringName> *p_vector) const { +void EditorResourcePicker::_ensure_allowed_types() const { + if (!allowed_types_without_convert.is_empty()) { + return; + } + Vector<String> allowed_types = base_type.split(","); int size = allowed_types.size(); for (int i = 0; i < size; i++) { - String base = allowed_types[i].strip_edges(); + const String base = allowed_types[i].strip_edges(); + _add_allowed_type(base, &allowed_types_without_convert); + } - _add_allowed_type(base, p_vector); + allowed_types_with_convert = HashSet<StringName>(allowed_types_without_convert); - if (p_with_convert) { - if (base == "BaseMaterial3D") { - p_vector->insert("Texture2D"); - } else if (base == "ShaderMaterial") { - p_vector->insert("Shader"); - } else if (base == "Texture2D") { - p_vector->insert("Image"); - } + for (int i = 0; i < size; i++) { + const String base = allowed_types[i].strip_edges(); + if (base == "BaseMaterial3D") { + allowed_types_with_convert.insert("Texture2D"); + } else if (base == "ShaderMaterial") { + allowed_types_with_convert.insert("Shader"); + } else if (base == "Texture2D") { + allowed_types_with_convert.insert("Image"); } } } @@ -645,8 +651,8 @@ bool EditorResourcePicker::_is_drop_valid(const Dictionary &p_drag_data) const { } } - HashSet<StringName> allowed_types; - _get_allowed_types(true, &allowed_types); + _ensure_allowed_types(); + HashSet<StringName> allowed_types = allowed_types_with_convert; if (res.is_valid()) { String res_type = _get_resource_type(res); @@ -713,8 +719,8 @@ void EditorResourcePicker::drop_data_fw(const Point2 &p_point, const Variant &p_ } if (dropped_resource.is_valid()) { - HashSet<StringName> allowed_types; - _get_allowed_types(false, &allowed_types); + _ensure_allowed_types(); + HashSet<StringName> allowed_types = allowed_types_without_convert; String res_type = _get_resource_type(dropped_resource); @@ -835,8 +841,8 @@ void EditorResourcePicker::set_base_type(const String &p_base_type) { // There is a possibility that the new base type is conflicting with the existing value. // Keep the value, but warn the user that there is a potential mistake. if (!base_type.is_empty() && edited_resource.is_valid()) { - HashSet<StringName> allowed_types; - _get_allowed_types(true, &allowed_types); + _ensure_allowed_types(); + HashSet<StringName> allowed_types = allowed_types_with_convert; StringName custom_class; bool is_custom = false; @@ -857,8 +863,8 @@ String EditorResourcePicker::get_base_type() const { } Vector<String> EditorResourcePicker::get_allowed_types() const { - HashSet<StringName> allowed_types; - _get_allowed_types(false, &allowed_types); + _ensure_allowed_types(); + HashSet<StringName> allowed_types = allowed_types_without_convert; Vector<String> types; types.resize(allowed_types.size()); @@ -881,8 +887,8 @@ void EditorResourcePicker::set_edited_resource(Ref<Resource> p_resource) { } if (!base_type.is_empty()) { - HashSet<StringName> allowed_types; - _get_allowed_types(true, &allowed_types); + _ensure_allowed_types(); + HashSet<StringName> allowed_types = allowed_types_with_convert; StringName custom_class; bool is_custom = false; @@ -896,7 +902,10 @@ void EditorResourcePicker::set_edited_resource(Ref<Resource> p_resource) { ERR_FAIL_MSG(vformat("Failed to set a resource of the type '%s' because this EditorResourcePicker only accepts '%s' and its derivatives.", class_str, base_type)); } } + set_edited_resource_no_check(p_resource); +} +void EditorResourcePicker::set_edited_resource_no_check(Ref<Resource> p_resource) { edited_resource = p_resource; _update_resource(); } @@ -1034,9 +1043,9 @@ EditorResourcePicker::EditorResourcePicker(bool p_hide_assign_button_controls) { assign_button->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); SET_DRAG_FORWARDING_GCD(assign_button, EditorResourcePicker); add_child(assign_button); - assign_button->connect("pressed", callable_mp(this, &EditorResourcePicker::_resource_selected)); - assign_button->connect("draw", callable_mp(this, &EditorResourcePicker::_button_draw)); - assign_button->connect("gui_input", callable_mp(this, &EditorResourcePicker::_button_input)); + assign_button->connect(SceneStringName(pressed), callable_mp(this, &EditorResourcePicker::_resource_selected)); + assign_button->connect(SceneStringName(draw), callable_mp(this, &EditorResourcePicker::_button_draw)); + assign_button->connect(SceneStringName(gui_input), callable_mp(this, &EditorResourcePicker::_button_input)); if (!p_hide_assign_button_controls) { preview_rect = memnew(TextureRect); @@ -1052,9 +1061,9 @@ EditorResourcePicker::EditorResourcePicker(bool p_hide_assign_button_controls) { edit_button = memnew(Button); edit_button->set_flat(true); edit_button->set_toggle_mode(true); - edit_button->connect("pressed", callable_mp(this, &EditorResourcePicker::_update_menu)); + edit_button->connect(SceneStringName(pressed), callable_mp(this, &EditorResourcePicker::_update_menu)); add_child(edit_button); - edit_button->connect("gui_input", callable_mp(this, &EditorResourcePicker::_button_input)); + edit_button->connect(SceneStringName(gui_input), callable_mp(this, &EditorResourcePicker::_button_input)); add_theme_constant_override("separation", 0); } @@ -1323,7 +1332,7 @@ EditorAudioStreamPicker::EditorAudioStreamPicker() : stream_preview_rect->set_offset(SIDE_BOTTOM, -1); stream_preview_rect->set_offset(SIDE_RIGHT, -1); stream_preview_rect->set_mouse_filter(MOUSE_FILTER_IGNORE); - stream_preview_rect->connect("draw", callable_mp(this, &EditorAudioStreamPicker::_preview_draw)); + stream_preview_rect->connect(SceneStringName(draw), callable_mp(this, &EditorAudioStreamPicker::_preview_draw)); get_assign_button()->add_child(stream_preview_rect); get_assign_button()->move_child(stream_preview_rect, 0); |