Browse Source

Workaround for an order-of-deletion problem in the GenericAudioProcessorEditor when parameter lists change

tags/2021-05-28
jules 6 years ago
parent
commit
098827cc5e
1 changed files with 14 additions and 3 deletions
  1. +14
    -3
      modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp

+ 14
- 3
modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp View File

@@ -33,9 +33,9 @@ class ParameterListener : private AudioProcessorParameter::Listener,
{ {
public: public:
ParameterListener (AudioProcessor& proc, AudioProcessorParameter& param) ParameterListener (AudioProcessor& proc, AudioProcessorParameter& param)
: processor (proc), parameter (param)
: processor (proc), parameter (param), isLegacyParam (LegacyAudioParameter::isLegacy (&param))
{ {
if (LegacyAudioParameter::isLegacy (&parameter))
if (isLegacyParam)
processor.addListener (this); processor.addListener (this);
else else
parameter.addListener (this); parameter.addListener (this);
@@ -45,7 +45,7 @@ public:
~ParameterListener() override ~ParameterListener() override
{ {
if (LegacyAudioParameter::isLegacy (&parameter))
if (isLegacyParam)
processor.removeListener (this); processor.removeListener (this);
else else
parameter.removeListener (this); parameter.removeListener (this);
@@ -93,6 +93,7 @@ private:
AudioProcessor& processor; AudioProcessor& processor;
AudioProcessorParameter& parameter; AudioProcessorParameter& parameter;
Atomic<int> parameterValueHasChanged { 0 }; Atomic<int> parameterValueHasChanged { 0 };
const bool isLegacyParam;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterListener) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterListener)
}; };
@@ -498,6 +499,11 @@ public:
setSize (maxWidth, height); setSize (maxWidth, height);
} }
~ParametersPanel()
{
paramComponents.clear();
}
void paint (Graphics& g) override void paint (Graphics& g) override
{ {
g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId)); g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId));
@@ -535,6 +541,11 @@ struct GenericAudioProcessorEditor::Pimpl
view.setScrollBarsShown (true, false); view.setScrollBarsShown (true, false);
} }
~Pimpl()
{
view.setViewedComponent (nullptr, false);
}
void resize (Rectangle<int> size) void resize (Rectangle<int> size)
{ {
view.setBounds (size); view.setBounds (size);


Loading…
Cancel
Save