From 92c30e780d7f6fe3acbb2888b45735544dce80c5 Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Tue, 9 Apr 2019 16:08:51 +0100 Subject: [PATCH] Allowed linear-drag rotary sliders to rollover --- modules/juce_gui_basics/widgets/juce_Slider.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/juce_gui_basics/widgets/juce_Slider.cpp b/modules/juce_gui_basics/widgets/juce_Slider.cpp index 0cf10425a6..783dc6b8e5 100644 --- a/modules/juce_gui_basics/widgets/juce_Slider.cpp +++ b/modules/juce_gui_basics/widgets/juce_Slider.cpp @@ -775,7 +775,9 @@ public: newPos = 1.0 - newPos; } - valueWhenLastDragged = owner.proportionOfLengthToValue (jlimit (0.0, 1.0, newPos)); + newPos = (isRotary() && ! rotaryParams.stopAtEnd) ? newPos - std::floor (newPos) + : jlimit (0.0, 1.0, newPos); + valueWhenLastDragged = owner.proportionOfLengthToValue (newPos); } void handleVelocityDrag (const MouseEvent& e) @@ -806,8 +808,10 @@ public: || (style == IncDecButtons && ! incDecDragDirectionIsHorizontal())) speed = -speed; - auto currentPos = owner.valueToProportionOfLength (valueWhenLastDragged); - valueWhenLastDragged = owner.proportionOfLengthToValue (jlimit (0.0, 1.0, currentPos + speed)); + auto newPos = owner.valueToProportionOfLength (valueWhenLastDragged) + speed; + newPos = (isRotary() && ! rotaryParams.stopAtEnd) ? newPos - std::floor (newPos) + : jlimit (0.0, 1.0, newPos); + valueWhenLastDragged = owner.proportionOfLengthToValue (newPos); e.source.enableUnboundedMouseMovement (true, false); } @@ -1051,7 +1055,10 @@ public: auto proportionDelta = wheelAmount * 0.15; auto currentPos = owner.valueToProportionOfLength (value); - return owner.proportionOfLengthToValue (jlimit (0.0, 1.0, currentPos + proportionDelta)) - value; + auto newPos = currentPos + proportionDelta; + newPos = (isRotary() && ! rotaryParams.stopAtEnd) ? newPos - std::floor (newPos) + : jlimit (0.0, 1.0, newPos); + return owner.proportionOfLengthToValue (newPos) - value; } bool mouseWheelMove (const MouseEvent& e, const MouseWheelDetails& wheel)