diff --git a/modules/juce_gui_basics/widgets/juce_Slider.cpp b/modules/juce_gui_basics/widgets/juce_Slider.cpp index eaf820b5b7..0c20e34426 100644 --- a/modules/juce_gui_basics/widgets/juce_Slider.cpp +++ b/modules/juce_gui_basics/widgets/juce_Slider.cpp @@ -448,12 +448,14 @@ public: } void setVelocityModeParameters (double sensitivity, int threshold, - double offset, bool userCanPressKeyToSwapMode) + double offset, bool userCanPressKeyToSwapMode, + ModifierKeys::Flags newModifierToSwapModes) { velocityModeSensitivity = sensitivity; velocityModeOffset = offset; velocityModeThreshold = threshold; userKeyOverridesVelocity = userCanPressKeyToSwapMode; + modifierToSwapModes = newModifierToSwapModes; } void setSkewFactorFromMidPoint (double sliderValueToShowAtMidPoint) @@ -545,7 +547,8 @@ public: : owner.getTextFromValue (currentValue.getValue())); valueBox.reset(); - owner.addAndMakeVisible (valueBox = lf.createSliderTextBox (owner)); + valueBox.reset (lf.createSliderTextBox (owner)); + owner.addAndMakeVisible (valueBox.get()); valueBox->setWantsKeyboardFocus (false); valueBox->setText (previousTextBoxContent, dontSendNotification); @@ -566,10 +569,13 @@ public: if (style == IncDecButtons) { - owner.addAndMakeVisible (incButton = lf.createSliderButton (owner, true)); - incButton->onClick = [this] { incrementOrDecrement (interval); }; + incButton.reset (lf.createSliderButton (owner, true)); + decButton.reset (lf.createSliderButton (owner, false)); + + owner.addAndMakeVisible (incButton.get()); + owner.addAndMakeVisible (decButton.get()); - owner.addAndMakeVisible (decButton = lf.createSliderButton (owner, false)); + incButton->onClick = [this] { incrementOrDecrement (interval); }; decButton->onClick = [this] { incrementOrDecrement (-interval); }; if (incDecButtonMode != incDecButtonsNotDraggable) @@ -840,7 +846,7 @@ public: popupDisplay->stopTimer(); } - currentDrag = new DragInProgress (*this); + currentDrag.reset (new DragInProgress (*this)); mouseDrag (e); } } @@ -979,10 +985,10 @@ public: if (popupDisplay == nullptr) { - popupDisplay = new PopupDisplayComponent (owner); + popupDisplay.reset (new PopupDisplayComponent (owner)); if (parentForPopupDisplay != nullptr) - parentForPopupDisplay->addChildComponent (popupDisplay); + parentForPopupDisplay->addChildComponent (popupDisplay.get()); else popupDisplay->addToDesktop (ComponentPeer::windowIsTemporary); @@ -1079,8 +1085,7 @@ public: bool isAbsoluteDragMode (ModifierKeys mods) const { - return isVelocityBased == (userKeyOverridesVelocity - && mods.testFlags (ModifierKeys::ctrlAltCommandModifiers)); + return isVelocityBased == (userKeyOverridesVelocity && mods.testFlags (modifierToSwapModes)); } void restoreMouseIfHidden() @@ -1239,6 +1244,7 @@ public: int numDecimalPlaces = 7; int textBoxWidth = 80, textBoxHeight = 20; IncDecButtonMode incDecButtonMode = incDecButtonsNotDraggable; + ModifierKeys::Flags modifierToSwapModes = ModifierKeys::ctrlAltCommandModifiers; bool editableText = true; bool doubleClickToValue = false; @@ -1312,7 +1318,7 @@ public: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PopupDisplayComponent) }; - ScopedPointer popupDisplay; + std::unique_ptr popupDisplay; Component* parentForPopupDisplay = nullptr; //============================================================================== @@ -1376,8 +1382,7 @@ void Slider::setRotaryParameters (RotaryParameters p) noexcept void Slider::setRotaryParameters (float startAngleRadians, float endAngleRadians, bool stopAtEnd) noexcept { - RotaryParameters p = { startAngleRadians, endAngleRadians, stopAtEnd }; - setRotaryParameters (p); + setRotaryParameters ({ startAngleRadians, endAngleRadians, stopAtEnd }); } Slider::RotaryParameters Slider::getRotaryParameters() const noexcept @@ -1392,13 +1397,16 @@ int Slider::getVelocityThreshold() const noexcept { return pimpl->velo double Slider::getVelocitySensitivity() const noexcept { return pimpl->velocityModeSensitivity; } double Slider::getVelocityOffset() const noexcept { return pimpl->velocityModeOffset; } -void Slider::setVelocityModeParameters (double sensitivity, int threshold, double offset, bool userCanPressKeyToSwapMode) +void Slider::setVelocityModeParameters (double sensitivity, int threshold, + double offset, bool userCanPressKeyToSwapMode, + ModifierKeys::Flags modifierToSwapModes) { jassert (threshold >= 0); jassert (sensitivity > 0); jassert (offset >= 0); - pimpl->setVelocityModeParameters (sensitivity, threshold, offset, userCanPressKeyToSwapMode); + pimpl->setVelocityModeParameters (sensitivity, threshold, offset, + userCanPressKeyToSwapMode, modifierToSwapModes); } double Slider::getSkewFactor() const noexcept { return pimpl->skewFactor; } @@ -1535,7 +1543,7 @@ String Slider::getTextFromValue (double v) double Slider::getValueFromText (const String& text) { - String t (text.trimStart()); + auto t = text.trimStart(); if (t.endsWith (getTextValueSuffix())) t = t.substring (0, t.length() - getTextValueSuffix().length()); diff --git a/modules/juce_gui_basics/widgets/juce_Slider.h b/modules/juce_gui_basics/widgets/juce_Slider.h index c87f387f37..791c7951c0 100644 --- a/modules/juce_gui_basics/widgets/juce_Slider.h +++ b/modules/juce_gui_basics/widgets/juce_Slider.h @@ -211,11 +211,14 @@ public: the threshold is reached @param userCanPressKeyToSwapMode if true, then the user can hold down the ctrl or command key to toggle velocity-sensitive mode + @param modifiersToSwapModes this is a set of modifier flags which will be tested when determining + whether to enable/disable velocity-sensitive mode */ void setVelocityModeParameters (double sensitivity = 1.0, int threshold = 1, double offset = 0.0, - bool userCanPressKeyToSwapMode = true); + bool userCanPressKeyToSwapMode = true, + ModifierKeys::Flags modifiersToSwapModes = ModifierKeys::ctrlAltCommandModifiers); /** Returns the velocity sensitivity setting. @see setVelocityModeParameters