| @@ -44,6 +44,7 @@ struct Scope : Module { | |||||
| bool lissajous = false; | bool lissajous = false; | ||||
| bool external = false; | bool external = false; | ||||
| SchmittTrigger resetTrigger; | SchmittTrigger resetTrigger; | ||||
| Port *xPort, *yPort; | |||||
| Scope() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | Scope() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | ||||
| void step() override; | void step() override; | ||||
| @@ -267,20 +268,36 @@ struct ScopeDisplay : TransparentWidget { | |||||
| if (module->lissajous) { | if (module->lissajous) { | ||||
| // X x Y | // X x Y | ||||
| if (module->inputs[Scope::X_INPUT].active || module->inputs[Scope::Y_INPUT].active) { | if (module->inputs[Scope::X_INPUT].active || module->inputs[Scope::Y_INPUT].active) { | ||||
| nvgStrokeColor(vg, nvgRGBA(0x9f, 0xe4, 0x36, 0xc0)); | |||||
| nvgStrokeColor(vg, getPortColor(nullptr)); | |||||
| drawWaveform(vg, valuesX, valuesY); | drawWaveform(vg, valuesX, valuesY); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| // Y | // Y | ||||
| NVGcolor xColor, yColor; | |||||
| xColor = getPortColor(module->xPort); | |||||
| yColor = getPortColor(module->yPort); | |||||
| if (memcmp(&xColor, &yColor, sizeof(xColor)) == 0 ) { | |||||
| // if the colors are the same pick novel colors | |||||
| NVGcolor tmp = xColor; | |||||
| tmp.r = xColor.g; | |||||
| tmp.g = xColor.b; | |||||
| tmp.b = xColor.r; | |||||
| xColor = tmp; | |||||
| tmp.r = yColor.b; | |||||
| tmp.g = yColor.r; | |||||
| tmp.b = yColor.g; | |||||
| yColor = tmp; | |||||
| } | |||||
| if (module->inputs[Scope::Y_INPUT].active) { | if (module->inputs[Scope::Y_INPUT].active) { | ||||
| nvgStrokeColor(vg, nvgRGBA(0xe1, 0x02, 0x78, 0xc0)); | |||||
| nvgStrokeColor(vg, yColor); | |||||
| drawWaveform(vg, valuesY, NULL); | drawWaveform(vg, valuesY, NULL); | ||||
| } | } | ||||
| // X | // X | ||||
| if (module->inputs[Scope::X_INPUT].active) { | if (module->inputs[Scope::X_INPUT].active) { | ||||
| nvgStrokeColor(vg, nvgRGBA(0x28, 0xb0, 0xf3, 0xc0)); | |||||
| nvgStrokeColor(vg, xColor); | |||||
| drawWaveform(vg, valuesX, NULL); | drawWaveform(vg, valuesX, NULL); | ||||
| } | } | ||||
| @@ -297,6 +314,14 @@ struct ScopeDisplay : TransparentWidget { | |||||
| drawStats(vg, Vec(0, 0), "X", &statsX); | drawStats(vg, Vec(0, 0), "X", &statsX); | ||||
| drawStats(vg, Vec(0, box.size.y - 15), "Y", &statsY); | drawStats(vg, Vec(0, box.size.y - 15), "Y", &statsY); | ||||
| } | } | ||||
| NVGcolor getPortColor(Port* port) { | |||||
| WireWidget *wire = gRackWidget->wireContainer->getTopWire(port); | |||||
| NVGcolor color = wire ? wire->color : nvgRGBA(0x9f, 0xe4, 0x36, 0xc0); | |||||
| //color.a = 0xc0; | |||||
| return color; | |||||
| } | |||||
| }; | }; | ||||
| @@ -334,8 +359,10 @@ ScopeWidget::ScopeWidget() { | |||||
| addParam(createParam<RoundSmallBlackKnob>(Vec(153, 209), module, Scope::TRIG_PARAM, -10.0, 10.0, 0.0)); | addParam(createParam<RoundSmallBlackKnob>(Vec(153, 209), module, Scope::TRIG_PARAM, -10.0, 10.0, 0.0)); | ||||
| addParam(createParam<CKD6>(Vec(152, 262), module, Scope::EXTERNAL_PARAM, 0.0, 1.0, 0.0)); | addParam(createParam<CKD6>(Vec(152, 262), module, Scope::EXTERNAL_PARAM, 0.0, 1.0, 0.0)); | ||||
| addInput(createInput<PJ301MPort>(Vec(17, 319), module, Scope::X_INPUT)); | |||||
| addInput(createInput<PJ301MPort>(Vec(63, 319), module, Scope::Y_INPUT)); | |||||
| module->xPort = dynamic_cast<Port*>(createInput<PJ301MPort>(Vec(17, 319), module, Scope::X_INPUT)); | |||||
| addInput(module->xPort); | |||||
| module->yPort = dynamic_cast<Port*>(createInput<PJ301MPort>(Vec(63, 319), module, Scope::Y_INPUT)); | |||||
| addInput(module->yPort); | |||||
| addInput(createInput<PJ301MPort>(Vec(154, 319), module, Scope::TRIG_INPUT)); | addInput(createInput<PJ301MPort>(Vec(154, 319), module, Scope::TRIG_INPUT)); | ||||
| addChild(createLight<SmallLight<GreenLight>>(Vec(104, 251), module, Scope::PLOT_LIGHT)); | addChild(createLight<SmallLight<GreenLight>>(Vec(104, 251), module, Scope::PLOT_LIGHT)); | ||||