diff --git a/plugins/Cardinal/src/HostParameters.cpp b/plugins/Cardinal/src/HostParameters.cpp index 87cb8a3..5f26471 100644 --- a/plugins/Cardinal/src/HostParameters.cpp +++ b/plugins/Cardinal/src/HostParameters.cpp @@ -81,6 +81,20 @@ struct HostParameters : Module { } }; +#ifndef HEADLESS +struct CardinalParameterPJ301MPort : PJ301MPort { + void onDragStart(const DragStartEvent& e) override { + if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + handleHostParameterDrag(pcontext, portId, true); + PJ301MPort::onDragStart(e); + } + void onDragEnd(const DragEndEvent& e) override { + if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + handleHostParameterDrag(pcontext, portId, false); + PJ301MPort::onDragEnd(e); + } +}; + struct HostParametersWidget : ModuleWidget { static constexpr const float startX = 10.0f; static constexpr const float startY = 90.0f; @@ -101,7 +115,7 @@ struct HostParametersWidget : ModuleWidget { { const float x = startX + int(i / 6) * paddingH; const float y = startY + int(i % 6) * paddingV; - addOutput(createOutput(Vec(x, y), module, i)); + addOutput(createOutput(Vec(x, y), module, i)); } } @@ -139,5 +153,9 @@ struct HostParametersWidget : ModuleWidget { ModuleWidget::draw(args); } }; +#else +typedef ModuleWidget HostParametersWidget; +#endif + Model* modelHostParameters = createModel("HostParameters"); diff --git a/plugins/Cardinal/src/plugincontext.hpp b/plugins/Cardinal/src/plugincontext.hpp index 9de044c..0ede7a8 100644 --- a/plugins/Cardinal/src/plugincontext.hpp +++ b/plugins/Cardinal/src/plugincontext.hpp @@ -60,6 +60,10 @@ struct CardinalPluginContext : rack::Context { #endif }; +#ifndef HEADLESS +void handleHostParameterDrag(CardinalPluginContext* pcontext, uint index, bool started); +#endif + END_NAMESPACE_DISTRHO // ----------------------------------------------------------------------------------------------------------- diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 02be1ec..f0d1200 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -180,6 +180,21 @@ void CardinalPluginContext::removeIdleCallback(IdleCallback* const cb) ui->removeIdleCallback(cb); } +void handleHostParameterDrag(CardinalPluginContext* pcontext, uint index, bool started) +{ + DISTRHO_SAFE_ASSERT_RETURN(pcontext->ui != nullptr,); + + if (started) + { + pcontext->ui->editParameter(index, true); + pcontext->ui->setParameterValue(index, pcontext->parameters[index]); + } + else + { + pcontext->ui->editParameter(index, false); + } +} + // ----------------------------------------------------------------------------------------------------------- class CardinalUI : public CardinalBaseUI, diff --git a/src/PluginContext.hpp b/src/PluginContext.hpp index 83073db..4898c09 100644 --- a/src/PluginContext.hpp +++ b/src/PluginContext.hpp @@ -95,6 +95,10 @@ struct CardinalPluginContext : rack::Context { #endif }; +#ifndef HEADLESS +void handleHostParameterDrag(CardinalPluginContext* pcontext, uint index, bool started); +#endif + // ----------------------------------------------------------------------------------------------------------- struct CardinalAudioDevice;