浏览代码

Fix AnimationTrack mouse wheel zooming at low zoom level

jmb462 3 年之前
父节点
当前提交
64ca6a0696
共有 1 个文件被更改,包括 12 次插入6 次删除
  1. 12 6
      editor/animation_track_editor.cpp

+ 12 - 6
editor/animation_track_editor.cpp

@@ -1844,11 +1844,14 @@ void AnimationTimelineEdit::_pan_callback(Vector2 p_scroll_vec) {
 }
 
 void AnimationTimelineEdit::_zoom_callback(Vector2 p_scroll_vec, Vector2 p_origin, bool p_alt) {
-	if (p_scroll_vec.y < 0) {
-		get_zoom()->set_value(get_zoom()->get_value() * 1.05);
+	double new_zoom_value;
+	double current_zoom_value = get_zoom()->get_value();
+	if (current_zoom_value <= 0.1) {
+		new_zoom_value = MAX(0.01, current_zoom_value - 0.01 * SIGN(p_scroll_vec.y));
 	} else {
-		get_zoom()->set_value(get_zoom()->get_value() / 1.05);
+		new_zoom_value = p_scroll_vec.y > 0 ? MAX(0.01, current_zoom_value / 1.05) : current_zoom_value * 1.05;
 	}
+	get_zoom()->set_value(new_zoom_value);
 }
 
 void AnimationTimelineEdit::set_use_fps(bool p_use_fps) {
@@ -5332,11 +5335,14 @@ void AnimationTrackEditor::_pan_callback(Vector2 p_scroll_vec) {
 }
 
 void AnimationTrackEditor::_zoom_callback(Vector2 p_scroll_vec, Vector2 p_origin, bool p_alt) {
-	if (p_scroll_vec.y < 0) {
-		timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() * 1.05);
+	double new_zoom_value;
+	double current_zoom_value = timeline->get_zoom()->get_value();
+	if (current_zoom_value <= 0.1) {
+		new_zoom_value = MAX(0.01, current_zoom_value - 0.01 * SIGN(p_scroll_vec.y));
 	} else {
-		timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() / 1.05);
+		new_zoom_value = p_scroll_vec.y > 0 ? MAX(0.01, current_zoom_value / 1.05) : current_zoom_value * 1.05;
 	}
+	timeline->get_zoom()->set_value(new_zoom_value);
 }
 
 void AnimationTrackEditor::_cancel_bezier_edit() {