From e0dd5beb22f2ff03324e600d0ca0dfc3c4336cf2 Mon Sep 17 00:00:00 2001 From: catronomix <42138122+catronomix@users.noreply.github.com> Date: Tue, 27 Aug 2019 20:46:46 +0200 Subject: [PATCH] added CB-meter --- plugin.json | 8 ++ res/CB-meter-panel.svg | 224 +++++++++++++++++++++++++++++++++ res/CB-meter.svg | 238 +++++++++++++++++++++++++++++++++++ src/CatroBlanco.cpp | 2 +- src/CatroBlanco.hpp | 28 ++++- src/CatroBlanco_CB-meter.cpp | 122 ++++++++++++++++++ 6 files changed, 620 insertions(+), 2 deletions(-) create mode 100644 res/CB-meter-panel.svg create mode 100644 res/CB-meter.svg create mode 100644 src/CatroBlanco_CB-meter.cpp diff --git a/plugin.json b/plugin.json index a5e1a91..6724b70 100644 --- a/plugin.json +++ b/plugin.json @@ -74,6 +74,14 @@ "Blank", "Visual" ] + }, + { + "slug": "CatroBlanco_CB-meter", + "name": "2hp Meter", + "description": "2hp decorated meter", + "tags": [ + "Visual" + ] } ] } \ No newline at end of file diff --git a/res/CB-meter-panel.svg b/res/CB-meter-panel.svg new file mode 100644 index 0000000..8097044 --- /dev/null +++ b/res/CB-meter-panel.svg @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/CB-meter.svg b/res/CB-meter.svg new file mode 100644 index 0000000..111895b --- /dev/null +++ b/res/CB-meter.svg @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/CatroBlanco.cpp b/src/CatroBlanco.cpp index 5aa1cf4..52d31c9 100644 --- a/src/CatroBlanco.cpp +++ b/src/CatroBlanco.cpp @@ -14,7 +14,7 @@ void init(Plugin *p) { p->addModel(modelCB5Module); p->addModel(modelCB6Module); p->addModel(modelCB7Module); - //p->addModel(modelCB8Module); + p->addModel(modelCBmeterModule); //p->addModel(modelCB9Module); //p->addModel(modelCB10Module); diff --git a/src/CatroBlanco.hpp b/src/CatroBlanco.hpp index 4501ae1..fbd7133 100644 --- a/src/CatroBlanco.hpp +++ b/src/CatroBlanco.hpp @@ -14,7 +14,7 @@ extern Model *modelCB4Module; extern Model *modelCB5Module; extern Model *modelCB6Module; extern Model *modelCB7Module; -//extern Model *modelCB8Module; +extern Model *modelCBmeterModule; //extern Model *modelCB9Module; //extern Model *modelCB10Module; @@ -148,11 +148,20 @@ struct CB7_FrontPanel : CB_FrontPanel { }; }; +struct CBmeter_FrontPanel : CB_FrontPanel { + CBmeter_FrontPanel() { + setSvg(APP->window->loadSvg(asset::plugin(pluginInstance, "res/CB-meter-panel.svg"))); + wrap(); + }; +}; + //Panel Color Cycler struct CB_ColorCycler : TransparentWidget{ float *sig; bool *active; int *mode; + float *ystart; + float *ysize; NVGcolor fillcolor; float asig = 0; CB_ZeroTrigger fliptrigger; @@ -223,3 +232,20 @@ struct CB_ColorCyclerCircle : CB_ColorCycler{ } } }; + +struct CB_ColorCyclerMeter : CB_ColorCycler{ + + void draw(const DrawArgs &args) override + { + if (*active == true) + { + box.pos.y = *ystart; + fillcolor = procsig(); + nvgBeginPath(args.vg); + nvgRect(args.vg, 0.0, 0.0, box.size.x, *ysize); + nvgFillColor(args.vg, fillcolor); + nvgFill(args.vg); + ; + } + } +}; diff --git a/src/CatroBlanco_CB-meter.cpp b/src/CatroBlanco_CB-meter.cpp new file mode 100644 index 0000000..e6b207b --- /dev/null +++ b/src/CatroBlanco_CB-meter.cpp @@ -0,0 +1,122 @@ +#include "CatroBlanco.hpp" + + +//Catro-Blanco CB-meter: 2hp meter + +struct CBmeterModule : Module { + + enum ParamIds { + PARAM_MODE, + NUM_PARAMS + }; + enum InputIds { + INPUT_SIG, + NUM_INPUTS + }; + enum OutputIds { + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + float sig = 9.9; + float sig2 = 9.9; + float ysize = 314.0; + float ystart = 41.0; + bool clip = 0.0; + bool input_active = false; + int quantstep = 0; + int mode = 1; + dsp::SchmittTrigger modetrigger; + + CBmeterModule() { + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); + configParam(CBmeterModule::PARAM_MODE, 0.0, 1.0, 0.0, "MODE"); + } + void process(const ProcessArgs &args) override; + + json_t *dataToJson() override { + + json_t *rootJ = json_object(); + + json_t *settingsJ = json_array(); + json_array_append_new(settingsJ, json_real(mode)); + json_object_set_new(rootJ, "settings", settingsJ); + + return rootJ; + } + + + void dataFromJson(json_t *rootJ) override { + // running + json_t *settingsJ = json_object_get(rootJ, "settings"); + mode = json_real_value(json_array_get(settingsJ, 0)); + } +}; + +void CBmeterModule::process(const ProcessArgs &args) { + if (modetrigger.process(params[PARAM_MODE].getValue())){ + mode = (mode < 4) ? mode + 1 : 0; + } + + // if (quantstep < (APP->engine->getSampleRate() * 0.01)){ + // quantstep++; + // }else{ + if (inputs[INPUT_SIG].active){ + input_active = true; + sig = fmaxf(8.0, inputs[INPUT_SIG].getVoltage()); + ysize = fminf(314.0, fmaxf(ysize - 0.01, fabsf(inputs[INPUT_SIG].getVoltage() * 0.1) * 314.0)); + ystart = 41.0 + (314.0 - ysize); + clip = (inputs[INPUT_SIG].getVoltage() >= 10.0); + }else{ + input_active = false; + } + // quantstep = 0; + // } +} + +struct CBmeterModuleWidget : ModuleWidget { + + CBmeterModuleWidget(CBmeterModule *module) { + setModule(module); + setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/CB-meter.svg"))); + + if (module) + { + //Meter + CB_ColorCycler *CCycler = new CB_ColorCyclerMeter(); + CCycler->box.pos = Vec(1.4 , 355.0); + CCycler->box.size = Vec(27.8 , 0.0); + CCycler->sig = &module->sig; + CCycler->ystart = &module->ystart; + CCycler->ysize = &module->ysize; + CCycler->active = &module->input_active; + CCycler->mode = &module->mode; + addChild(CCycler); + + //clipping + CB_ColorCycler *CCycler2 = new CB_ColorCycler(); + CCycler2->box.pos = Vec(10.2, 19.7); + CCycler2->box.size = Vec(9.6, 9.6); + CCycler2->sig = &module->sig2; + CCycler2->active = &module->clip; + CCycler2->mode = &module->mode; + addChild(CCycler2); + + //Front panel + CBmeter_FrontPanel *frontpanel = new CBmeter_FrontPanel(); + addChild(frontpanel); + } + + //mode button + addParam(createParam(Vec(3 , 353), module, CBmeterModule::PARAM_MODE)); + + //input + addInput(createInput(Vec(10, 360), module, CBmeterModule::INPUT_SIG)); + + + } +}; + +Model *modelCBmeterModule = createModel("CatroBlanco_CB-meter");