From 84849f8808b9ddb77464d846adb8d2ffe5b8eb3f Mon Sep 17 00:00:00 2001 From: reuk Date: Sat, 17 Aug 2019 12:37:18 +0100 Subject: [PATCH] APVTS: Fix apvts parameter update recursion --- .../utilities/juce_AudioProcessorValueTreeState.cpp | 7 ++++++- .../utilities/juce_AudioProcessorValueTreeState.h | 12 +++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp index 681d3e0f04..ad36c5aa0d 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp @@ -71,7 +71,9 @@ void AudioProcessorValueTreeState::Parameter::valueChanged (float newValue) return; lastValue = newValue; - sendValueChangedMessageToListeners (newValue); + + if (onValueChanged != nullptr) + onValueChanged(); } //============================================================================== @@ -87,6 +89,9 @@ public: unnormalisedValue (getRange().convertFrom0to1 (parameter.getDefaultValue())) { parameter.addListener (this); + + if (auto* ptr = dynamic_cast (¶meter)) + ptr->onValueChanged = [this] { parameterValueChanged ({}, {}); }; } ~ParameterAdapter() override { parameter.removeListener (this); } diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h index a0cc2b0e0f..f1ee8a434a 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h @@ -362,6 +362,10 @@ public: UndoManager* const undoManager; //============================================================================== +private: + class ParameterAdapter; + +public: /** A parameter class that maintains backwards compatibility with deprecated AudioProcessorValueTreeState functionality. @@ -416,9 +420,13 @@ public: private: void valueChanged (float) override; + std::function onValueChanged; + const float unsnappedDefault; const bool metaParameter, automatable, discrete, boolean; - float lastValue = 0.0f; + float lastValue = -1.0f; + + friend class AudioProcessorValueTreeState::ParameterAdapter; }; //============================================================================== @@ -523,8 +531,6 @@ private: bool, bool, bool, AudioProcessorParameter::Category, bool)); //============================================================================== - class ParameterAdapter; - #if JUCE_UNIT_TESTS friend struct ParameterAdapterTests; #endif