diff options
-rw-r--r-- | editor/editor_spin_slider.cpp | 33 | ||||
-rw-r--r-- | editor/editor_spin_slider.h | 1 |
2 files changed, 21 insertions, 13 deletions
diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 0852a42794..5c1c5da9bc 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -56,6 +56,7 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { } else { grabbing_spinner_attempt = true; + grabbing_spinner_dist_cache = 0; grabbing_spinner = false; grabbing_spinner_mouse_pos = Input::get_singleton()->get_mouse_position(); } @@ -89,21 +90,27 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { if (grabbing_spinner_attempt) { - if (!grabbing_spinner) { + double diff_x = mm->get_relative().x; + if (mm->get_shift() && grabbing_spinner) { + diff_x *= 0.1; + } + grabbing_spinner_dist_cache += diff_x; + + if (!grabbing_spinner && ABS(grabbing_spinner_dist_cache) > 4) { Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED); grabbing_spinner = true; + } else { + if (mm->get_control() || updown_offset != -1) { + set_value(Math::round(get_value())); + if (ABS(grabbing_spinner_dist_cache) > 6) { + set_value(get_value() + SGN(grabbing_spinner_dist_cache)); + grabbing_spinner_dist_cache = 0; + } + } else { + set_value(get_value() + get_step() * grabbing_spinner_dist_cache * 10); + grabbing_spinner_dist_cache = 0; + } } - - double v = get_value(); - - double diff_x = mm->get_relative().x; - diff_x = Math::pow(ABS(diff_x), 1.8) * SGN(diff_x); - diff_x *= 0.1; - - v += diff_x * get_step(); - - set_value(v); - } else if (updown_offset != -1) { bool new_hover = (mm->get_position().x > updown_offset); if (new_hover != hover_updown) { @@ -336,7 +343,7 @@ EditorSpinSlider::EditorSpinSlider() { grabbing_spinner_attempt = false; grabbing_spinner = false; - + grabbing_spinner_dist_cache = 0; set_focus_mode(FOCUS_ALL); updown_offset = -1; hover_updown = false; diff --git a/editor/editor_spin_slider.h b/editor/editor_spin_slider.h index 37d8a5f128..000024be60 100644 --- a/editor/editor_spin_slider.h +++ b/editor/editor_spin_slider.h @@ -57,6 +57,7 @@ class EditorSpinSlider : public Range { bool grabbing_spinner; bool read_only; + float grabbing_spinner_dist_cache; Vector2 grabbing_spinner_mouse_pos; LineEdit *value_input; |