From a103cd76bbabbaac05c1024b0fcc73745199cbfb Mon Sep 17 00:00:00 2001 From: Samuele Panzeri Date: Sun, 14 May 2023 19:40:45 +0200 Subject: [PATCH] Fix skeleton 3d editor crash in RC3 Control notifies a theme changed before the editor has entered the tree --- editor/editor_inspector.cpp | 5 +++++ editor/editor_inspector.h | 1 + editor/plugins/skeleton_3d_editor_plugin.cpp | 13 +++++-------- editor/plugins/skeleton_3d_editor_plugin.h | 3 ++- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 2b02818645d..94077157498 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -1536,6 +1536,11 @@ void EditorInspectorSection::fold() { queue_redraw(); } +void EditorInspectorSection::set_bg_color(const Color &p_bg_color) { + bg_color = p_bg_color; + queue_redraw(); +} + bool EditorInspectorSection::has_revertable_properties() const { return !revertable_properties.is_empty(); } diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index e9a4eaec309..d6a7f1df19e 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -298,6 +298,7 @@ public: VBoxContainer *get_vbox(); void unfold(); void fold(); + void set_bg_color(const Color &p_bg_color); bool has_revertable_properties() const; void property_can_revert_changed(const String &p_path, bool p_can_revert); diff --git a/editor/plugins/skeleton_3d_editor_plugin.cpp b/editor/plugins/skeleton_3d_editor_plugin.cpp index 0cfeacc9b18..90f054275a4 100644 --- a/editor/plugins/skeleton_3d_editor_plugin.cpp +++ b/editor/plugins/skeleton_3d_editor_plugin.cpp @@ -696,9 +696,6 @@ void Skeleton3DEditor::update_joint_tree() { } } -void Skeleton3DEditor::update_editors() { -} - void Skeleton3DEditor::create_editors() { set_h_size_flags(SIZE_EXPAND_FILL); set_focus_mode(FOCUS_ALL); @@ -798,10 +795,8 @@ void Skeleton3DEditor::create_editors() { animation_hb->add_child(key_insert_all_button); // Bone tree. - const Color section_color = get_theme_color(SNAME("prop_subsection"), SNAME("Editor")); - - EditorInspectorSection *bones_section = memnew(EditorInspectorSection); - bones_section->setup("bones", "Bones", skeleton, section_color, true); + bones_section = memnew(EditorInspectorSection); + bones_section->setup("bones", "Bones", skeleton, Color(0.0f, 0.0, 0.0f), true); add_child(bones_section); bones_section->unfold(); @@ -832,7 +827,6 @@ void Skeleton3DEditor::create_editors() { void Skeleton3DEditor::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - create_editors(); update_joint_tree(); joint_tree->connect("item_selected", callable_mp(this, &Skeleton3DEditor::_joint_tree_selection_changed)); @@ -858,6 +852,7 @@ void Skeleton3DEditor::_notification(int p_what) { key_scale_button->set_icon(get_theme_icon(SNAME("KeyScale"), SNAME("EditorIcons"))); key_insert_button->set_icon(get_theme_icon(SNAME("Key"), SNAME("EditorIcons"))); key_insert_all_button->set_icon(get_theme_icon(SNAME("NewKey"), SNAME("EditorIcons"))); + bones_section->set_bg_color(get_theme_color(SNAME("prop_subsection"), SNAME("Editor"))); update_joint_tree(); } break; @@ -946,6 +941,8 @@ void fragment() { handles_mesh_instance->set_cast_shadows_setting(GeometryInstance3D::SHADOW_CASTING_SETTING_OFF); handles_mesh.instantiate(); handles_mesh_instance->set_mesh(handles_mesh); + + create_editors(); } void Skeleton3DEditor::update_bone_original() { diff --git a/editor/plugins/skeleton_3d_editor_plugin.h b/editor/plugins/skeleton_3d_editor_plugin.h index 7b924d1e9b2..8168e02e3e0 100644 --- a/editor/plugins/skeleton_3d_editor_plugin.h +++ b/editor/plugins/skeleton_3d_editor_plugin.h @@ -132,6 +132,8 @@ class Skeleton3DEditor : public VBoxContainer { Button *key_insert_button = nullptr; Button *key_insert_all_button = nullptr; + EditorInspectorSection *bones_section = nullptr; + EditorFileDialog *file_dialog = nullptr; bool keyable = false; @@ -146,7 +148,6 @@ class Skeleton3DEditor : public VBoxContainer { EditorFileDialog *file_export_lib = nullptr; void update_joint_tree(); - void update_editors(); void create_editors();