Compare commits
1 commit
main
...
bhrebec/ex
Author | SHA1 | Date | |
---|---|---|---|
85b4b857c8 |
2 changed files with 42 additions and 23 deletions
|
@ -68,7 +68,7 @@ using CardinalDGL::IdleCallback;
|
|||
// --------------------------------------------------------------------------------------------------------------------
|
||||
// Cardinal specific context
|
||||
|
||||
static constexpr const uint32_t kModuleParameterCount = 24;
|
||||
static constexpr const uint32_t kModuleParameterCount = 512;
|
||||
|
||||
enum CardinalVariant {
|
||||
kCardinalVariantMain,
|
||||
|
|
|
@ -30,17 +30,18 @@ struct HostParameters : TerminalModule {
|
|||
NUM_INPUTS
|
||||
};
|
||||
enum OutputIds {
|
||||
NUM_OUTPUTS = kModuleParameterCount
|
||||
NUM_OUTPUTS = 32
|
||||
};
|
||||
enum LightIds {
|
||||
NUM_LIGHTS
|
||||
};
|
||||
|
||||
CardinalPluginContext* const pcontext;
|
||||
rack::dsp::SlewLimiter parameters[kModuleParameterCount];
|
||||
bool parametersConnected[kModuleParameterCount] = {};
|
||||
rack::dsp::SlewLimiter parameters[32];
|
||||
bool parametersConnected[32] = {};
|
||||
bool bypassed = false;
|
||||
bool smooth = true;
|
||||
uint8_t bank = 0;
|
||||
uint32_t lastProcessCounter = 0;
|
||||
|
||||
HostParameters()
|
||||
|
@ -61,7 +62,7 @@ struct HostParameters : TerminalModule {
|
|||
bypassed = isBypassed();
|
||||
lastProcessCounter = processCounter;
|
||||
|
||||
for (uint32_t i=0; i<kModuleParameterCount; ++i)
|
||||
for (uint32_t i=0; i<32; ++i)
|
||||
{
|
||||
const bool connected = outputs[i].isConnected();
|
||||
|
||||
|
@ -76,11 +77,11 @@ struct HostParameters : TerminalModule {
|
|||
if (bypassed)
|
||||
return;
|
||||
|
||||
for (uint32_t i=0; i<kModuleParameterCount; ++i)
|
||||
for (uint32_t i=0; i<32; ++i)
|
||||
{
|
||||
if (parametersConnected[i])
|
||||
outputs[i].setVoltage(smooth ? parameters[i].process(args.sampleTime, pcontext->parameters[i])
|
||||
: pcontext->parameters[i]);
|
||||
outputs[i].setVoltage(smooth ? parameters[i].process(args.sampleTime, pcontext->parameters[i+32*bank])
|
||||
: pcontext->parameters[i+32*bank]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,7 +92,7 @@ struct HostParameters : TerminalModule {
|
|||
{
|
||||
const double fall = 1.0 / (double(pcontext->bufferSize) / e.sampleRate);
|
||||
|
||||
for (uint32_t i=0; i<kModuleParameterCount; ++i)
|
||||
for (uint32_t i=0; i<32; ++i)
|
||||
{
|
||||
parameters[i].reset();
|
||||
parameters[i].setRiseFall(fall, fall);
|
||||
|
@ -107,6 +108,7 @@ struct HostParameters : TerminalModule {
|
|||
DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr);
|
||||
|
||||
json_object_set_new(rootJ, "smooth", json_boolean(smooth));
|
||||
json_object_set_new(rootJ, "bank", json_integer(bank));
|
||||
|
||||
return rootJ;
|
||||
}
|
||||
|
@ -115,6 +117,8 @@ struct HostParameters : TerminalModule {
|
|||
{
|
||||
if (json_t* const smoothJ = json_object_get(rootJ, "smooth"))
|
||||
smooth = json_boolean_value(smoothJ);
|
||||
if (json_t* const bankJ = json_object_get(rootJ, "bank"))
|
||||
bank = json_integer_value(bankJ);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -124,12 +128,12 @@ struct HostParameters : TerminalModule {
|
|||
struct CardinalParameterPJ301MPort : PJ301MPort {
|
||||
void onDragStart(const DragStartEvent& e) override {
|
||||
if (const CardinalPluginContext* const pcontext = static_cast<CardinalPluginContext*>(APP))
|
||||
handleHostParameterDrag(pcontext, portId, true);
|
||||
handleHostParameterDrag(pcontext, ((HostParameters*)module)->bank*portId, true);
|
||||
PJ301MPort::onDragStart(e);
|
||||
}
|
||||
void onDragEnd(const DragEndEvent& e) override {
|
||||
if (const CardinalPluginContext* const pcontext = static_cast<CardinalPluginContext*>(APP))
|
||||
handleHostParameterDrag(pcontext, portId, false);
|
||||
handleHostParameterDrag(pcontext, ((HostParameters*)module)->bank*portId, false);
|
||||
PJ301MPort::onDragEnd(e);
|
||||
}
|
||||
};
|
||||
|
@ -138,7 +142,7 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
|||
static constexpr const float startX = 10.0f;
|
||||
static constexpr const float startY = 90.0f;
|
||||
static constexpr const float paddingH = 30.0f;
|
||||
static constexpr const float paddingV = 49.0f;
|
||||
static constexpr const float paddingV = 36.0f;
|
||||
|
||||
HostParameters* const module;
|
||||
|
||||
|
@ -149,10 +153,10 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
|||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostParameters.svg")));
|
||||
createAndAddScrews();
|
||||
|
||||
for (int i=0; i<24; ++i)
|
||||
for (int i=0; i<32; ++i)
|
||||
{
|
||||
const float x = startX + int(i / 6) * paddingH;
|
||||
const float y = startY + int(i % 6) * paddingV;
|
||||
const float x = startX + int(i % 4) * paddingH;
|
||||
const float y = startY + int(i / 4) * paddingV;
|
||||
addOutput(createOutput<CardinalParameterPJ301MPort>(Vec(x, y), m, i));
|
||||
}
|
||||
}
|
||||
|
@ -162,22 +166,28 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
|||
drawBackground(args.vg);
|
||||
|
||||
nvgFontFaceId(args.vg, 0);
|
||||
nvgFontSize(args.vg, 14);
|
||||
nvgFontSize(args.vg, 10);
|
||||
|
||||
char text[] = { '0', '0', '\0' };
|
||||
for (int i=0; i<24; ++i)
|
||||
char text[] = { '0', '0', '0', '\0'};
|
||||
snprintf(text, 4, "%03d", 32*(module == nullptr ? 0 : module->bank));
|
||||
for (int i=0; i<32; ++i)
|
||||
{
|
||||
const float x = startX + int(i / 6) * paddingH;
|
||||
const float y = startY + int(i % 6) * paddingV;
|
||||
const float x = startX + int(i % 4) * paddingH;
|
||||
const float y = startY + int(i / 4) * paddingV;
|
||||
nvgBeginPath(args.vg);
|
||||
nvgRoundedRect(args.vg, x - 1.0f, y - 19.0f, paddingH - 4.0f, paddingV - 4.0f, 4);
|
||||
nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0));
|
||||
nvgFill(args.vg);
|
||||
|
||||
if (text[1]++ == '9')
|
||||
|
||||
if (text[2]++ == '9')
|
||||
{
|
||||
text[1] = '0';
|
||||
++text[0];
|
||||
text[2] = '0';
|
||||
if (text[1]++ == '9')
|
||||
{
|
||||
text[1] = '0';
|
||||
++text[0];
|
||||
}
|
||||
}
|
||||
nvgBeginPath(args.vg);
|
||||
nvgFillColor(args.vg, color::BLACK);
|
||||
|
@ -191,6 +201,15 @@ struct HostParametersWidget : ModuleWidgetWith9HP {
|
|||
{
|
||||
menu->addChild(new MenuSeparator);
|
||||
menu->addChild(createBoolPtrMenuItem("Smooth", "", &module->smooth));
|
||||
menu->addChild(createSubmenuItem("Bank", string::f("%d", module->bank), [=](Menu* menu) {
|
||||
for (int c = 0; c < 16; c++) {
|
||||
menu->addChild(createCheckMenuItem(string::f("%d", c+1), "",
|
||||
[=]() {return module->bank == c;},
|
||||
[=]() {module->bank = c;}
|
||||
));
|
||||
}
|
||||
}));
|
||||
|
||||
}
|
||||
};
|
||||
#else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue