Просмотр исходного кода

Release mouse when SpinBox leaves scene tree

kobewi 4 лет назад
Родитель
Сommit
83f6c6b360
2 измененных файлов с 12 добавлено и 6 удалено
  1. 11 6
      scene/gui/spin_box.cpp
  2. 1 0
      scene/gui/spin_box.h

+ 11 - 6
scene/gui/spin_box.cpp

@@ -91,6 +91,14 @@ void SpinBox::_range_click_timeout() {
 	}
 }
 
+void SpinBox::_release_mouse() {
+	if (drag.enabled) {
+		drag.enabled = false;
+		Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
+		warp_mouse(drag.capture_pos);
+	}
+}
+
 void SpinBox::_gui_input(const Ref<InputEvent> &p_event) {
 	if (!is_editable()) {
 		return;
@@ -136,12 +144,7 @@ void SpinBox::_gui_input(const Ref<InputEvent> &p_event) {
 	if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) {
 		//set_default_cursor_shape(CURSOR_ARROW);
 		range_click_timer->stop();
-
-		if (drag.enabled) {
-			drag.enabled = false;
-			Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
-			warp_mouse(drag.capture_pos);
-		}
+		_release_mouse();
 		drag.allowed = false;
 	}
 
@@ -199,6 +202,8 @@ void SpinBox::_notification(int p_what) {
 	} else if (p_what == NOTIFICATION_ENTER_TREE) {
 		_adjust_width_for_icon(get_theme_icon("updown"));
 		_value_changed(0);
+	} else if (p_what == NOTIFICATION_EXIT_TREE) {
+		_release_mouse();
 	} else if (p_what == NOTIFICATION_TRANSLATION_CHANGED) {
 		_value_changed(0);
 	} else if (p_what == NOTIFICATION_THEME_CHANGED) {

+ 1 - 0
scene/gui/spin_box.h

@@ -43,6 +43,7 @@ class SpinBox : public Range {
 
 	Timer *range_click_timer;
 	void _range_click_timeout();
+	void _release_mouse();
 
 	void _text_entered(const String &p_string);
 	virtual void _value_changed(double) override;