Fake parameter change when clicking host parameter module

This commit is contained in:
falkTX 2021-12-09 20:23:26 +00:00
parent 75aad04bb8
commit 28d3ca2d68
4 changed files with 42 additions and 1 deletions

View file

@ -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 {
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<PJ301MPort>(Vec(x, y), module, i));
addOutput(createOutput<CardinalParameterPJ301MPort>(Vec(x, y), module, i));
}
}
@ -139,5 +153,9 @@ struct HostParametersWidget : ModuleWidget {
ModuleWidget::draw(args);
}
};
#else
typedef ModuleWidget HostParametersWidget;
#endif
Model* modelHostParameters = createModel<HostParameters, HostParametersWidget>("HostParameters");

View file

@ -60,6 +60,10 @@ struct CardinalPluginContext : rack::Context {
#endif
};
#ifndef HEADLESS
void handleHostParameterDrag(CardinalPluginContext* pcontext, uint index, bool started);
#endif
END_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------------------------------------------

View file

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

View file

@ -95,6 +95,10 @@ struct CardinalPluginContext : rack::Context {
#endif
};
#ifndef HEADLESS
void handleHostParameterDrag(CardinalPluginContext* pcontext, uint index, bool started);
#endif
// -----------------------------------------------------------------------------------------------------------
struct CardinalAudioDevice;