From 187bb61e7b87a3a17aa3f10761bd5aec955fde51 Mon Sep 17 00:00:00 2001 From: Mika Viskari Date: Tue, 28 Nov 2023 16:25:44 +0200 Subject: [PATCH] Fix horizontal mouse wheeling in 2D editor view --- scene/gui/view_panner.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/scene/gui/view_panner.cpp b/scene/gui/view_panner.cpp index fc03f2d887c..f36738ecae9 100644 --- a/scene/gui/view_panner.cpp +++ b/scene/gui/view_panner.cpp @@ -43,12 +43,14 @@ bool ViewPanner::gui_input(const Ref &p_event, Rect2 p_canvas_rect) if (scroll_vec != Vector2() && mb->is_pressed()) { if (control_scheme == SCROLL_PANS) { if (mb->is_ctrl_pressed()) { - // Compute the zoom factor. - float zoom_factor = mb->get_factor() <= 0 ? 1.0 : mb->get_factor(); - zoom_factor = ((scroll_zoom_factor - 1.0) * zoom_factor) + 1.0; - float zoom = (scroll_vec.x + scroll_vec.y) > 0 ? 1.0 / scroll_zoom_factor : scroll_zoom_factor; - zoom_callback.call(zoom, mb->get_position(), p_event); - return true; + if (scroll_vec.y != 0) { + // Compute the zoom factor. + float zoom_factor = mb->get_factor() <= 0 ? 1.0 : mb->get_factor(); + zoom_factor = ((scroll_zoom_factor - 1.0) * zoom_factor) + 1.0; + float zoom = scroll_vec.y > 0 ? 1.0 / scroll_zoom_factor : scroll_zoom_factor; + zoom_callback.call(zoom, mb->get_position(), p_event); + return true; + } } else { Vector2 panning = scroll_vec * mb->get_factor(); if (pan_axis == PAN_AXIS_HORIZONTAL) { @@ -73,11 +75,11 @@ bool ViewPanner::gui_input(const Ref &p_event, Rect2 p_canvas_rect) } pan_callback.call(-panning * scroll_speed, p_event); return true; - } else if (!mb->is_shift_pressed()) { + } else if (!mb->is_shift_pressed() && scroll_vec.y != 0) { // Compute the zoom factor. float zoom_factor = mb->get_factor() <= 0 ? 1.0 : mb->get_factor(); zoom_factor = ((scroll_zoom_factor - 1.0) * zoom_factor) + 1.0; - float zoom = (scroll_vec.x + scroll_vec.y) > 0 ? 1.0 / scroll_zoom_factor : scroll_zoom_factor; + float zoom = scroll_vec.y > 0 ? 1.0 / scroll_zoom_factor : scroll_zoom_factor; zoom_callback.call(zoom, mb->get_position(), p_event); return true; }