From 03055c2563aff934a3b8358fcd2270ff64f10846 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 19 May 2023 00:18:25 +0200 Subject: [PATCH] Fix persistence settings for VST2/3 instances Signed-off-by: falkTX --- src/CardinalCommon.cpp | 49 ++++++++++++++++++++++++------------------ src/CardinalCommon.hpp | 1 + src/CardinalPlugin.cpp | 4 ++++ 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/CardinalCommon.cpp b/src/CardinalCommon.cpp index 6019f2a..80874ac 100644 --- a/src/CardinalCommon.cpp +++ b/src/CardinalCommon.cpp @@ -554,27 +554,7 @@ Initializer::Initializer(const CardinalBasePlugin* const plugin, const CardinalB INFO("Initializing plugin browser DB"); app::browserInit(); - if (isRealInstance) - { - INFO("Loading settings"); - settings::load(); - shouldSaveSettings = true; - } - - // enforce settings that do not make sense as anything else - settings::safeMode = false; - settings::token.clear(); - settings::windowMaximized = false; - settings::windowPos = math::Vec(0, 0); - settings::pixelRatio = 0.0; - settings::sampleRate = 0; - settings::threadCount = 1; - settings::frameSwapInterval = 1; - settings::autosaveInterval = 0; - settings::skipLoadOnLaunch = true; - settings::autoCheckUpdates = false; - settings::showTipsOnLaunch = false; - settings::tipIndex = -1; + loadSettings(isRealInstance); #ifdef CARDINAL_INIT_OSC_THREAD INFO("Initializing OSC Remote control"); @@ -636,6 +616,33 @@ Initializer::~Initializer() logger::destroy(); } +void Initializer::loadSettings(const bool isRealInstance) +{ + using namespace rack; + + if (isRealInstance) + { + INFO("Loading settings"); + settings::load(); + shouldSaveSettings = true; + } + + // enforce settings that do not make sense as anything else + settings::safeMode = false; + settings::token.clear(); + settings::windowMaximized = false; + settings::windowPos = math::Vec(0, 0); + settings::pixelRatio = 0.0; + settings::sampleRate = 0; + settings::threadCount = 1; + settings::frameSwapInterval = 1; + settings::autosaveInterval = 0; + settings::skipLoadOnLaunch = true; + settings::autoCheckUpdates = false; + settings::showTipsOnLaunch = false; + settings::tipIndex = -1; +} + // -------------------------------------------------------------------------------------------------------------------- END_NAMESPACE_DISTRHO diff --git a/src/CardinalCommon.hpp b/src/CardinalCommon.hpp index dcbe375..0d1d28e 100644 --- a/src/CardinalCommon.hpp +++ b/src/CardinalCommon.hpp @@ -104,6 +104,7 @@ struct Initializer Initializer(const CardinalBasePlugin* plugin, const CardinalBaseUI* ui); ~Initializer(); + void loadSettings(bool isRealInstance); }; #ifndef HEADLESS diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 407d2f1..db5ab1a 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -217,6 +217,10 @@ public: fNextExpectedFrame(0), fWasBypassed(false) { + // check if first time loading a real instance + if (!fInitializer->shouldSaveSettings && !isDummyInstance()) + fInitializer->loadSettings(true); + #if CARDINAL_VARIANT_MINI || !defined(HEADLESS) fWindowParameters[kWindowParameterShowTooltips] = rack::settings::tooltips ? 1.f : 0.f; fWindowParameters[kWindowParameterCableOpacity] = std::min(100.f, std::max(0.f, rack::settings::cableOpacity * 100));