| @@ -25,6 +25,93 @@ namespace rack { | |||
| // Knobs | |||
| //////////////////// | |||
| struct RoundKnob : SVGKnob { | |||
| RoundKnob() { | |||
| minAngle = -0.83*M_PI; | |||
| maxAngle = 0.83*M_PI; | |||
| } | |||
| }; | |||
| struct RoundBlackKnob : RoundKnob { | |||
| RoundBlackKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundBlack.svg"))); | |||
| box.size = Vec(38, 38); | |||
| } | |||
| }; | |||
| struct RoundSmallBlackKnob : RoundBlackKnob { | |||
| RoundSmallBlackKnob() { | |||
| box.size = Vec(28, 28); | |||
| } | |||
| }; | |||
| struct RoundLargeBlackKnob : RoundBlackKnob { | |||
| RoundLargeBlackKnob() { | |||
| box.size = Vec(46, 46); | |||
| } | |||
| }; | |||
| struct RoundHugeBlackKnob : RoundBlackKnob { | |||
| RoundHugeBlackKnob() { | |||
| box.size = Vec(56, 56); | |||
| } | |||
| }; | |||
| struct RoundSmallBlackSnapKnob : RoundSmallBlackKnob, SnapKnob {}; | |||
| struct Davies1900hKnob : SVGKnob { | |||
| Davies1900hKnob() { | |||
| minAngle = -0.83*M_PI; | |||
| maxAngle = 0.83*M_PI; | |||
| } | |||
| }; | |||
| struct Davies1900hWhiteKnob : Davies1900hKnob { | |||
| Davies1900hWhiteKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hWhite.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hBlackKnob : Davies1900hKnob { | |||
| Davies1900hBlackKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hBlack.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hRedKnob : Davies1900hKnob { | |||
| Davies1900hRedKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hRed.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hLargeWhiteKnob : Davies1900hKnob { | |||
| Davies1900hLargeWhiteKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hLargeWhite.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hLargeBlackKnob : Davies1900hKnob { | |||
| Davies1900hLargeBlackKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hLargeBlack.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hLargeRedKnob : Davies1900hKnob { | |||
| Davies1900hLargeRedKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hLargeRed.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hSmallBlackKnob : Davies1900hKnob { | |||
| Davies1900hSmallBlackKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hSmallBlack.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hSmallBlackSnapKnob : Davies1900hSmallBlackKnob, SnapKnob {}; | |||
| struct Rogan : SVGKnob { | |||
| Rogan() { | |||
| minAngle = -0.83*M_PI; | |||
| @@ -261,58 +348,6 @@ struct SynthTechAlco : SVGKnob { | |||
| } | |||
| }; | |||
| 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(assetGlobal("res/ComponentLibrary/Davies1900hWhite.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hBlackKnob : Davies1900hKnob { | |||
| Davies1900hBlackKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hBlack.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hRedKnob : Davies1900hKnob { | |||
| Davies1900hRedKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hRed.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hLargeWhiteKnob : Davies1900hKnob { | |||
| Davies1900hLargeWhiteKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hLargeWhite.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hLargeBlackKnob : Davies1900hKnob { | |||
| Davies1900hLargeBlackKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hLargeBlack.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hLargeRedKnob : Davies1900hKnob { | |||
| Davies1900hLargeRedKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hLargeRed.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hSmallBlackKnob : Davies1900hKnob { | |||
| Davies1900hSmallBlackKnob() { | |||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Davies1900hSmallBlack.svg"))); | |||
| } | |||
| }; | |||
| struct Davies1900hSmallBlackSnapKnob : Davies1900hSmallBlackKnob, SnapKnob {}; | |||
| struct Trimpot : SVGKnob { | |||
| Trimpot() { | |||
| box.size = Vec(17, 17); | |||
| @@ -167,9 +167,15 @@ struct Vec { | |||
| Vec mult(float s) { | |||
| return Vec(x * s, y * s); | |||
| } | |||
| Vec mult(Vec b) { | |||
| return Vec(x * b.x, y * b.y); | |||
| } | |||
| Vec div(float s) { | |||
| return Vec(x / s, y / s); | |||
| } | |||
| Vec div(Vec b) { | |||
| return Vec(x / b.x, y / b.y); | |||
| } | |||
| float dot(Vec b) { | |||
| return x * b.x + y * b.y; | |||
| } | |||
| @@ -0,0 +1,123 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="37.556625" | |||
| height="37.556622" | |||
| viewBox="0 0 9.9368575 9.9368564" | |||
| version="1.1" | |||
| id="svg49872" | |||
| inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
| sodipodi:docname="RoundBlack.svg"> | |||
| <defs | |||
| id="defs49866"> | |||
| <clipPath | |||
| id="clip12"> | |||
| <path | |||
| d="m 143,129.75 h 3 V 158 h -3 z m 0,0" | |||
| id="path28860" | |||
| inkscape:connector-curvature="0" /> | |||
| </clipPath> | |||
| <clipPath | |||
| id="clip11"> | |||
| <path | |||
| d="m 117.39453,129.75 h 54 v 54.00391 h -54 z m 0,0" | |||
| id="path28857" | |||
| inkscape:connector-curvature="0" /> | |||
| </clipPath> | |||
| <clipPath | |||
| id="clip150"> | |||
| <path | |||
| d="m 176,208.92578 h 2 V 228 h -2 z m 0,0" | |||
| id="path29465" | |||
| inkscape:connector-curvature="0" /> | |||
| </clipPath> | |||
| <clipPath | |||
| id="clip149"> | |||
| <path | |||
| d="m 159.27734,208.92578 h 36 v 36 h -36 z m 0,0" | |||
| id="path29462" | |||
| inkscape:connector-curvature="0" /> | |||
| </clipPath> | |||
| <clipPath | |||
| id="clip142"> | |||
| <path | |||
| d="m 110,208.92578 h 3 V 228 h -3 z m 0,0" | |||
| id="path29320" | |||
| inkscape:connector-curvature="0" /> | |||
| </clipPath> | |||
| <clipPath | |||
| id="clip141"> | |||
| <path | |||
| d="m 93.511719,208.92578 h 36.000001 v 36 H 93.511719 Z m 0,0" | |||
| id="path29317" | |||
| inkscape:connector-curvature="0" /> | |||
| </clipPath> | |||
| </defs> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="22.4" | |||
| inkscape:cx="15.038057" | |||
| inkscape:cy="23.041" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| fit-margin-top="0" | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| units="px" | |||
| inkscape:window-width="2560" | |||
| inkscape:window-height="1422" | |||
| inkscape:window-x="0" | |||
| inkscape:window-y="18" | |||
| inkscape:window-maximized="0" | |||
| inkscape:snap-global="true" | |||
| inkscape:snap-bbox="true" | |||
| inkscape:snap-bbox-midpoints="true" | |||
| inkscape:snap-object-midpoints="true" | |||
| inkscape:snap-bbox-edge-midpoints="true" | |||
| inkscape:object-paths="true" | |||
| inkscape:pagecheckerboard="true" /> | |||
| <metadata | |||
| id="metadata49869"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title></dc:title> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="Layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-73.816227,-78.610433)"> | |||
| <path | |||
| style="clip-rule:nonzero;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
| d="m 83.753084,83.578861 c 0,2.744065 -2.224363,4.968428 -4.968429,4.968428 -2.744065,0 -4.968428,-2.224363 -4.968428,-4.968428 0,-2.744066 2.224363,-4.968428 4.968428,-4.968428 2.744066,0 4.968429,2.224362 4.968429,4.968428" | |||
| id="path38955" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
| d="m 78.784655,83.578861 0,-4.968428" | |||
| id="path53181" | |||
| inkscape:connector-curvature="0" | |||
| sodipodi:nodetypes="cc" /> | |||
| </g> | |||
| </svg> | |||
| @@ -24,6 +24,8 @@ void SVGKnob::step() { | |||
| if (dirty) { | |||
| float angle = rescalef(value, minValue, maxValue, minAngle, maxAngle); | |||
| tw->identity(); | |||
| // Scale SVG to box | |||
| tw->scale(box.size.div(sw->box.size)); | |||
| // Rotate SVG | |||
| Vec center = sw->box.getCenter(); | |||
| tw->translate(center); | |||