Add movement threshold before activating viewport rotation gizmo dragging

This commit is contained in:
Robert Yevdokimov 2025-01-09 20:55:20 -05:00
parent abf8e1e6f9
commit 472cdb6da2
2 changed files with 5 additions and 1 deletions

View File

@ -424,7 +424,9 @@ void ViewportRotationControl::_process_click(int p_index, Vector2 p_position, bo
}
void ViewportRotationControl::_process_drag(Ref<InputEventWithModifiers> p_event, int p_index, Vector2 p_position, Vector2 p_relative_position) {
if (orbiting_index == p_index && gizmo_activated) {
Point2 mouse_pos = get_local_mouse_position();
const bool movement_threshold_passed = original_mouse_pos.distance_to(mouse_pos) > 4 * EDSCALE;
if (orbiting_index == p_index && gizmo_activated && movement_threshold_passed) {
if (Input::get_singleton()->get_mouse_mode() == Input::MOUSE_MODE_VISIBLE) {
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
orbiting_mouse_start = p_position;
@ -459,6 +461,7 @@ void ViewportRotationControl::gui_input(const Ref<InputEvent> &p_event) {
_process_click(100, mb->get_position(), mb->is_pressed());
if (mb->is_pressed()) {
gizmo_activated = true;
original_mouse_pos = get_local_mouse_position();
grab_focus();
}
} else if (mb->get_button_index() == MouseButton::RIGHT) {

View File

@ -83,6 +83,7 @@ class ViewportRotationControl : public Control {
Vector<Color> axis_colors;
Vector<int> axis_menu_options;
Vector2i orbiting_mouse_start;
Point2 original_mouse_pos;
int orbiting_index = -1;
int focused_axis = -2;
bool gizmo_activated = false;