#pragma once #include "app.hpp" namespace rack { //////////////////// // Colors //////////////////// #define COLOR_BLACK_TRANSPARENT nvgRGBA(0x00, 0x00, 0x00, 0x00) #define COLOR_BLACK nvgRGB(0x00, 0x00, 0x00) #define COLOR_WHITE nvgRGB(0xff, 0xff, 0xff) #define COLOR_RED nvgRGB(0xed, 0x2c, 0x24) #define COLOR_ORANGE nvgRGB(0xf2, 0xb1, 0x20) #define COLOR_YELLOW nvgRGB(0xf9, 0xdf, 0x1c) #define COLOR_GREEN nvgRGB(0x90, 0xc7, 0x3e) #define COLOR_CYAN nvgRGB(0x22, 0xe6, 0xef) #define COLOR_BLUE nvgRGB(0x29, 0xb2, 0xef) #define COLOR_PURPLE nvgRGB(0xd5, 0x2b, 0xed) //////////////////// // Knobs //////////////////// struct Rogan : SVGKnob { Rogan() { minAngle = -0.83*M_PI; maxAngle = 0.83*M_PI; } }; struct Rogan6PS : Rogan { Rogan6PS() { box.size = Vec(89, 89); // minAngle = -0.83*M_PI; // maxAngle = 0.83*M_PI; } }; struct Rogan5PS : Rogan { Rogan5PS() { box.size = Vec(60, 60); } }; struct Rogan3PS : Rogan { Rogan3PS() { box.size = Vec(52, 52); } }; struct Rogan3P : Rogan { Rogan3P() { box.size = Vec(42, 42); } }; struct Rogan2S : Rogan { Rogan2S() { box.size = Vec(43, 43); } }; struct Rogan2PS : Rogan { Rogan2PS() { box.size = Vec(43, 43); } }; struct Rogan2P : Rogan { Rogan2P() { box.size = Vec(34, 34); } }; struct Rogan1PS : Rogan { Rogan1PS() { box.size = Vec(40, 40); } }; struct Rogan1P : Rogan { Rogan1P() { box.size = Vec(31, 31); } }; struct Rogan6PSWhite : Rogan6PS { Rogan6PSWhite() { setSVG(SVG::load("res/ComponentLibrary/Rogan6PSWhite.svg")); } }; struct Rogan5PSGray : Rogan5PS { Rogan5PSGray() { setSVG(SVG::load("res/ComponentLibrary/Rogan5PSGray.svg")); } }; struct Rogan3PSBlue : Rogan3PS { Rogan3PSBlue() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PSBlue.svg")); } }; struct Rogan3PSRed : Rogan3PS { Rogan3PSRed() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PSRed.svg")); } }; struct Rogan3PSGreen : Rogan3PS { Rogan3PSGreen() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PSGreen.svg")); } }; struct Rogan3PSWhite : Rogan3PS { Rogan3PSWhite() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PSWhite.svg")); } }; struct Rogan3PBlue : Rogan3P { Rogan3PBlue() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PBlue.svg")); } }; struct Rogan3PRed : Rogan3P { Rogan3PRed() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PRed.svg")); } }; struct Rogan3PGreen : Rogan3P { Rogan3PGreen() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PGreen.svg")); } }; struct Rogan3PWhite : Rogan3P { Rogan3PWhite() { setSVG(SVG::load("res/ComponentLibrary/Rogan3PWhite.svg")); } }; struct Rogan2SGray : Rogan2S { Rogan2SGray() { setSVG(SVG::load("res/ComponentLibrary/Rogan2SGray.svg")); } }; struct Rogan2PSBlue : Rogan2PS { Rogan2PSBlue() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PSBlue.svg")); } }; struct Rogan2PSRed : Rogan2PS { Rogan2PSRed() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PSRed.svg")); } }; struct Rogan2PSGreen : Rogan2PS { Rogan2PSGreen() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PSGreen.svg")); } }; struct Rogan2PSWhite : Rogan2PS { Rogan2PSWhite() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PSWhite.svg")); } }; struct Rogan2PBlue : Rogan2P { Rogan2PBlue() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PBlue.svg")); } }; struct Rogan2PRed : Rogan2P { Rogan2PRed() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PRed.svg")); } }; struct Rogan2PGreen : Rogan2P { Rogan2PGreen() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PGreen.svg")); } }; struct Rogan2PWhite : Rogan2P { Rogan2PWhite() { setSVG(SVG::load("res/ComponentLibrary/Rogan2PWhite.svg")); } }; struct Rogan1PSBlue : Rogan1PS { Rogan1PSBlue() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PSBlue.svg")); } }; struct Rogan1PSRed : Rogan1PS { Rogan1PSRed() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PSRed.svg")); } }; struct Rogan1PSGreen : Rogan1PS { Rogan1PSGreen() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PSGreen.svg")); } }; struct Rogan1PSWhite : Rogan1PS { Rogan1PSWhite() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PSWhite.svg")); } }; struct Rogan1PBlue : Rogan1P { Rogan1PBlue() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PBlue.svg")); } }; struct Rogan1PRed : Rogan1P { Rogan1PRed() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PRed.svg")); } }; struct Rogan1PGreen : Rogan1P { Rogan1PGreen() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PGreen.svg")); } }; struct Rogan1PWhite : Rogan1P { Rogan1PWhite() { setSVG(SVG::load("res/ComponentLibrary/Rogan1PWhite.svg")); } }; struct SynthTechAlco : SVGKnob { SynthTechAlco() { box.size = Vec(45, 45); minAngle = -0.82*M_PI; maxAngle = 0.82*M_PI; setSVG(SVG::load("res/ComponentLibrary/SynthTechAlco.svg")); } }; struct Davies1900hKnob : SVGKnob { Davies1900hKnob() { box.size = Vec(36, 36); minAngle = -0.83*M_PI; maxAngle = 0.83*M_PI; } }; struct Davies1900hWhiteKnob : Davies1900hKnob { Davies1900hWhiteKnob() { setSVG(SVG::load("res/ComponentLibrary/Davies1900hWhite.svg")); } }; struct Davies1900hBlackKnob : Davies1900hKnob { Davies1900hBlackKnob() { setSVG(SVG::load("res/ComponentLibrary/Davies1900hBlack.svg")); } }; struct Davies1900hRedKnob : Davies1900hKnob { Davies1900hRedKnob() { setSVG(SVG::load("res/ComponentLibrary/Davies1900hRed.svg")); } }; struct Davies1900hLargeWhiteKnob : Davies1900hKnob { Davies1900hLargeWhiteKnob() { setSVG(SVG::load("res/ComponentLibrary/Davies1900hLargeWhite.svg")); } }; struct Davies1900hLargeBlackKnob : Davies1900hKnob { Davies1900hLargeBlackKnob() { setSVG(SVG::load("res/ComponentLibrary/Davies1900hLargeBlack.svg")); } }; struct Davies1900hLargeRedKnob : Davies1900hKnob { Davies1900hLargeRedKnob() { setSVG(SVG::load("res/ComponentLibrary/Davies1900hLargeRed.svg")); } }; struct Davies1900hSmallBlackKnob : Davies1900hKnob { Davies1900hSmallBlackKnob() { setSVG(SVG::load("res/ComponentLibrary/Davies1900hSmallBlack.svg")); } }; struct Davies1900hSmallBlackSnapKnob : Davies1900hSmallBlackKnob, SnapKnob {}; struct Trimpot : SVGKnob { Trimpot() { box.size = Vec(17, 17); minAngle = -0.75*M_PI; maxAngle = 0.75*M_PI; setSVG(SVG::load("res/ComponentLibrary/Trimpot.svg")); } }; struct BefacoBigKnob : SVGKnob { BefacoBigKnob() { box.size = Vec(75, 75); minAngle = -0.75*M_PI; maxAngle = 0.75*M_PI; setSVG(SVG::load("res/ComponentLibrary/BefacoBigKnob.svg")); } }; struct BefacoBigSnapKnob : BefacoBigKnob, SnapKnob {}; struct BefacoTinyKnob : SVGKnob { BefacoTinyKnob() { box.size = Vec(26, 26); minAngle = -0.75*M_PI; maxAngle = 0.75*M_PI; setSVG(SVG::load("res/ComponentLibrary/BefacoTinyKnob.svg")); } }; struct BefacoSlidePot : SVGSlider { BefacoSlidePot() { Vec margin = Vec(3.5, 3.5); maxHandlePos = Vec(-1, -2).plus(margin); minHandlePos = Vec(-1, 87).plus(margin); background->svg = SVG::load("res/ComponentLibrary/BefacoSlidePot.svg"); background->wrap(); background->box.pos = margin; box.size = background->box.size.plus(margin.mult(2)); handle->svg = SVG::load("res/ComponentLibrary/BefacoSlidePotHandle.svg"); handle->wrap(); } }; //////////////////// // Jacks //////////////////// struct PJ301MPort : SVGPort { PJ301MPort() { padding = Vec(1, 1); background->svg = SVG::load("res/ComponentLibrary/PJ301M.svg"); background->wrap(); box.size = background->box.size; } }; struct PJ3410Port : SVGPort { PJ3410Port() { padding = Vec(1, 1); background->svg = SVG::load("res/ComponentLibrary/PJ3410.svg"); background->wrap(); box.size = background->box.size; } }; struct CL1362Port : SVGPort { CL1362Port() { padding = Vec(1, 1); background->svg = SVG::load("res/ComponentLibrary/CL1362.svg"); background->wrap(); box.size = background->box.size; } }; //////////////////// // LEDs //////////////////// struct ValueLight : Light { float *value; }; struct ColorValueLight : ValueLight { NVGcolor baseColor; void step() { float v = sqrtBipolar(getf(value)); color = baseColor; color.a = clampf(v, 0.0, 1.0); } }; struct RedValueLight : ColorValueLight { RedValueLight() { baseColor = COLOR_RED; } }; struct YellowValueLight : ColorValueLight { YellowValueLight() { baseColor = COLOR_YELLOW; } }; struct GreenValueLight : ColorValueLight { GreenValueLight() { baseColor = COLOR_GREEN; } }; struct PolarityLight : ValueLight { NVGcolor posColor; NVGcolor negColor; void step() { float v = sqrtBipolar(getf(value)); color = (v >= 0.0) ? posColor : negColor; color.a = clampf(fabsf(v), 0.0, 1.0); } }; struct GreenRedPolarityLight : PolarityLight { GreenRedPolarityLight() { posColor = COLOR_GREEN; negColor = COLOR_RED; } }; struct ModeValueLight : ValueLight { std::vector colors; void step() { int mode = clampi((int)roundf(getf(value)), 0, colors.size()); color = colors[mode]; } void addColor(NVGcolor color) { colors.push_back(color); } }; template struct LargeLight : BASE { LargeLight() { this->box.size = Vec(20, 20); } }; template struct MediumLight : BASE { MediumLight() { this->box.size = Vec(12, 12); } }; template struct SmallLight : BASE { SmallLight() { this->box.size = Vec(8, 8); } }; template struct TinyLight : BASE { TinyLight() { this->box.size = Vec(5, 5); } }; //////////////////// // Switches and Buttons //////////////////// struct NKK : SVGSwitch, ToggleSwitch { NKK() { addFrame(SVG::load("res/ComponentLibrary/NKK_0.svg")); addFrame(SVG::load("res/ComponentLibrary/NKK_1.svg")); addFrame(SVG::load("res/ComponentLibrary/NKK_2.svg")); sw->wrap(); box.size = sw->box.size; } }; struct CKSS : SVGSwitch, ToggleSwitch { CKSS() { addFrame(SVG::load("res/ComponentLibrary/CKSS_0.svg")); addFrame(SVG::load("res/ComponentLibrary/CKSS_1.svg")); sw->wrap(); box.size = sw->box.size; } }; struct CKD6 : SVGSwitch, MomentarySwitch { CKD6() { addFrame(SVG::load("res/ComponentLibrary/CKD6_0.svg")); addFrame(SVG::load("res/ComponentLibrary/CKD6_1.svg")); sw->wrap(); box.size = sw->box.size; } }; struct TL1105 : SVGSwitch, MomentarySwitch { TL1105() { addFrame(SVG::load("res/ComponentLibrary/TL1105_0.svg")); addFrame(SVG::load("res/ComponentLibrary/TL1105_1.svg")); sw->wrap(); box.size = sw->box.size; } }; struct LEDButton : SVGSwitch, MomentarySwitch { LEDButton() { addFrame(SVG::load("res/ComponentLibrary/LEDButton.svg")); sw->wrap(); box.size = sw->box.size; } }; struct BefacoSwitch : SVGSwitch, ToggleSwitch { BefacoSwitch() { addFrame(SVG::load("res/ComponentLibrary/BefacoSwitch_0.svg")); addFrame(SVG::load("res/ComponentLibrary/BefacoSwitch_1.svg")); addFrame(SVG::load("res/ComponentLibrary/BefacoSwitch_2.svg")); sw->wrap(); box.size = sw->box.size; } }; struct BefacoPush : SVGSwitch, MomentarySwitch { BefacoPush() { addFrame(SVG::load("res/ComponentLibrary/BefacoPush_0.svg")); addFrame(SVG::load("res/ComponentLibrary/BefacoPush_1.svg")); sw->wrap(); box.size = sw->box.size; } }; //////////////////// // Misc //////////////////// struct ScrewSilver : SVGScrew { ScrewSilver() { sw->svg = SVG::load("res/ComponentLibrary/ScrewSilver.svg"); sw->wrap(); box.size = sw->box.size; } }; struct ScrewBlack : SVGScrew { ScrewBlack() { sw->svg = SVG::load("res/ComponentLibrary/ScrewBlack.svg"); sw->wrap(); box.size = sw->box.size; } }; struct LightPanel : Panel { LightPanel() { // backgroundColor = nvgRGB(0xe6, 0xe6, 0xe6); backgroundColor = nvgRGB(0xf0, 0xf0, 0xf0); borderColor = nvgRGB(0xac, 0xac, 0xac); } }; struct DarkPanel : Panel { DarkPanel() { backgroundColor = nvgRGB(0x17, 0x17, 0x17); borderColor = nvgRGB(0x5e, 0x5e, 0x5e); } }; } // namespace rack