summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Locurcio <hugo.locurcio@hugo.pro>2019-09-02 13:35:42 +0200
committerHugo Locurcio <hugo.locurcio@hugo.pro>2019-09-02 13:37:27 +0200
commit98a0c2b20fe12deb61ca7eb805951b8b42b3b275 (patch)
tree349f72c9f49de84998fd85cf2d1a30edd09a209f
parent7e731bbce221c423340821f1801a4fe021138358 (diff)
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).
-rw-r--r--scene/gui/gradient_edit.cpp10
1 files 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<InputEvent> &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;