| @@ -81,6 +81,20 @@ struct HostParameters : Module { | |||||
| } | } | ||||
| }; | }; | ||||
| #ifndef HEADLESS | |||||
| struct CardinalParameterPJ301MPort : PJ301MPort { | |||||
| void onDragStart(const DragStartEvent& e) override { | |||||
| if (CardinalPluginContext* const pcontext = reinterpret_cast<CardinalPluginContext*>(APP)) | |||||
| handleHostParameterDrag(pcontext, portId, true); | |||||
| PJ301MPort::onDragStart(e); | |||||
| } | |||||
| void onDragEnd(const DragEndEvent& e) override { | |||||
| if (CardinalPluginContext* const pcontext = reinterpret_cast<CardinalPluginContext*>(APP)) | |||||
| handleHostParameterDrag(pcontext, portId, false); | |||||
| PJ301MPort::onDragEnd(e); | |||||
| } | |||||
| }; | |||||
| struct HostParametersWidget : ModuleWidget { | struct HostParametersWidget : ModuleWidget { | ||||
| static constexpr const float startX = 10.0f; | static constexpr const float startX = 10.0f; | ||||
| static constexpr const float startY = 90.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 x = startX + int(i / 6) * paddingH; | ||||
| const float y = startY + int(i % 6) * paddingV; | const float y = startY + int(i % 6) * paddingV; | ||||
| addOutput(createOutput<PJ301MPort>(Vec(x, y), module, i)); | |||||
| addOutput(createOutput<CardinalParameterPJ301MPort>(Vec(x, y), module, i)); | |||||
| } | } | ||||
| } | } | ||||
| @@ -139,5 +153,9 @@ struct HostParametersWidget : ModuleWidget { | |||||
| ModuleWidget::draw(args); | ModuleWidget::draw(args); | ||||
| } | } | ||||
| }; | }; | ||||
| #else | |||||
| typedef ModuleWidget HostParametersWidget; | |||||
| #endif | |||||
| Model* modelHostParameters = createModel<HostParameters, HostParametersWidget>("HostParameters"); | Model* modelHostParameters = createModel<HostParameters, HostParametersWidget>("HostParameters"); | ||||
| @@ -60,6 +60,10 @@ struct CardinalPluginContext : rack::Context { | |||||
| #endif | #endif | ||||
| }; | }; | ||||
| #ifndef HEADLESS | |||||
| void handleHostParameterDrag(CardinalPluginContext* pcontext, uint index, bool started); | |||||
| #endif | |||||
| END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
| // ----------------------------------------------------------------------------------------------------------- | // ----------------------------------------------------------------------------------------------------------- | ||||
| @@ -180,6 +180,21 @@ void CardinalPluginContext::removeIdleCallback(IdleCallback* const cb) | |||||
| ui->removeIdleCallback(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, | class CardinalUI : public CardinalBaseUI, | ||||
| @@ -95,6 +95,10 @@ struct CardinalPluginContext : rack::Context { | |||||
| #endif | #endif | ||||
| }; | }; | ||||
| #ifndef HEADLESS | |||||
| void handleHostParameterDrag(CardinalPluginContext* pcontext, uint index, bool started); | |||||
| #endif | |||||
| // ----------------------------------------------------------------------------------------------------------- | // ----------------------------------------------------------------------------------------------------------- | ||||
| struct CardinalAudioDevice; | struct CardinalAudioDevice; | ||||