diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 2a28b633c..8b38dabbe 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2952,9 +2952,12 @@ void GLCanvas3D::on_gesture(wxGestureEvent &evt) auto & camera = wxGetApp().plater()->get_camera(); if (evt.GetEventType() == wxEVT_GESTURE_PAN) { + auto p = evt.GetPosition(); auto d = static_cast(evt).GetDelta(); - Vec3d delta{(double) d.x, (double) d.y, 0}; - camera.set_target(camera.get_target() + delta); + float z = 0; + const Vec3d &p2 = _mouse_to_3d({p.x, p.y}, &z); + const Vec3d &p1 = _mouse_to_3d({p.x - d.x, p.y - d.y}, &z); + camera.set_target(camera.get_target() + p2 - p1); } else if (evt.GetEventType() == wxEVT_GESTURE_ZOOM) { static float zoom_start = 1; if (evt.IsGestureStart()) diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index b5572a4e0..de6808328 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -160,9 +160,10 @@ wxEvtHandler * _gestureHandler = nullptr; - (void) scrollWheel2:(NSEvent *)event { - if (_gestureHandler && event.hasPreciseScrollingDeltas) { + bool shiftDown = [event modifierFlags] & NSShiftKeyMask; + if (_gestureHandler && shiftDown && event.hasPreciseScrollingDeltas) { wxPanGestureEvent evt; - evt.SetDelta({-(int)[event scrollingDeltaX], (int)[event scrollingDeltaY]}); + evt.SetDelta({-(int)[event scrollingDeltaX], - (int)[event scrollingDeltaY]}); _gestureHandler->ProcessEvent(evt); } else { [self scrollWheel2: event];