| @@ -0,0 +1,157 @@ | |||
| <?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="71.120003mm" | |||
| height="128.5mm" | |||
| viewBox="0 0 71.120003 128.5" | |||
| version="1.1" | |||
| id="svg4620" | |||
| inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" | |||
| sodipodi:docname="HostMIDIGate.svg"> | |||
| <defs | |||
| id="defs4614"> | |||
| <style | |||
| id="style6" | |||
| type="text/css"> | |||
| .str0 {stroke:#565656;stroke-width:0.0966867} | |||
| .str1 {stroke:#4F4F4F;stroke-width:0.193345} | |||
| .fil0 {fill:none} | |||
| .fil2 {fill:#2B2A29} | |||
| .fil1 {fill:#6B6B6B} | |||
| </style> | |||
| </defs> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.4" | |||
| inkscape:cx="-25.21989" | |||
| inkscape:cy="288.75054" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1026" | |||
| inkscape:window-x="1920" | |||
| inkscape:window-y="0" | |||
| inkscape:window-maximized="1" | |||
| inkscape:pagecheckerboard="0" /> | |||
| <metadata | |||
| id="metadata4617"> | |||
| <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 /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="Layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(0,-168.5)"> | |||
| <g | |||
| id="g843" | |||
| transform="translate(13.114734)"> | |||
| <g | |||
| transform="matrix(6.342689,0,0,6.342689,5.4472535,175.6457)" | |||
| id="g5299" | |||
| style="fill-rule:evenodd"> | |||
| <g | |||
| inkscape:label="Layer 1" | |||
| id="Layer_x0020_1" | |||
| transform="translate(-1.6191379e-5,-0.08553947)"> | |||
| <metadata | |||
| id="CorelCorpID_0Corel-Layer" /> | |||
| <circle | |||
| class="fil0 str0" | |||
| cx="0.525226" | |||
| cy="0.61075097" | |||
| r="0.15916" | |||
| id="circle10" | |||
| style="fill:none;stroke:#ffffff;stroke-width:0.0966867;stroke-opacity:1" /> | |||
| <circle | |||
| class="fil0 str1" | |||
| cx="0.525226" | |||
| cy="0.61075097" | |||
| r="0.42853901" | |||
| id="circle12" | |||
| style="fill:none;stroke:#ffffff;stroke-width:0.193345;stroke-opacity:1" /> | |||
| </g> | |||
| </g> | |||
| <g | |||
| transform="translate(-0.09449404,0.14174107)" | |||
| id="text5303" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| aria-label="Cardinal"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5305" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 17.923601,176.99103 v 0.66043 q -0.31626,-0.29456 -0.675928,-0.44028 -0.356567,-0.14573 -0.759643,-0.14573 -0.79375,0 -1.21543,0.48679 -0.42168,0.48369 -0.42168,1.40146 0,0.91468 0.42168,1.40147 0.42168,0.48369 1.21543,0.48369 0.403076,0 0.759643,-0.14573 0.359668,-0.14572 0.675928,-0.44028 v 0.65422 q -0.328662,0.22325 -0.697632,0.33487 -0.365869,0.11162 -0.775146,0.11162 -1.051099,0 -1.655713,-0.64182 -0.604615,-0.64492 -0.604615,-1.75804 0,-1.11621 0.604615,-1.75803 0.604614,-0.64492 1.655713,-0.64492 0.415478,0 0.781347,0.11162 0.36897,0.10852 0.691431,0.32866 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5307" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 20.444377,179.51801 q -0.69143,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288355,-0.33796 0.288355,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570507 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291456,0.14883 -0.713135,0.14883 -0.533301,0 -0.849561,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799952 v -0.0558 q 0,-0.39378 -0.26045,-0.60772 -0.257348,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.579809,0.0713 -0.282154,0.0713 -0.542603,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294556,-0.062 0.573608,-0.062 0.753443,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5309" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 24.769695,178.32429 q -0.09612,-0.0558 -0.21084,-0.0806 -0.111621,-0.0279 -0.248047,-0.0279 -0.483691,0 -0.744141,0.31626 -0.257348,0.31315 -0.257348,0.90227 v 1.82934 H 22.73571 v -3.47265 h 0.573609 v 0.5395 q 0.179834,-0.31626 0.468188,-0.46819 0.288355,-0.15503 0.700733,-0.15503 0.05891,0 0.130224,0.009 0.07131,0.006 0.15813,0.0217 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5311" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 27.541618,178.31808 v -1.87895 h 0.570508 v 4.82451 h -0.570508 v -0.5209 q -0.179834,0.31006 -0.455786,0.46199 -0.272851,0.14883 -0.657324,0.14883 -0.629419,0 -1.026294,-0.5023 -0.393774,-0.50229 -0.393774,-1.32085 0,-0.81855 0.393774,-1.32085 0.396875,-0.50229 1.026294,-0.50229 0.384473,0 0.657324,0.15193 0.275952,0.14883 0.455786,0.45888 z m -1.944067,1.21233 q 0,0.62942 0.257349,0.98909 0.260449,0.35657 0.713134,0.35657 0.452686,0 0.713135,-0.35657 0.260449,-0.35967 0.260449,-0.98909 0,-0.62942 -0.260449,-0.98598 -0.260449,-0.35967 -0.713135,-0.35967 -0.452685,0 -0.713134,0.35967 -0.257349,0.35656 -0.257349,0.98598 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5313" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 29.287248,177.79099 h 0.570508 v 3.47265 h -0.570508 z m 0,-1.35186 h 0.570508 v 0.72244 h -0.570508 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5315" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 33.938127,179.16765 v 2.09599 h -0.570508 v -2.07739 q 0,-0.49299 -0.192236,-0.73794 -0.192236,-0.24495 -0.576709,-0.24495 -0.461987,0 -0.728638,0.29456 -0.26665,0.29455 -0.26665,0.80305 v 1.96267 h -0.573608 v -3.47265 h 0.573608 v 0.5395 q 0.204639,-0.31316 0.480591,-0.46819 0.279053,-0.15503 0.641821,-0.15503 0.598413,0 0.905371,0.37207 0.306958,0.36897 0.306958,1.08831 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5317" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 36.654241,179.51801 q -0.691431,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288354,-0.33796 0.288354,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570508 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291455,0.14883 -0.713135,0.14883 -0.5333,0 -0.84956,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799951 v -0.0558 q 0,-0.39378 -0.260449,-0.60772 -0.257349,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.57981,0.0713 -0.282153,0.0713 -0.542602,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294555,-0.062 0.573608,-0.062 0.753442,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5319" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 38.967278,176.43913 h 0.570508 v 4.82451 h -0.570508 z" /> | |||
| </g> | |||
| </g> | |||
| <text | |||
| xml:space="preserve" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58329964px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke:none;stroke-width:0.26458299" | |||
| x="16.853472" | |||
| y="188.65312" | |||
| id="text845"><tspan | |||
| sodipodi:role="line" | |||
| id="tspan843" | |||
| x="16.853472" | |||
| y="188.65312" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299">Host MIDI Gate</tspan></text> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1,211 @@ | |||
| <?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="71.120003mm" | |||
| height="128.5mm" | |||
| viewBox="0 0 71.120003 128.5" | |||
| version="1.1" | |||
| id="svg4620" | |||
| inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" | |||
| sodipodi:docname="HostMIDIGate.svg"> | |||
| <defs | |||
| id="defs4614"> | |||
| <style | |||
| id="style6" | |||
| type="text/css"> | |||
| .str0 {stroke:#565656;stroke-width:0.0966867} | |||
| .str1 {stroke:#4F4F4F;stroke-width:0.193345} | |||
| .fil0 {fill:none} | |||
| .fil2 {fill:#2B2A29} | |||
| .fil1 {fill:#6B6B6B} | |||
| </style> | |||
| </defs> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="1.4" | |||
| inkscape:cx="-25.21989" | |||
| inkscape:cy="288.75054" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1026" | |||
| inkscape:window-x="1920" | |||
| inkscape:window-y="0" | |||
| inkscape:window-maximized="1" | |||
| inkscape:pagecheckerboard="0" /> | |||
| <metadata | |||
| id="metadata4617"> | |||
| <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(0,-168.5)"> | |||
| <g | |||
| id="g843" | |||
| transform="translate(13.114734)"> | |||
| <g | |||
| transform="matrix(6.342689,0,0,6.342689,5.4472535,175.6457)" | |||
| id="g5299" | |||
| style="fill-rule:evenodd"> | |||
| <g | |||
| inkscape:label="Layer 1" | |||
| id="Layer_x0020_1" | |||
| transform="translate(-1.6191379e-5,-0.08553947)"> | |||
| <metadata | |||
| id="CorelCorpID_0Corel-Layer" /> | |||
| <circle | |||
| class="fil0 str0" | |||
| cx="0.525226" | |||
| cy="0.61075097" | |||
| r="0.15916" | |||
| id="circle10" | |||
| style="fill:none;stroke:#ffffff;stroke-width:0.0966867;stroke-opacity:1" /> | |||
| <circle | |||
| class="fil0 str1" | |||
| cx="0.525226" | |||
| cy="0.61075097" | |||
| r="0.42853901" | |||
| id="circle12" | |||
| style="fill:none;stroke:#ffffff;stroke-width:0.193345;stroke-opacity:1" /> | |||
| </g> | |||
| </g> | |||
| <g | |||
| transform="translate(-0.09449404,0.14174107)" | |||
| id="text5303" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | |||
| aria-label="Cardinal"> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5305" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 17.923601,176.99103 v 0.66043 q -0.31626,-0.29456 -0.675928,-0.44028 -0.356567,-0.14573 -0.759643,-0.14573 -0.79375,0 -1.21543,0.48679 -0.42168,0.48369 -0.42168,1.40146 0,0.91468 0.42168,1.40147 0.42168,0.48369 1.21543,0.48369 0.403076,0 0.759643,-0.14573 0.359668,-0.14572 0.675928,-0.44028 v 0.65422 q -0.328662,0.22325 -0.697632,0.33487 -0.365869,0.11162 -0.775146,0.11162 -1.051099,0 -1.655713,-0.64182 -0.604615,-0.64492 -0.604615,-1.75804 0,-1.11621 0.604615,-1.75803 0.604614,-0.64492 1.655713,-0.64492 0.415478,0 0.781347,0.11162 0.36897,0.10852 0.691431,0.32866 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5307" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 20.444377,179.51801 q -0.69143,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288355,-0.33796 0.288355,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570507 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291456,0.14883 -0.713135,0.14883 -0.533301,0 -0.849561,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799952 v -0.0558 q 0,-0.39378 -0.26045,-0.60772 -0.257348,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.579809,0.0713 -0.282154,0.0713 -0.542603,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294556,-0.062 0.573608,-0.062 0.753443,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5309" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 24.769695,178.32429 q -0.09612,-0.0558 -0.21084,-0.0806 -0.111621,-0.0279 -0.248047,-0.0279 -0.483691,0 -0.744141,0.31626 -0.257348,0.31315 -0.257348,0.90227 v 1.82934 H 22.73571 v -3.47265 h 0.573609 v 0.5395 q 0.179834,-0.31626 0.468188,-0.46819 0.288355,-0.15503 0.700733,-0.15503 0.05891,0 0.130224,0.009 0.07131,0.006 0.15813,0.0217 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5311" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 27.541618,178.31808 v -1.87895 h 0.570508 v 4.82451 h -0.570508 v -0.5209 q -0.179834,0.31006 -0.455786,0.46199 -0.272851,0.14883 -0.657324,0.14883 -0.629419,0 -1.026294,-0.5023 -0.393774,-0.50229 -0.393774,-1.32085 0,-0.81855 0.393774,-1.32085 0.396875,-0.50229 1.026294,-0.50229 0.384473,0 0.657324,0.15193 0.275952,0.14883 0.455786,0.45888 z m -1.944067,1.21233 q 0,0.62942 0.257349,0.98909 0.260449,0.35657 0.713134,0.35657 0.452686,0 0.713135,-0.35657 0.260449,-0.35967 0.260449,-0.98909 0,-0.62942 -0.260449,-0.98598 -0.260449,-0.35967 -0.713135,-0.35967 -0.452685,0 -0.713134,0.35967 -0.257349,0.35656 -0.257349,0.98598 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5313" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 29.287248,177.79099 h 0.570508 v 3.47265 h -0.570508 z m 0,-1.35186 h 0.570508 v 0.72244 h -0.570508 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5315" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 33.938127,179.16765 v 2.09599 h -0.570508 v -2.07739 q 0,-0.49299 -0.192236,-0.73794 -0.192236,-0.24495 -0.576709,-0.24495 -0.461987,0 -0.728638,0.29456 -0.26665,0.29455 -0.26665,0.80305 v 1.96267 h -0.573608 v -3.47265 h 0.573608 v 0.5395 q 0.204639,-0.31316 0.480591,-0.46819 0.279053,-0.15503 0.641821,-0.15503 0.598413,0 0.905371,0.37207 0.306958,0.36897 0.306958,1.08831 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5317" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 36.654241,179.51801 q -0.691431,0 -0.958081,0.15813 -0.26665,0.15813 -0.26665,0.5395 0,0.30386 0.198437,0.48369 0.201538,0.17674 0.545703,0.17674 0.47439,0 0.759644,-0.33487 0.288354,-0.33796 0.288354,-0.89606 v -0.12713 z m 1.137915,-0.23564 v 1.98127 h -0.570508 v -0.5271 q -0.195337,0.31626 -0.486792,0.46819 -0.291455,0.14883 -0.713135,0.14883 -0.5333,0 -0.84956,-0.29766 -0.313159,-0.30075 -0.313159,-0.80305 0,-0.58601 0.390674,-0.88367 0.393774,-0.29765 1.172021,-0.29765 h 0.799951 v -0.0558 q 0,-0.39378 -0.260449,-0.60772 -0.257349,-0.21704 -0.725537,-0.21704 -0.297656,0 -0.57981,0.0713 -0.282153,0.0713 -0.542602,0.21394 v -0.52709 q 0.313159,-0.12093 0.607715,-0.17984 0.294555,-0.062 0.573608,-0.062 0.753442,0 1.125513,0.39067 0.37207,0.39068 0.37207,1.18443 z" /> | |||
| <path | |||
| inkscape:connector-curvature="0" | |||
| id="path5319" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3499999px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332" | |||
| d="m 38.967278,176.43913 h 0.570508 v 4.82451 h -0.570508 z" /> | |||
| </g> | |||
| </g> | |||
| <g | |||
| aria-label="Host MIDI Gate" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58329964px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke:none;stroke-width:0.26458299" | |||
| id="text845"> | |||
| <path | |||
| d="m 17.338197,185.05265 h 0.487136 v 1.47588 h 1.770091 v -1.47588 h 0.487136 v 3.60047 h -0.487136 v -1.71462 h -1.770091 v 1.71462 h -0.487136 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path830" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 22.079338,186.26326 q -0.356912,0 -0.564306,0.27974 -0.207395,0.27733 -0.207395,0.76206 0,0.48472 0.204983,0.76446 0.207395,0.27733 0.566718,0.27733 0.354501,0 0.561895,-0.27974 0.207395,-0.27974 0.207395,-0.76205 0,-0.47991 -0.207395,-0.75965 -0.207394,-0.28215 -0.561895,-0.28215 z m 0,-0.37621 q 0.578776,0 0.909161,0.37621 0.330385,0.3762 0.330385,1.0418 0,0.66318 -0.330385,1.04179 -0.330385,0.37621 -0.909161,0.37621 -0.581187,0 -0.911572,-0.37621 -0.327973,-0.37861 -0.327973,-1.04179 0,-0.6656 0.327973,-1.0418 0.330385,-0.37621 0.911572,-0.37621 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path832" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 25.776271,186.03175 v 0.41961 q -0.188102,-0.0965 -0.390674,-0.14469 -0.202571,-0.0482 -0.419612,-0.0482 -0.330385,0 -0.496783,0.10128 -0.163987,0.10129 -0.163987,0.30386 0,0.15434 0.118167,0.24357 0.118167,0.0868 0.475079,0.1664 l 0.151929,0.0338 q 0.472667,0.10128 0.670415,0.28697 0.20016,0.18328 0.20016,0.51367 0,0.3762 -0.299034,0.59565 -0.296623,0.21946 -0.817521,0.21946 -0.217041,0 -0.453375,-0.0434 -0.233922,-0.041 -0.494371,-0.1254 v -0.4582 q 0.24598,0.12781 0.484725,0.19293 0.238745,0.0627 0.472667,0.0627 0.313504,0 0.482313,-0.10611 0.16881,-0.10852 0.16881,-0.30386 0,-0.18087 -0.12299,-0.27733 -0.120578,-0.0965 -0.532956,-0.18569 l -0.15434,-0.0362 q -0.412379,-0.0868 -0.595658,-0.26528 -0.183279,-0.18086 -0.183279,-0.49437 0,-0.38103 0.270096,-0.58842 0.270095,-0.2074 0.766878,-0.2074 0.24598,0 0.463021,0.0362 0.217041,0.0362 0.40032,0.10852 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path834" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 27.06646,185.18529 v 0.76688 h 0.913984 v 0.34485 H 27.06646 v 1.46623 q 0,0.33039 0.08923,0.42444 0.09164,0.0941 0.368969,0.0941 h 0.455787 v 0.37138 h -0.455787 q -0.513664,0 -0.709,-0.19051 -0.195337,-0.19293 -0.195337,-0.69936 v -1.46623 H 26.29476 v -0.34485 h 0.325562 v -0.76688 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path836" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 30.153266,185.05265 h 0.725882 l 0.918807,2.45015 0.92363,-2.45015 h 0.725882 v 3.60047 h -0.475079 v -3.16156 l -0.928453,2.46944 h -0.489548 l -0.928454,-2.46944 v 3.16156 h -0.472667 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path838" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 34.414506,185.05265 h 0.487137 v 3.60047 h -0.487137 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path840" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 36.358229,185.45297 v 2.79983 h 0.588423 q 0.745174,0 1.090028,-0.33762 0.347266,-0.33762 0.347266,-1.06591 0,-0.72347 -0.347266,-1.05868 -0.344854,-0.33762 -1.090028,-0.33762 z m -0.487136,-0.40032 h 1.0008 q 1.046621,0 1.536169,0.4365 0.489548,0.43408 0.489548,1.36012 0,0.93086 -0.49196,1.36736 -0.49196,0.43649 -1.533757,0.43649 h -1.0008 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path842" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 39.674134,185.05265 h 0.487137 v 3.60047 h -0.487137 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path844" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 45.155626,188.13946 v -0.96704 h -0.795817 v -0.40032 h 1.27813 v 1.54581 q -0.282153,0.20016 -0.622184,0.30386 -0.340031,0.10129 -0.725882,0.10129 -0.844048,0 -1.321539,-0.49196 -0.475079,-0.49437 -0.475079,-1.3746 0,-0.88263 0.475079,-1.37459 0.477491,-0.49437 1.321539,-0.49437 0.352089,0 0.668004,0.0868 0.318327,0.0868 0.586011,0.25562 v 0.51849 q -0.270095,-0.2291 -0.573953,-0.34486 -0.303857,-0.11575 -0.639065,-0.11575 -0.66077,0 -0.993566,0.36897 -0.330385,0.36897 -0.330385,1.09967 0,0.7283 0.330385,1.09727 0.332796,0.36897 0.993566,0.36897 0.258038,0 0.460609,-0.0434 0.202572,-0.0458 0.364147,-0.13987 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path846" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 47.736003,187.29541 q -0.537779,0 -0.745174,0.12299 -0.207395,0.12299 -0.207395,0.41961 0,0.23634 0.154341,0.37621 0.156752,0.13746 0.424436,0.13746 0.368969,0 0.590834,-0.26045 0.224275,-0.26286 0.224275,-0.69695 v -0.0989 z m 0.885046,-0.18328 v 1.54099 H 48.17732 v -0.40996 q -0.151928,0.24598 -0.378616,0.36414 -0.226687,0.11576 -0.55466,0.11576 -0.41479,0 -0.66077,-0.23151 -0.243568,-0.23393 -0.243568,-0.6246 0,-0.45579 0.303857,-0.6873 0.30627,-0.23151 0.911573,-0.23151 h 0.622184 v -0.0434 q 0,-0.30627 -0.202571,-0.47267 -0.20016,-0.16881 -0.564307,-0.16881 -0.231511,0 -0.450963,0.0555 -0.219453,0.0555 -0.422024,0.1664 v -0.40996 q 0.243568,-0.0941 0.472667,-0.13987 0.229099,-0.0482 0.44614,-0.0482 0.586011,0 0.875399,0.30386 0.289388,0.30386 0.289388,0.92122 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path848" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 49.973939,185.18529 v 0.76688 h 0.913984 v 0.34485 h -0.913984 v 1.46623 q 0,0.33039 0.08923,0.42444 0.09164,0.0941 0.36897,0.0941 h 0.455786 v 0.37138 h -0.455786 q -0.513664,0 -0.709001,-0.19051 -0.195337,-0.19293 -0.195337,-0.69936 v -1.46623 h -0.325562 v -0.34485 h 0.325562 v -0.76688 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path850" | |||
| inkscape:connector-curvature="0" /> | |||
| <path | |||
| d="m 53.781804,187.19171 v 0.21704 h -2.040186 q 0.02894,0.4582 0.274919,0.69936 0.248391,0.23874 0.689708,0.23874 0.255626,0 0.494371,-0.0627 0.241157,-0.0627 0.477491,-0.1881 v 0.41961 q -0.238745,0.10129 -0.489548,0.15434 -0.250803,0.0531 -0.508841,0.0531 -0.6463,0 -1.024916,-0.37621 -0.376205,-0.3762 -0.376205,-1.01768 0,-0.66318 0.356912,-1.05144 0.359324,-0.39068 0.967039,-0.39068 0.545014,0 0.860929,0.35209 0.318327,0.34968 0.318327,0.95257 z m -0.443728,-0.13022 q -0.0048,-0.36415 -0.204983,-0.58119 -0.197749,-0.21704 -0.525722,-0.21704 -0.371381,0 -0.595657,0.20981 -0.221864,0.2098 -0.255626,0.59083 z" | |||
| style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888998px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
| id="path852" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -405,33 +405,6 @@ struct CardinalMIDILearnPJ301MPort : PJ301MPort { | |||
| } | |||
| }; | |||
| struct CardinalLedDisplayChoice : LedDisplayChoice { | |||
| CardinalLedDisplayChoice(const char* const label = nullptr) | |||
| { | |||
| color = nvgRGBf(0.76f, 0.11f, 0.22f); | |||
| textOffset.y -= 4; | |||
| if (label != nullptr) | |||
| text = label; | |||
| } | |||
| void drawLayer(const DrawArgs& args, int layer) override | |||
| { | |||
| // nvgScissor(args.vg, RECT_ARGS(args.clipBox)); | |||
| if (layer == 1) | |||
| { | |||
| nvgFillColor(args.vg, color); | |||
| nvgTextAlign(args.vg, NVG_ALIGN_CENTER); | |||
| nvgTextLetterSpacing(args.vg, 0.0f); | |||
| nvgText(args.vg, box.size.x * 0.5f, textOffset.y, text.c_str(), NULL); | |||
| } | |||
| Widget::drawLayer(args, layer); | |||
| // nvgResetScissor(args.vg); | |||
| } | |||
| }; | |||
| /** | |||
| * Based on VCVRack's CcChoice as defined in src/core/plugin.hpp | |||
| * Copyright (C) 2016-2021 VCV. | |||
| @@ -444,7 +417,7 @@ struct CardinalLedDisplayChoice : LedDisplayChoice { | |||
| struct CardinalCcChoice : CardinalLedDisplayChoice { | |||
| HostMIDICC* const module; | |||
| const int id; | |||
| int focusCc; | |||
| int focusCc = -1; | |||
| CardinalCcChoice(HostMIDICC* const m, const int i) | |||
| : CardinalLedDisplayChoice(), | |||
| @@ -521,12 +494,17 @@ struct CardinalCcChoice : CardinalLedDisplayChoice { | |||
| void onSelectKey(const SelectKeyEvent& e) override | |||
| { | |||
| if ((e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER) && e.action == GLFW_PRESS && (e.mods & RACK_MOD_MASK) == 0) { | |||
| DeselectEvent eDeselect; | |||
| onDeselect(eDeselect); | |||
| APP->event->selectedWidget = NULL; | |||
| e.consume(this); | |||
| } | |||
| if (e.key != GLFW_KEY_ENTER && e.key != GLFW_KEY_KP_ENTER) | |||
| return; | |||
| if (e.action != GLFW_PRESS) | |||
| return; | |||
| if (e.mods & RACK_MOD_MASK) | |||
| return; | |||
| DeselectEvent eDeselect; | |||
| onDeselect(eDeselect); | |||
| APP->event->selectedWidget = NULL; | |||
| e.consume(this); | |||
| } | |||
| }; | |||
| @@ -38,11 +38,11 @@ struct HostMIDIGate : Module { | |||
| NUM_PARAMS | |||
| }; | |||
| enum InputIds { | |||
| ENUMS(GATE_INPUTS, 16), | |||
| ENUMS(GATE_INPUTS, 18), | |||
| NUM_INPUTS | |||
| }; | |||
| enum OutputIds { | |||
| ENUMS(GATE_OUTPUTS, 16), | |||
| ENUMS(GATE_OUTPUTS, 18), | |||
| NUM_OUTPUTS | |||
| }; | |||
| enum LightIds { | |||
| @@ -62,11 +62,11 @@ struct HostMIDIGate : Module { | |||
| // stuff from Rack | |||
| /** [cell][channel] */ | |||
| bool gates[16][16]; | |||
| bool gates[18][16]; | |||
| /** [cell][channel] */ | |||
| float gateTimes[16][16]; | |||
| float gateTimes[18][16]; | |||
| /** [cell][channel] */ | |||
| uint8_t velocities[16][16]; | |||
| uint8_t velocities[18][16]; | |||
| /** Cell ID in learn mode, or -1 if none. */ | |||
| int learningId; | |||
| @@ -92,7 +92,7 @@ struct HostMIDIGate : Module { | |||
| void panic() | |||
| { | |||
| for (int i = 0; i < 16; ++i) | |||
| for (int i = 0; i < 18; ++i) | |||
| { | |||
| for (int c = 0; c < 16; ++c) | |||
| { | |||
| @@ -103,7 +103,7 @@ struct HostMIDIGate : Module { | |||
| } | |||
| bool process(const ProcessArgs& args, std::vector<rack::engine::Output>& outputs, | |||
| const bool velocityMode, uint8_t learnedNotes[16]) | |||
| const bool velocityMode, uint8_t learnedNotes[18]) | |||
| { | |||
| // Cardinal specific | |||
| const int64_t blockFrame = pcontext->engine->getBlockFrame(); | |||
| @@ -180,9 +180,11 @@ struct HostMIDIGate : Module { | |||
| // Rack stuff | |||
| const int channels = mpeMode ? 16 : 1; | |||
| for (int i = 0; i < 16; i++) { | |||
| for (int i = 0; i < 18; i++) | |||
| { | |||
| outputs[GATE_OUTPUTS + i].setChannels(channels); | |||
| for (int c = 0; c < channels; c++) { | |||
| for (int c = 0; c < channels; c++) | |||
| { | |||
| // Make sure all pulses last longer than 1ms | |||
| if (gates[i][c] || gateTimes[i][c] > 0.f) | |||
| { | |||
| @@ -287,7 +289,7 @@ struct HostMIDIGate : Module { | |||
| } midiOutput; | |||
| bool velocityMode = false; | |||
| uint8_t learnedNotes[16] = {}; | |||
| uint8_t learnedNotes[18] = {}; | |||
| HostMIDIGate() | |||
| : pcontext(static_cast<CardinalPluginContext*>(APP)), | |||
| @@ -299,10 +301,10 @@ struct HostMIDIGate : Module { | |||
| config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); | |||
| for (int i = 0; i < 16; i++) | |||
| configInput(GATE_INPUTS + i, string::f("Cell %d", i + 1)); | |||
| for (int i = 0; i < 18; i++) | |||
| configInput(GATE_INPUTS + i, string::f("Gate %d", i + 1)); | |||
| for (int i = 0; i < 16; i++) | |||
| for (int i = 0; i < 18; i++) | |||
| configOutput(GATE_OUTPUTS + i, string::f("Gate %d", i + 1)); | |||
| onReset(); | |||
| @@ -310,9 +312,8 @@ struct HostMIDIGate : Module { | |||
| void onReset() override | |||
| { | |||
| for (int y = 0; y < 4; ++y) | |||
| for (int x = 0; x < 4; ++x) | |||
| learnedNotes[4 * y + x] = 36 + 4 * (3 - y) + x; | |||
| for (int i = 0; i < 18; ++i) | |||
| learnedNotes[i] = 36 + i; | |||
| velocityMode = false; | |||
| @@ -327,7 +328,7 @@ struct HostMIDIGate : Module { | |||
| else | |||
| ++midiOutput.frame; | |||
| for (int i = 0; i < 16; i++) | |||
| for (int i = 0; i < 18; ++i) | |||
| { | |||
| const int note = learnedNotes[i]; | |||
| @@ -355,7 +356,7 @@ struct HostMIDIGate : Module { | |||
| // input and output | |||
| if (json_t* const notesJ = json_array()) | |||
| { | |||
| for (int i = 0; i < 16; i++) | |||
| for (int i = 0; i < 18; i++) | |||
| json_array_append_new(notesJ, json_integer(learnedNotes[i])); | |||
| json_object_set_new(rootJ, "notes", notesJ); | |||
| } | |||
| @@ -376,7 +377,7 @@ struct HostMIDIGate : Module { | |||
| // input and output | |||
| if (json_t* const notesJ = json_object_get(rootJ, "notes")) | |||
| { | |||
| for (int i = 0; i < 16; i++) | |||
| for (int i = 0; i < 18; i++) | |||
| { | |||
| if (json_t* const noteJ = json_array_get(notesJ, i)) | |||
| learnedNotes[i] = json_integer_value(noteJ); | |||
| @@ -403,12 +404,189 @@ struct HostMIDIGate : Module { | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| struct CardinalMIDILearnPJ301MPort : PJ301MPort { | |||
| void onDragStart(const DragStartEvent& e) override { | |||
| PJ301MPort::onDragStart(e); | |||
| } | |||
| void onDragEnd(const DragEndEvent& e) override { | |||
| PJ301MPort::onDragEnd(e); | |||
| } | |||
| }; | |||
| /** | |||
| * Based on VCVRack's NoteChoice as defined in src/core/plugin.hpp | |||
| * Copyright (C) 2016-2021 VCV. | |||
| * | |||
| * This program is free software: you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 3 of | |||
| * the License, or (at your option) any later version. | |||
| */ | |||
| struct CardinalNoteChoice : CardinalLedDisplayChoice { | |||
| HostMIDIGate* const module; | |||
| const int id; | |||
| int focusNote = -1; | |||
| CardinalNoteChoice(HostMIDIGate* const m, const int i) | |||
| : CardinalLedDisplayChoice(), | |||
| module(m), | |||
| id(i) {} | |||
| void step() override | |||
| { | |||
| int note; | |||
| if (module == nullptr) | |||
| { | |||
| note = id + 36; | |||
| } | |||
| else if (module->midiInput.learningId == id) | |||
| { | |||
| note = focusNote; | |||
| color.a = 0.5; | |||
| } | |||
| else | |||
| { | |||
| note = module->learnedNotes[id]; | |||
| color.a = 1.0f; | |||
| // Cancel focus if no longer learning | |||
| if (APP->event->getSelectedWidget() == this) | |||
| APP->event->setSelectedWidget(NULL); | |||
| } | |||
| // Set text | |||
| if (note < 0) | |||
| { | |||
| text = "--"; | |||
| } | |||
| else | |||
| { | |||
| static const char* noteNames[12] = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"}; | |||
| const int oct = note / 12 - 1; | |||
| const int semi = note % 12; | |||
| text = string::f("%s%d", noteNames[semi], oct); | |||
| } | |||
| } | |||
| void onSelect(const SelectEvent& e) override | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(module != nullptr,); | |||
| module->midiInput.learningId = id; | |||
| focusNote = -1; | |||
| e.consume(this); | |||
| } | |||
| void onDeselect(const DeselectEvent&) override | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(module != nullptr,); | |||
| if (module->midiInput.learningId == id) | |||
| { | |||
| if (0 <= focusNote && focusNote < 128) | |||
| module->learnedNotes[id] = focusNote; | |||
| module->midiInput.learningId = -1; | |||
| } | |||
| } | |||
| void onSelectText(const SelectTextEvent& e) override | |||
| { | |||
| const int c = e.codepoint; | |||
| if ('a' <= c && c <= 'g') | |||
| { | |||
| static const int majorNotes[7] = {9, 11, 0, 2, 4, 5, 7}; | |||
| focusNote = majorNotes[c - 'a']; | |||
| } | |||
| else if (c == '#') | |||
| { | |||
| if (focusNote >= 0) | |||
| focusNote += 1; | |||
| } | |||
| else if ('0' <= c && c <= '9') | |||
| { | |||
| if (focusNote >= 0) | |||
| { | |||
| focusNote = focusNote % 12; | |||
| focusNote += 12 * (c - '0' + 1); | |||
| } | |||
| } | |||
| if (focusNote >= 128) | |||
| focusNote = -1; | |||
| e.consume(this); | |||
| } | |||
| void onSelectKey(const SelectKeyEvent& e) override | |||
| { | |||
| if (e.key != GLFW_KEY_ENTER && e.key != GLFW_KEY_KP_ENTER) | |||
| return; | |||
| if (e.action != GLFW_PRESS) | |||
| return; | |||
| if (e.mods & RACK_MOD_MASK) | |||
| return; | |||
| DeselectEvent eDeselect; | |||
| onDeselect(eDeselect); | |||
| APP->event->selectedWidget = NULL; | |||
| e.consume(this); | |||
| } | |||
| }; | |||
| struct NoteGridDisplay : Widget { | |||
| void draw(const DrawArgs& args) override | |||
| { | |||
| nvgBeginPath(args.vg); | |||
| nvgRoundedRect(args.vg, 0, 0, box.size.x, box.size.y, 4); | |||
| nvgFillColor(args.vg, nvgRGB(0, 0, 0)); | |||
| nvgFill(args.vg); | |||
| Widget::draw(args); | |||
| } | |||
| void setModule(HostMIDIGate* const module) | |||
| { | |||
| LedDisplaySeparator* hSeparators[6]; | |||
| LedDisplaySeparator* vSeparators[3]; | |||
| LedDisplayChoice* choices[3][6]; | |||
| // Add vSeparators | |||
| for (int x = 0; x < 3; ++x) | |||
| { | |||
| vSeparators[x] = new LedDisplaySeparator; | |||
| vSeparators[x]->box.pos = Vec(box.size.x / 3 * (x+1), 0.0f); | |||
| vSeparators[x]->box.size = Vec(1.0f, box.size.y); | |||
| addChild(vSeparators[x]); | |||
| } | |||
| // Add hSeparators and choice widgets | |||
| for (int y = 0; y < 6; ++y) | |||
| { | |||
| hSeparators[y] = new LedDisplaySeparator; | |||
| hSeparators[y]->box.pos = Vec(0.0f, box.size.y / 6 * (y+1)); | |||
| hSeparators[y]->box.size = Vec(box.size.x, 1.0f); | |||
| addChild(hSeparators[y]); | |||
| for (int x = 0; x < 3; ++x) | |||
| { | |||
| const int id = 6 * x + y; | |||
| choices[x][y] = new CardinalNoteChoice(module, id); | |||
| choices[x][y]->box.pos = Vec(box.size.x / 3 * x, box.size.y / 6 * y); | |||
| choices[x][y]->box.size = Vec(box.size.x / 3, box.size.y / 6); | |||
| addChild(choices[x][y]); | |||
| } | |||
| } | |||
| } | |||
| }; | |||
| struct HostMIDIGateWidget : ModuleWidget { | |||
| static constexpr const float startX_In = 14.0f; | |||
| static constexpr const float startX_Out = 96.0f; | |||
| static constexpr const float startY = 74.0f; | |||
| static constexpr const float startX_Out = 115.0f; | |||
| static constexpr const float startY = 190.0f; | |||
| static constexpr const float padding = 29.0f; | |||
| static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f + padding * 0.35f; | |||
| HostMIDIGate* const module; | |||
| @@ -416,12 +594,31 @@ struct HostMIDIGateWidget : ModuleWidget { | |||
| : module(m) | |||
| { | |||
| setModule(m); | |||
| setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDI.svg"))); | |||
| setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDIGate.svg"))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||
| addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||
| for (int i=0; i<18; ++i) | |||
| { | |||
| const float x = startX_In + int(i / 6) * padding; | |||
| const float y = startY + int(i % 6) * padding; | |||
| addInput(createInput<CardinalMIDILearnPJ301MPort>(Vec(x, y), module, i)); | |||
| } | |||
| for (int i=0; i<18; ++i) | |||
| { | |||
| const float x = startX_Out + int(i / 6) * padding; | |||
| const float y = startY + int(i % 6) * padding; | |||
| addOutput(createOutput<CardinalMIDILearnPJ301MPort>(Vec(x, y), module, i)); | |||
| } | |||
| NoteGridDisplay* const display = createWidget<NoteGridDisplay>(Vec(startX_In - 3.0f, 70.0f)); | |||
| display->box.size = Vec(box.size.x - startX_In * 2.0f + 6.0f, startY - 74.0f - 9.0f); | |||
| display->setModule(m); | |||
| addChild(display); | |||
| } | |||
| void draw(const DrawArgs& args) override | |||
| @@ -432,6 +629,11 @@ struct HostMIDIGateWidget : ModuleWidget { | |||
| nvgRGB(0x18, 0x19, 0x19), nvgRGB(0x21, 0x22, 0x22))); | |||
| nvgFill(args.vg); | |||
| nvgBeginPath(args.vg); | |||
| nvgRoundedRect(args.vg, startX_Out - 2.5f, startY - 2.0f, padding * 3, padding * 6, 4); | |||
| nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0)); | |||
| nvgFill(args.vg); | |||
| ModuleWidget::draw(args); | |||
| } | |||
| @@ -25,6 +25,30 @@ | |||
| using namespace rack; | |||
| struct CardinalLedDisplayChoice : LedDisplayChoice { | |||
| CardinalLedDisplayChoice(const char* const label = nullptr) | |||
| { | |||
| color = nvgRGBf(0.76f, 0.11f, 0.22f); | |||
| textOffset.y -= 4; | |||
| if (label != nullptr) | |||
| text = label; | |||
| } | |||
| void drawLayer(const DrawArgs& args, int layer) override | |||
| { | |||
| if (layer == 1) | |||
| { | |||
| nvgFillColor(args.vg, color); | |||
| nvgTextAlign(args.vg, NVG_ALIGN_CENTER); | |||
| nvgTextLetterSpacing(args.vg, 0.0f); | |||
| nvgText(args.vg, box.size.x * 0.5f, textOffset.y, text.c_str(), NULL); | |||
| } | |||
| Widget::drawLayer(args, layer); | |||
| } | |||
| }; | |||
| extern Plugin* pluginInstance; | |||
| extern Model* modelAudioFile; | |||