diff --git a/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h b/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h index e29bc73ccd..481e2be7ee 100644 --- a/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h +++ b/modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h @@ -56,6 +56,13 @@ namespace AnimatedPositionBehaviours damping = 1.0 - newFriction; } + /** Sets the minimum velocity of the movement. Any velocity that's slower than + this will stop the animation. The default is 0.05. */ + void setMinimumVelocity (double newMinimumVelocityToUse) noexcept + { + minimumVelocity = newMinimumVelocityToUse; + } + /** Called by the AnimatedPosition class. This tells us the position and velocity at which the user is about to release the object. The velocity is measured in units/second. @@ -72,7 +79,7 @@ namespace AnimatedPositionBehaviours { velocity *= damping; - if (std::abs (velocity) < 0.05) + if (std::abs (velocity) < minimumVelocity) velocity = 0; return oldPos + velocity * elapsedSeconds; @@ -87,7 +94,7 @@ namespace AnimatedPositionBehaviours } private: - double velocity = 0, damping = 0.92; + double velocity = 0, damping = 0.92, minimumVelocity = 0.05; }; //============================================================================== diff --git a/modules/juce_gui_basics/layout/juce_Viewport.cpp b/modules/juce_gui_basics/layout/juce_Viewport.cpp index eae3b6bb52..aaebbb3249 100644 --- a/modules/juce_gui_basics/layout/juce_Viewport.cpp +++ b/modules/juce_gui_basics/layout/juce_Viewport.cpp @@ -191,6 +191,8 @@ struct Viewport::DragToScrollListener : private MouseListener, viewport.contentHolder.addMouseListener (this, true); offsetX.addListener (this); offsetY.addListener (this); + offsetX.behaviour.setMinimumVelocity (60); + offsetY.behaviour.setMinimumVelocity (60); } ~DragToScrollListener() @@ -209,6 +211,8 @@ struct Viewport::DragToScrollListener : private MouseListener, if (doesMouseEventComponentBlockViewportDrag (e.eventComponent)) isViewportDragBlocked = true; + offsetX.setPosition (offsetX.getPosition()); + offsetY.setPosition (offsetY.getPosition()); ++numTouches; }