From 9cfbb2082f199b9a3a3f4ec0c01297f8554b86f6 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 3 Sep 2018 09:28:40 +0100 Subject: [PATCH] VST3: Fixed a potential crash that could occur if a host sets the scale factor after closing the plug-in editor, and ensure that the last scale factor is re-used when opening the editor --- .../VST3/juce_VST3_Wrapper.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index 6c09602988..06b2e70547 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -844,6 +844,10 @@ private: macHostWindow = juce::attachComponentToWindowRefVST (component.get(), parent, isNSView); #endif + #if ! JUCE_MAC + setContentScaleFactor ((Steinberg::IPlugViewContentScaleSupport::ScaleFactor) scaleFactor); + #endif + component->resizeHostWindow(); systemWindow = parent; attachedToParent(); @@ -959,12 +963,17 @@ private: tresult PLUGIN_API setContentScaleFactor (Steinberg::IPlugViewContentScaleSupport::ScaleFactor factor) override { #if ! JUCE_MAC + scaleFactor = static_cast (factor); + + if (component == nullptr) + return kResultFalse; + #if JUCE_WINDOWS && ! JUCE_WIN_PER_MONITOR_DPI_AWARE if (auto* ed = component->pluginEditor.get()) - ed->setScaleFactor ((float) factor); + ed->setScaleFactor (scaleFactor); #else - if (! approximatelyEqual (component->getNativeEditorScaleFactor(), (float) factor)) - component->nativeScaleFactorChanged ((double) factor); + if (! approximatelyEqual (component->getNativeEditorScaleFactor(), scaleFactor)) + component->nativeScaleFactorChanged ((double) scaleFactor); #endif component->resizeHostWindow(); @@ -1198,6 +1207,8 @@ private: #if JUCE_MAC void* macHostWindow = nullptr; bool isNSView = false; + #else + float scaleFactor = 1.0f; #endif #if JUCE_WINDOWS