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 @@
+
+
+
+
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 @@
+
+
+
+
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");