#pragma once #include #include "asset.hpp" #include "rack.hpp" using namespace rack; #define plugin "SynthKit" struct WaveSelect : TransparentWidget { uint8_t *value; std::shared_ptr font; WaveSelect ( ) { value = NULL; font = Font::load(assetPlugin(plugin, "res/digit.ttf")); } void draw (NVGcontext *vg) override { nvgFontSize(vg, 8); nvgFontFaceId(vg, font->handle); nvgTextLetterSpacing(vg, 1); nvgFillColor(vg, nvgRGBA(0x00, 0xff, 0x00, 0xff)); if (value) { switch (*value) { case 0: nvgText(vg, box.pos.x + 1, box.pos.y + 1, "SIN", NULL); break; case 1: nvgText(vg, box.pos.x + 1, box.pos.y + 1, "TRI", NULL); break; case 2: nvgText(vg, box.pos.x + 1, box.pos.y + 1, "SAW", NULL); break; case 3: nvgText(vg, box.pos.x + 1, box.pos.y + 1, "SQR", NULL); break; default: nvgText(vg, box.pos.x + 1, box.pos.y + 1, "ERR", NULL); break; } } else { nvgText(vg, box.pos.x + 1, box.pos.y + 1, "NUL", NULL); } } }; struct ValueDisplay : TransparentWidget { float *value; std::shared_ptr font; ValueDisplay ( ) { value = NULL; font = Font::load(assetPlugin(plugin, "res/digit.ttf")); } void draw (NVGcontext *vg) override { char text[12]; nvgFontSize(vg, 8); nvgFontFaceId(vg, font->handle); nvgTextLetterSpacing(vg, 1); nvgFillColor(vg, nvgRGBA(0x00, 0xff, 0x00, 0xff)); if (value) { sprintf(text, "%6.2f", *value); } else { sprintf(text, "ERROR"); } nvgText(vg, box.pos.x + 1, box.pos.y + 1, text, NULL); } }; struct LEDDisplay : TransparentWidget { float *value; LEDDisplay ( ) { value = NULL; } void draw (NVGcontext *vg) override { NVGcolor red = nvgRGBA(192, 0, 0, 255); NVGcolor yellow = nvgRGBA(255, 192, 0, 255); NVGcolor green = nvgRGBA(0, 192, 0, 255); NVGcolor grey = nvgRGBA(64, 64, 64, 255); float val = *value ? *value : 0.0f; nvgBeginPath(vg); nvgRect(vg, 0, 0, 8, 8); if (fabs(val) >= 4.5) { nvgFillColor(vg, red); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 11, 8, 8); if (fabs(val) >= 4.0) { nvgFillColor(vg, yellow); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 22, 8, 8); if (fabs(val) >= 3.5) { nvgFillColor(vg, yellow); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 33, 8, 8); if (fabs(val) >= 3.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 44, 8, 8); if (fabs(val) >= 2.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 55, 8, 8); if (fabs(val) >= 2.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 66, 8, 8); if (fabs(val) >= 1.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 77, 8, 8); if (fabs(val) >= 1.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 88, 8, 8); if (fabs(val) >= 0.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 99, 8, 8); if (fabs(val) > 0.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); } }; struct LEDSmallDisplay : TransparentWidget { float *value; LEDSmallDisplay ( ) { value = NULL; } void draw (NVGcontext *vg) override { NVGcolor red = nvgRGBA(192, 0, 0, 255); NVGcolor yellow = nvgRGBA(255, 192, 0, 255); NVGcolor green = nvgRGBA(0, 192, 0, 255); NVGcolor grey = nvgRGBA(64, 64, 64, 255); float val = *value ? *value : 0.0f; nvgBeginPath(vg); nvgRect(vg, 0, 0, 8, 6); if (fabs(val) >= 4.5) { nvgFillColor(vg, red); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 8, 8, 6); if (fabs(val) >= 4.0) { nvgFillColor(vg, yellow); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 16, 8, 6); if (fabs(val) >= 3.5) { nvgFillColor(vg, yellow); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 24, 8, 6); if (fabs(val) >= 3.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 32, 8, 6); if (fabs(val) >= 2.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 40, 8, 6); if (fabs(val) >= 2.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 48, 8, 6); if (fabs(val) >= 1.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 56, 8, 6); if (fabs(val) >= 1.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 64, 8, 6); if (fabs(val) >= 0.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 72, 8, 6); if (fabs(val) > 0.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); } }; struct LEDWideDisplay : TransparentWidget { float *value; LEDWideDisplay ( ) { value = NULL; } void draw (NVGcontext *vg) override { NVGcolor red = nvgRGBA(192, 0, 0, 255); NVGcolor yellow = nvgRGBA(255, 192, 0, 255); NVGcolor green = nvgRGBA(0, 192, 0, 255); NVGcolor grey = nvgRGBA(64, 64, 64, 255); float val = *value ? *value : 0.0f; nvgBeginPath(vg); nvgRect(vg, 0, 0, 16, 8); if (fabs(val) >= 4.5) { nvgFillColor(vg, red); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 11, 16, 8); if (fabs(val) >= 4.0) { nvgFillColor(vg, yellow); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 22, 16, 8); if (fabs(val) >= 3.5) { nvgFillColor(vg, yellow); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 33, 16, 8); if (fabs(val) >= 3.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 44, 16, 8); if (fabs(val) >= 2.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 55, 16, 8); if (fabs(val) >= 2.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 66, 16, 8); if (fabs(val) >= 1.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 77, 16, 8); if (fabs(val) >= 1.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 88, 16, 8); if (fabs(val) >= 0.5) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 0, 99, 16, 8); if (fabs(val) > 0.0) { nvgFillColor(vg, green); } else { nvgFillColor(vg, grey); } nvgFill(vg); } }; template struct ButtonLight : BASE { ButtonLight() { //this->box.size = Vec(20.0, 20.0); this->box.size = mm2px(Vec(6.0, 6.0)); } };