Explorar o código

spin_slider added ctrl and shift shrotcuts, removed exp dragging

toger5 %!s(int64=7) %!d(string=hai) anos
pai
achega
1706f636d7
Modificáronse 2 ficheiros con 21 adicións e 13 borrados
  1. 20 13
      editor/editor_spin_slider.cpp
  2. 1 0
      editor/editor_spin_slider.h

+ 20 - 13
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;

+ 1 - 0
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;