From 98a0c2b20fe12deb61ca7eb805951b8b42b3b275 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 2 Sep 2019 13:35:42 +0200 Subject: Implement snapping in the Gradient editor Holding Ctrl will snap the selected point's position by increments of 0.1. Holding Ctrl + Shift will snap by increments of 0.025 instead. The previous behavior is preserved when holding just Shift (snapping to other gradient points). --- scene/gui/gradient_edit.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scene/gui/gradient_edit.cpp b/scene/gui/gradient_edit.cpp index 75f5f79873..09ef6f26bf 100644 --- a/scene/gui/gradient_edit.cpp +++ b/scene/gui/gradient_edit.cpp @@ -241,9 +241,13 @@ void GradientEdit::_gui_input(const Ref &p_event) { float newofs = CLAMP(x / float(total_w), 0, 1); - //Snap to nearest point if holding shift - if (mm->get_shift()) { - float snap_threshold = 0.03; + // Snap to "round" coordinates if holding Ctrl. + // Be more precise if holding Shift as well + if (mm->get_control()) { + newofs = Math::stepify(newofs, mm->get_shift() ? 0.025 : 0.1); + } else if (mm->get_shift()) { + // Snap to nearest point if holding just Shift + const float snap_threshold = 0.03; float smallest_ofs = snap_threshold; bool found = false; int nearest_point = 0; -- cgit v1.2.3