Fix animation key snapping at high zooms

This commit is contained in:
Tomasz Chabora 2019-11-17 23:34:36 +01:00
parent 0a96235b44
commit e9802d9b02
2 changed files with 9 additions and 4 deletions

View File

@ -2026,7 +2026,7 @@ void AnimationTrackEdit::_notification(int p_what) {
float offset = animation->track_get_key_time(track, i) - timeline->get_value(); float offset = animation->track_get_key_time(track, i) - timeline->get_value();
if (editor->is_key_selected(track, i) && editor->is_moving_selection()) { if (editor->is_key_selected(track, i) && editor->is_moving_selection()) {
offset = editor->snap_time(offset + editor->get_moving_selection_offset()); offset = editor->snap_time(offset + editor->get_moving_selection_offset(), true);
} }
offset = offset * scale + limit; offset = offset * scale + limit;
if (i < animation->track_get_key_count(track) - 1) { if (i < animation->track_get_key_count(track) - 1) {
@ -5703,7 +5703,7 @@ void AnimationTrackEditor::_selection_changed() {
} }
} }
float AnimationTrackEditor::snap_time(float p_value) { float AnimationTrackEditor::snap_time(float p_value, bool p_relative) {
if (is_snap_enabled()) { if (is_snap_enabled()) {
@ -5713,7 +5713,12 @@ float AnimationTrackEditor::snap_time(float p_value) {
else else
snap_increment = step->get_value(); snap_increment = step->get_value();
p_value = Math::stepify(p_value, snap_increment); if (p_relative) {
double rel = Math::fmod(timeline->get_value(), snap_increment);
p_value = Math::stepify(p_value + rel, snap_increment) - rel;
} else {
p_value = Math::stepify(p_value, snap_increment);
}
} }
return p_value; return p_value;

View File

@ -521,7 +521,7 @@ public:
bool is_moving_selection() const; bool is_moving_selection() const;
bool is_snap_enabled() const; bool is_snap_enabled() const;
float get_moving_selection_offset() const; float get_moving_selection_offset() const;
float snap_time(float p_value); float snap_time(float p_value, bool p_relative = false);
bool is_grouping_tracks(); bool is_grouping_tracks();
MenuButton *get_edit_menu(); MenuButton *get_edit_menu();