@@ -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; | ||||