diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-09-02 22:12:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-02 22:12:25 +0200 |
commit | e2060503801945299036de578746c77c6e91acf1 (patch) | |
tree | 9f927ff2be87761c8021d53f6aed39fabc52a69c | |
parent | 413db5d8ff3272b6e994f8323971876dac0f71e4 (diff) | |
parent | f07fc5b434e24cf124752687803eef4ceb9dbb91 (diff) |
Merge pull request #31890 from Calinou/curve-editor-add-snapping
Implement snapping in the Curve editor
-rw-r--r-- | editor/plugins/curve_editor_plugin.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index 5d3cef4c34..c2b6031e60 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -167,10 +167,20 @@ void CurveEditor::on_gui_input(const Ref<InputEvent> &p_event) { _has_undo_data = true; } + const float curve_amplitude = curve.get_max_value() - curve.get_min_value(); + // Snap to "round" coordinates when holding Ctrl. + // Be more precise when holding Shift as well. + float snap_threshold; + if (mm.get_control()) { + snap_threshold = mm.get_shift() ? 0.025 : 0.1; + } else { + snap_threshold = 0.0; + } + if (_selected_tangent == TANGENT_NONE) { // Drag point - Vector2 point_pos = get_world_pos(mpos); + Vector2 point_pos = get_world_pos(mpos).snapped(Vector2(snap_threshold, snap_threshold * curve_amplitude)); int i = curve.set_point_offset(_selected_point, point_pos.x); // The index may change if the point is dragged across another one @@ -188,8 +198,8 @@ void CurveEditor::on_gui_input(const Ref<InputEvent> &p_event) { } else { // Drag tangent - Vector2 point_pos = curve.get_point_position(_selected_point); - Vector2 control_pos = get_world_pos(mpos); + const Vector2 point_pos = curve.get_point_position(_selected_point); + const Vector2 control_pos = get_world_pos(mpos).snapped(Vector2(snap_threshold, snap_threshold * curve_amplitude)); Vector2 dir = (control_pos - point_pos).normalized(); |