You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Allow to abort SpinSlider value changes
This commit is contained in:
@@ -68,27 +68,15 @@ void EditorSpinSlider::gui_input(const Ref<InputEvent> &p_event) {
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
grabbing_spinner_attempt = true;
|
||||
grabbing_spinner_dist_cache = 0;
|
||||
pre_grab_value = get_value();
|
||||
grabbing_spinner = false;
|
||||
grabbing_spinner_mouse_pos = get_global_mouse_position();
|
||||
emit_signal("grabbed");
|
||||
_grab_start();
|
||||
}
|
||||
} else {
|
||||
if (grabbing_spinner_attempt) {
|
||||
if (grabbing_spinner) {
|
||||
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
|
||||
Input::get_singleton()->warp_mouse(grabbing_spinner_mouse_pos);
|
||||
queue_redraw();
|
||||
emit_signal("ungrabbed");
|
||||
} else {
|
||||
_focus_entered();
|
||||
}
|
||||
|
||||
grabbing_spinner = false;
|
||||
grabbing_spinner_attempt = false;
|
||||
}
|
||||
_grab_end();
|
||||
}
|
||||
} else if (mb->get_button_index() == MouseButton::RIGHT) {
|
||||
if (mb->is_pressed() && is_grabbing()) {
|
||||
_grab_end();
|
||||
set_value(pre_grab_value);
|
||||
}
|
||||
} else if (mb->get_button_index() == MouseButton::WHEEL_UP || mb->get_button_index() == MouseButton::WHEEL_DOWN) {
|
||||
if (grabber->is_visible()) {
|
||||
@@ -142,8 +130,47 @@ void EditorSpinSlider::gui_input(const Ref<InputEvent> &p_event) {
|
||||
}
|
||||
|
||||
Ref<InputEventKey> k = p_event;
|
||||
if (k.is_valid() && k->is_pressed() && k->is_action("ui_accept", true)) {
|
||||
_focus_entered();
|
||||
if (k.is_valid() && k->is_pressed()) {
|
||||
if (k->is_action("ui_accept", true)) {
|
||||
_focus_entered();
|
||||
} else if (is_grabbing()) {
|
||||
if (k->is_action("ui_cancel", true)) {
|
||||
_grab_end();
|
||||
set_value(pre_grab_value);
|
||||
}
|
||||
accept_event();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EditorSpinSlider::_grab_start() {
|
||||
grabbing_spinner_attempt = true;
|
||||
grabbing_spinner_dist_cache = 0;
|
||||
pre_grab_value = get_value();
|
||||
grabbing_spinner = false;
|
||||
grabbing_spinner_mouse_pos = get_global_mouse_position();
|
||||
emit_signal("grabbed");
|
||||
}
|
||||
|
||||
void EditorSpinSlider::_grab_end() {
|
||||
if (grabbing_spinner_attempt) {
|
||||
if (grabbing_spinner) {
|
||||
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
|
||||
Input::get_singleton()->warp_mouse(grabbing_spinner_mouse_pos);
|
||||
queue_redraw();
|
||||
grabbing_spinner = false;
|
||||
emit_signal("ungrabbed");
|
||||
} else {
|
||||
_focus_entered();
|
||||
}
|
||||
|
||||
grabbing_spinner_attempt = false;
|
||||
}
|
||||
|
||||
if (grabbing_grabber) {
|
||||
grabbing_grabber = false;
|
||||
mousewheel_over_grabber = false;
|
||||
emit_signal("ungrabbed");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,16 +200,25 @@ void EditorSpinSlider::_grabber_gui_input(const Ref<InputEvent> &p_event) {
|
||||
if (mb.is_valid() && mb->get_button_index() == MouseButton::LEFT) {
|
||||
if (mb->is_pressed()) {
|
||||
grabbing_grabber = true;
|
||||
pre_grab_value = get_value();
|
||||
if (!mousewheel_over_grabber) {
|
||||
grabbing_ratio = get_as_ratio();
|
||||
grabbing_from = grabber->get_transform().xform(mb->get_position()).x;
|
||||
}
|
||||
grab_focus();
|
||||
emit_signal("grabbed");
|
||||
} else {
|
||||
grabbing_grabber = false;
|
||||
mousewheel_over_grabber = false;
|
||||
emit_signal("ungrabbed");
|
||||
}
|
||||
} else if (mb.is_valid() && mb->get_button_index() == MouseButton::RIGHT) {
|
||||
if (mb->is_pressed() && grabbing_grabber) {
|
||||
grabbing_grabber = false;
|
||||
mousewheel_over_grabber = false;
|
||||
set_value(pre_grab_value);
|
||||
emit_signal("ungrabbed");
|
||||
}
|
||||
}
|
||||
|
||||
Ref<InputEventMouseMotion> mm = p_event;
|
||||
|
||||
Reference in New Issue
Block a user