1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-31 03:00:05 +00:00

AudioPluginHost: Avoid assertion when reopening InternalPlugin editor

This commit is contained in:
reuk 2026-01-29 15:36:16 +00:00
parent 40368666db
commit 8840ac478b
No known key found for this signature in database

View file

@ -90,7 +90,6 @@ public:
double getTailLengthSeconds() const override { return inner->getTailLengthSeconds(); }
bool acceptsMidi() const override { return inner->acceptsMidi(); }
bool producesMidi() const override { return inner->producesMidi(); }
AudioProcessorEditor* createEditor() override { return inner->createEditor(); }
bool hasEditor() const override { return inner->hasEditor(); }
int getNumPrograms() override { return inner->getNumPrograms(); }
int getCurrentProgram() override { return inner->getCurrentProgram(); }
@ -102,6 +101,64 @@ public:
void getCurrentProgramStateInformation (juce::MemoryBlock& b) override { inner->getCurrentProgramStateInformation (b); }
void setCurrentProgramStateInformation (const void* d, int s) override { inner->setCurrentProgramStateInformation (d, s); }
AudioProcessorEditor* createEditor() override
{
class Decorator : public AudioProcessorEditor
{
public:
explicit Decorator (InternalPlugin& proc)
: AudioProcessorEditor (proc), self (proc)
{
addAndMakeVisible (*wrapped);
setOpaque (true);
setSize (wrapped->getWidth(), wrapped->getHeight());
}
~Decorator() override
{
self.editorBeingDeleted (this);
}
void paint (Graphics&) override {}
void resized() override
{
wrapped->setBounds (getLocalBounds());
}
void setControlHighlight (ParameterControlHighlightInfo info) override
{
wrapped->setControlHighlight (info);
}
int getControlParameterIndex (Component& c) override
{
return wrapped->getControlParameterIndex (c);
}
bool supportsHostMIDIControllerPresence (bool hostMIDIControllerIsAvailable) override
{
return wrapped->supportsHostMIDIControllerPresence (hostMIDIControllerIsAvailable);
}
void hostMIDIControllerIsAvailable (bool controllerIsAvailable) override
{
return wrapped->hostMIDIControllerIsAvailable (controllerIsAvailable);
}
bool wantsLayerBackedView() const override
{
return wrapped->wantsLayerBackedView();
}
private:
InternalPlugin& self;
std::unique_ptr<AudioProcessorEditor> wrapped { self.inner->createEditor() };
};
return new Decorator { *this };
}
void prepareToPlay (double sr, int bs) override
{
inner->setProcessingPrecision (getProcessingPrecision());