diff options
author | Silc Renew <tokage.it.lab@gmail.com> | 2023-02-11 20:39:02 +0900 |
---|---|---|
committer | Silc Renew <tokage.it.lab@gmail.com> | 2023-02-11 20:48:18 +0900 |
commit | 4c5bd4cb0acf25c082f0bdcd8f37e1903adab5cf (patch) | |
tree | 5b43a0a779fe27a0baa01c74cd9cca53886ab4ab /editor | |
parent | c1f556c85d31593181d44ed71e323a711f75871f (diff) |
Fix weird bezier edit button update timing in AnimationTrackEditor
Diffstat (limited to 'editor')
-rw-r--r-- | editor/animation_track_editor.cpp | 34 | ||||
-rw-r--r-- | editor/animation_track_editor.h | 1 |
2 files changed, 22 insertions, 13 deletions
diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 3233bd79d5..f33fd1d4dd 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -2003,7 +2003,6 @@ void AnimationTrackEdit::_notification(int p_what) { draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2)); update_mode_rect.size.x += down_icon->get_width(); } else if (animation->track_get_type(track) == Animation::TYPE_BEZIER) { - Ref<Texture2D> bezier_icon = get_theme_icon(SNAME("EditBezier"), SNAME("EditorIcons")); update_mode_rect.size.x += down_icon->get_width(); update_mode_rect = Rect2(); } else { @@ -3311,25 +3310,15 @@ void AnimationTrackEditor::set_animation(const Ref<Animation> &p_anim, bool p_re snap->set_disabled(false); snap_mode->set_disabled(false); - bezier_edit_icon->set_disabled(true); - imported_anim_warning->hide(); - bool import_warning_done = false; - bool bezier_done = false; for (int i = 0; i < animation->get_track_count(); i++) { if (animation->track_is_imported(i)) { imported_anim_warning->show(); - import_warning_done = true; - } - if (animation->track_get_type(i) == Animation::TrackType::TYPE_BEZIER) { - bezier_edit_icon->set_disabled(false); - bezier_done = true; - } - if (import_warning_done && bezier_done) { break; } } + _check_bezier_exist(); } else { hscroll->hide(); edit->set_disabled(true); @@ -3343,6 +3332,24 @@ void AnimationTrackEditor::set_animation(const Ref<Animation> &p_anim, bool p_re } } +void AnimationTrackEditor::_check_bezier_exist() { + bool is_exist = false; + for (int i = 0; i < animation->get_track_count(); i++) { + if (animation->track_get_type(i) == Animation::TrackType::TYPE_BEZIER) { + is_exist = true; + break; + } + } + if (is_exist) { + bezier_edit_icon->set_disabled(false); + } else { + if (bezier_edit->is_visible()) { + _cancel_bezier_edit(); + } + bezier_edit_icon->set_disabled(true); + } +} + Ref<Animation> AnimationTrackEditor::get_current_animation() const { return animation; } @@ -4490,6 +4497,8 @@ void AnimationTrackEditor::_animation_changed() { return; // All will be updated, don't bother with anything. } + _check_bezier_exist(); + if (key_edit) { if (key_edit->setting) { // If editing a key, just redraw the edited track, makes refresh less costly. @@ -4710,7 +4719,6 @@ void AnimationTrackEditor::_new_track_node_selected(NodePath p_path) { adding_track_path = path_to; prop_selector->set_type_filter(filter); prop_selector->select_property_from_instance(node); - bezier_edit_icon->set_disabled(false); } break; case Animation::TYPE_AUDIO: { if (!node->is_class("AudioStreamPlayer") && !node->is_class("AudioStreamPlayer2D") && !node->is_class("AudioStreamPlayer3D")) { diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index 2a59bda2a4..c733f397e3 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -399,6 +399,7 @@ class AnimationTrackEditor : public VBoxContainer { void _update_tracks(); void _redraw_tracks(); void _redraw_groups(); + void _check_bezier_exist(); void _name_limit_changed(); void _timeline_changed(float p_new_pos, bool p_drag, bool p_timeline_only); |