diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp index cd892164d7..39dc1c50b9 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp @@ -1844,6 +1844,7 @@ private: #endif component = nullptr; + lastReportedSize.reset(); } #if JUCE_LINUX || JUCE_BSD @@ -1855,32 +1856,33 @@ private: tresult PLUGIN_API onSize (ViewRect* newSize) override { - if (newSize != nullptr) + if (newSize == nullptr) { - rect = convertFromHostBounds (*newSize); - - if (component != nullptr) - { - component->setSize (rect.getWidth(), rect.getHeight()); - - #if JUCE_MAC - if (cubase10Workaround != nullptr) - { - cubase10Workaround->triggerAsyncUpdate(); - } - else - #endif - { - if (auto* peer = component->getPeer()) - peer->updateBounds(); - } - } - - return kResultTrue; + jassertfalse; + return kResultFalse; } - jassertfalse; - return kResultFalse; + lastReportedSize.reset(); + rect = convertFromHostBounds (*newSize); + + if (component == nullptr) + return kResultTrue; + + component->setSize (rect.getWidth(), rect.getHeight()); + + #if JUCE_MAC + if (cubase10Workaround != nullptr) + { + cubase10Workaround->triggerAsyncUpdate(); + } + else + #endif + { + if (auto* peer = component->getPeer()) + peer->updateBounds(); + } + + return kResultTrue; } tresult PLUGIN_API getSize (ViewRect* size) override @@ -1890,15 +1892,16 @@ private: return kResultFalse; #endif - if (size != nullptr && component != nullptr) - { - auto editorBounds = component->getSizeToContainChild(); + if (size == nullptr || component == nullptr) + return kResultFalse; - *size = convertToHostBounds ({ 0, 0, editorBounds.getWidth(), editorBounds.getHeight() }); - return kResultTrue; - } + const auto editorBounds = component->getSizeToContainChild(); + const auto sizeToReport = lastReportedSize.has_value() + ? *lastReportedSize + : convertToHostBounds ({ 0, 0, editorBounds.getWidth(), editorBounds.getHeight() }); - return kResultFalse; + lastReportedSize = *size = sizeToReport; + return kResultTrue; } tresult PLUGIN_API canResize() override @@ -2275,6 +2278,7 @@ private: //============================================================================== ScopedJuceInitialiser_GUI libraryInitialiser; + std::optional lastReportedSize; #if JUCE_LINUX || JUCE_BSD SharedResourcePointer messageThread;