From d989bdcc590c49dc373b9bb2cef97f6ee1de3322 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 20 Oct 2021 14:56:12 +0100 Subject: [PATCH] Add stubs for host-exposed parameters; Move app scenes to DSP Signed-off-by: falkTX --- src/CardinalPlugin.cpp | 42 +++++++++++++++++++++++++++++++++++------- src/CardinalUI.cpp | 21 ++++----------------- src/PluginContext.hpp | 2 ++ 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index f2d9134..99d3d6d 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -129,7 +129,7 @@ class CardinalPlugin : public CardinalBasePlugin rack::audio::Device* fCurrentDevice; Mutex fDeviceMutex; - float fParameters[kWindowParameterCount]; + float fParameters[kModuleParameters + kWindowParameterCount]; struct ScopedContext { const MutexLocker cml; @@ -148,17 +148,19 @@ class CardinalPlugin : public CardinalBasePlugin public: CardinalPlugin() - : CardinalBasePlugin(kWindowParameterCount, 0, 1), + : CardinalBasePlugin(kModuleParameters + kWindowParameterCount, 0, 1), fContext(new CardinalPluginContext(this)), fAudioBufferIn(nullptr), fAudioBufferOut(nullptr), fIsActive(false), fCurrentDevice(nullptr) { - fParameters[kWindowParameterCableOpacity] = 50.0f; - fParameters[kWindowParameterCableTension] = 50.0f; - fParameters[kWindowParameterRackBrightness] = 100.0f; - fParameters[kWindowParameterHaloBrightness] = 25.0f; + std::memset(fParameters, 0, sizeof(fParameters)); + + fParameters[kModuleParameters + kWindowParameterCableOpacity] = 50.0f; + fParameters[kModuleParameters + kWindowParameterCableTension] = 50.0f; + fParameters[kModuleParameters + kWindowParameterRackBrightness] = 100.0f; + fParameters[kModuleParameters + kWindowParameterHaloBrightness] = 25.0f; // create unique temporary path for this instance try { @@ -186,6 +188,11 @@ public: fContext->patch = new rack::patch::Manager; fContext->patch->autosavePath = fAutosavePath; fContext->patch->templatePath = CARDINAL_PLUGIN_SOURCE_DIR DISTRHO_OS_SEP_STR "template.vcv"; + + fContext->event = new rack::widget::EventState; + fContext->scene = new rack::app::Scene; + fContext->event->rootWidget = fContext->scene; + fContext->patch->loadTemplate(); fContext->engine->startFallbackThread(); } @@ -194,6 +201,13 @@ public: { { const ScopedContext sc(this); + /* + delete fContext->scene; + fContext->scene = nullptr; + + delete fContext->event; + fContext->event = nullptr; + */ delete fContext; } @@ -285,7 +299,21 @@ protected: void initParameter(const uint32_t index, Parameter& parameter) override { - switch (index) + if (index < kModuleParameters) + { + parameter.name = "Parameter "; + parameter.name += String(index + 1); + parameter.symbol = "param_"; + parameter.symbol += String(index + 1); + parameter.unit = "v"; + parameter.hints = kParameterIsAutomable; + parameter.ranges.def = 0.0f; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 10.0f; + return; + } + + switch (index - kModuleParameters) { case kWindowParameterCableOpacity: parameter.name = "Cable Opacity"; diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 3952e83..c47da0d 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -100,10 +100,6 @@ public: { const ScopedContext sc(this); - fContext->event = new rack::widget::EventState; - fContext->scene = new rack::app::Scene; - fContext->event->rootWidget = fContext->scene; - rack::window::WindowInit(fContext->window, this); // Hide non-wanted menu entries @@ -143,12 +139,6 @@ public: } } } - - // we need to reload current patch for things to show on screen :( - // FIXME always save - if (! fContext->patch->hasAutosave()) - fContext->patch->saveAutosave(); - fContext->patch->loadAutosave(); } WindowParametersSetCallback(fContext->window, this); @@ -160,12 +150,6 @@ public: delete fContext->window; fContext->window = nullptr; - - delete fContext->scene; - fContext->scene = nullptr; - - delete fContext->event; - fContext->event = nullptr; } void onNanoDisplay() override @@ -218,7 +202,10 @@ protected: */ void parameterChanged(const uint32_t index, const float value) override { - switch (index) + if (index < kModuleParameters) + return; + + switch (index - kModuleParameters) { case kWindowParameterCableOpacity: fWindowParameters.cableOpacity = value / 100.0f; diff --git a/src/PluginContext.hpp b/src/PluginContext.hpp index bcbf6c2..6b62074 100644 --- a/src/PluginContext.hpp +++ b/src/PluginContext.hpp @@ -31,6 +31,8 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------------------------------------------- +static constexpr const uint kModuleParameters = 24; + class CardinalBasePlugin : public Plugin { public: CardinalBasePlugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCount)