Add panel for midi in expander
This commit is contained in:
parent
54fccf2a9e
commit
4a629b46c3
9 changed files with 311 additions and 35 deletions
107
plugins/Cardinal/orig/ExpanderMIDI.svg
Normal file
107
plugins/Cardinal/orig/ExpanderMIDI.svg
Normal file
|
|
@ -0,0 +1,107 @@
|
||||||
|
<?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="15.24mm"
|
||||||
|
height="128.5mm"
|
||||||
|
viewBox="0 0 15.24 128.5"
|
||||||
|
version="1.1"
|
||||||
|
id="svg4620"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="ExpanderMIDI.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.979899"
|
||||||
|
inkscape:cx="-89.97092"
|
||||||
|
inkscape:cy="317.24373"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1015"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
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
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="g5299"
|
||||||
|
transform="matrix(6.342689,0,0,6.342689,4.4921904,175.6457)">
|
||||||
|
<g
|
||||||
|
transform="translate(-1.6191379e-5,-0.08553947)"
|
||||||
|
id="Layer_x0020_1"
|
||||||
|
inkscape:label="Layer 1">
|
||||||
|
<metadata
|
||||||
|
id="CorelCorpID_0Corel-Layer" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.0966867;stroke-opacity:1"
|
||||||
|
id="circle10"
|
||||||
|
r="0.15916"
|
||||||
|
cy="0.61075097"
|
||||||
|
cx="0.525226"
|
||||||
|
class="fil0 str0" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.193345;stroke-opacity:1"
|
||||||
|
id="circle12"
|
||||||
|
r="0.42853901"
|
||||||
|
cy="0.61075097"
|
||||||
|
cx="0.525226"
|
||||||
|
class="fil0 str1" />
|
||||||
|
</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="2.3347058"
|
||||||
|
y="188.65312"
|
||||||
|
id="text845"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan843"
|
||||||
|
x="2.3347058"
|
||||||
|
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">MIDI</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
117
plugins/Cardinal/res/ExpanderMIDI.svg
Normal file
117
plugins/Cardinal/res/ExpanderMIDI.svg
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
<?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="15.24mm"
|
||||||
|
height="128.5mm"
|
||||||
|
viewBox="0 0 15.24 128.5"
|
||||||
|
version="1.1"
|
||||||
|
id="svg4620"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="ExpanderMIDI.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.979899"
|
||||||
|
inkscape:cx="-188.96587"
|
||||||
|
inkscape:cy="317.24373"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1015"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
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
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
id="g5299"
|
||||||
|
transform="matrix(6.342689,0,0,6.342689,4.4921904,175.6457)">
|
||||||
|
<g
|
||||||
|
transform="translate(-1.6191379e-5,-0.08553947)"
|
||||||
|
id="Layer_x0020_1"
|
||||||
|
inkscape:label="Layer 1">
|
||||||
|
<metadata
|
||||||
|
id="CorelCorpID_0Corel-Layer" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.0966867;stroke-opacity:1"
|
||||||
|
id="circle10"
|
||||||
|
r="0.15916"
|
||||||
|
cy="0.61075097"
|
||||||
|
cx="0.525226"
|
||||||
|
class="fil0 str0" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.193345;stroke-opacity:1"
|
||||||
|
id="circle12"
|
||||||
|
r="0.42853901"
|
||||||
|
cy="0.61075097"
|
||||||
|
cx="0.525226"
|
||||||
|
class="fil0 str1" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
aria-label="MIDI"
|
||||||
|
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 2.8194309,185.05265 h 0.7258818 l 0.9188071,2.45015 0.9236303,-2.45015 h 0.7258818 v 3.60047 H 5.6385531 v -3.16156 L 4.7100997,187.961 H 4.2205515 l -0.9284534,-2.46944 v 3.16156 H 2.8194309 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="path820" />
|
||||||
|
<path
|
||||||
|
d="m 7.0830818,185.05265 h 0.4871366 v 3.60047 H 7.0830818 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="path822" />
|
||||||
|
<path
|
||||||
|
d="m 9.0268052,185.45297 v 2.79983 h 0.5884225 q 0.7451743,0 1.0900283,-0.33762 0.347266,-0.33762 0.347266,-1.06591 0,-0.72347 -0.347266,-1.05868 -0.344854,-0.33762 -1.0900283,-0.33762 z m -0.4871366,-0.40032 h 1.0008005 q 1.0466199,0 1.5361679,0.4365 0.489549,0.43408 0.489549,1.36012 0,0.93086 -0.49196,1.36736 -0.49196,0.43649 -1.5337569,0.43649 H 8.5396686 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="path824" />
|
||||||
|
<path
|
||||||
|
d="m 12.340298,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="path826" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.6 KiB |
|
|
@ -16,10 +16,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "plugincontext.hpp"
|
#include "plugincontext.hpp"
|
||||||
|
#include "ModuleWidgets.hpp"
|
||||||
#include "extra/Thread.hpp"
|
#include "extra/Thread.hpp"
|
||||||
|
|
||||||
#include "dgl/src/nanovg/nanovg.h"
|
|
||||||
|
|
||||||
#include "CarlaNativePlugin.h"
|
#include "CarlaNativePlugin.h"
|
||||||
|
|
||||||
#ifndef HEADLESS
|
#ifndef HEADLESS
|
||||||
|
|
@ -470,7 +469,7 @@ struct AudioFileListWidget : ImGuiWidget {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AudioFileWidget : ModuleWidget {
|
struct AudioFileWidget : ModuleWidgetWithSideScrews<> {
|
||||||
static constexpr const float padding = 29.0f;
|
static constexpr const float padding = 29.0f;
|
||||||
|
|
||||||
CarlaInternalPluginModule* const module;
|
CarlaInternalPluginModule* const module;
|
||||||
|
|
@ -479,16 +478,12 @@ struct AudioFileWidget : ModuleWidget {
|
||||||
float lastPosition = 0.0f;
|
float lastPosition = 0.0f;
|
||||||
|
|
||||||
AudioFileWidget(CarlaInternalPluginModule* const m)
|
AudioFileWidget(CarlaInternalPluginModule* const m)
|
||||||
: ModuleWidget(),
|
: module(m)
|
||||||
module(m)
|
|
||||||
{
|
{
|
||||||
setModule(module);
|
setModule(module);
|
||||||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/AudioFile.svg")));
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/AudioFile.svg")));
|
||||||
|
|
||||||
addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0)));
|
createAndAddScrews();
|
||||||
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)));
|
|
||||||
|
|
||||||
addOutput(createOutput<PJ301MPort>(Vec(box.size.x - RACK_GRID_WIDTH * 5/2 - padding,
|
addOutput(createOutput<PJ301MPort>(Vec(box.size.x - RACK_GRID_WIDTH * 5/2 - padding,
|
||||||
RACK_GRID_HEIGHT - RACK_GRID_WIDTH - padding), module, 0));
|
RACK_GRID_HEIGHT - RACK_GRID_WIDTH - padding), module, 0));
|
||||||
|
|
|
||||||
|
|
@ -453,7 +453,8 @@ struct CarlaModuleWidget : ModuleWidgetWith9HP, IdleCallback {
|
||||||
{
|
{
|
||||||
setModule(module);
|
setModule(module);
|
||||||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/Carla.svg")));
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/Carla.svg")));
|
||||||
setSideScrews();
|
|
||||||
|
createAndAddScrews();
|
||||||
|
|
||||||
for (uint i=0; i<CarlaModule::NUM_INPUTS; ++i)
|
for (uint i=0; i<CarlaModule::NUM_INPUTS; ++i)
|
||||||
createAndAddInput(i);
|
createAndAddInput(i);
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Expander.hpp"
|
#include "Expander.hpp"
|
||||||
|
#include "ModuleWidgets.hpp"
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -205,19 +206,63 @@ struct CardinalExpanderForInputMIDI : CardinalExpanderFromCVToCarlaMIDI {
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
struct CardinalExpanderForInputMIDIWidget : ModuleWidget {
|
struct CardinalExpanderForInputMIDIWidget : ModuleWidgetWithSideScrews<> {
|
||||||
|
static constexpr const float startX = 14.0f;
|
||||||
|
static constexpr const float startY = 90.0f;
|
||||||
|
static constexpr const float padding = 49.0f;
|
||||||
|
|
||||||
CardinalExpanderForInputMIDIWidget(CardinalExpanderForInputMIDI* const module)
|
CardinalExpanderForInputMIDIWidget(CardinalExpanderForInputMIDI* const module)
|
||||||
{
|
{
|
||||||
setModule(module);
|
setModule(module);
|
||||||
box.size.x = RACK_GRID_WIDTH * 2;
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/ExpanderMIDI.svg")));
|
||||||
|
|
||||||
addChild(createWidget<ScrewBlack>(Vec(0, 0)));
|
|
||||||
addChild(createWidget<ScrewBlack>(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
|
|
||||||
addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0)));
|
addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0)));
|
||||||
addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
|
addChild(createWidget<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
|
||||||
|
|
||||||
for (int i=0; i<6; ++i)
|
for (int i=0; i<CardinalExpanderForInputMIDI::NUM_INPUTS; ++i)
|
||||||
addInput(createInput<PJ301MPort>(Vec(15, 50 + 29 * i), module, i));
|
addInput(createInput<PJ301MPort>(Vec(startX + 5.0f, startY + padding * i), module, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawOutputJacksArea(NVGcontext* const vg, const int numOutputs) {
|
||||||
|
nvgBeginPath(vg);
|
||||||
|
nvgRoundedRect(vg, 12.0f, startY - 2.0f, box.size.x - 12.0f, padding * numOutputs, 4);
|
||||||
|
nvgFillColor(vg, nvgRGB(0xd0, 0xd0, 0xd0));
|
||||||
|
nvgFill(vg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw(const DrawArgs& args) override
|
||||||
|
{
|
||||||
|
drawBackground(args.vg);
|
||||||
|
|
||||||
|
nvgScissor(args.vg, startX, 0.0f, box.size.x - startX, box.size.y);
|
||||||
|
|
||||||
|
for (int i=0; i<CardinalExpanderForInputMIDI::NUM_INPUTS; ++i)
|
||||||
|
{
|
||||||
|
const float y = startY + i* padding;
|
||||||
|
|
||||||
|
nvgBeginPath(args.vg);
|
||||||
|
nvgRoundedRect(args.vg, startX, y - 19.0f, box.size.x, padding - 4.0f, 4);
|
||||||
|
nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0));
|
||||||
|
nvgFill(args.vg);
|
||||||
|
}
|
||||||
|
|
||||||
|
nvgResetScissor(args.vg);
|
||||||
|
|
||||||
|
nvgBeginPath(args.vg);
|
||||||
|
nvgRect(args.vg, box.size.x * 0.5f, 0, box.size.x, box.size.y);
|
||||||
|
nvgFillColor(args.vg, color::BLACK);
|
||||||
|
nvgFontFaceId(args.vg, 0);
|
||||||
|
nvgFontSize(args.vg, 11);
|
||||||
|
nvgTextAlign(args.vg, NVG_ALIGN_CENTER);
|
||||||
|
|
||||||
|
nvgText(args.vg, box.size.x * 0.666f, startY + padding * 0 - 4.0f, "V/Oct", nullptr);
|
||||||
|
nvgText(args.vg, box.size.x * 0.666f, startY + padding * 1 - 4.0f, "Gate", nullptr);
|
||||||
|
nvgText(args.vg, box.size.x * 0.666f, startY + padding * 2 - 4.0f, "Vel", nullptr);
|
||||||
|
nvgText(args.vg, box.size.x * 0.666f, startY + padding * 3 - 4.0f, "Aft", nullptr);
|
||||||
|
nvgText(args.vg, box.size.x * 0.666f, startY + padding * 4 - 4.0f, "PW", nullptr);
|
||||||
|
nvgText(args.vg, box.size.x * 0.666f, startY + padding * 5 - 4.0f, "MW", nullptr);
|
||||||
|
|
||||||
|
ModuleWidgetWithSideScrews::draw(args);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,8 @@ struct HostAudioWidget : ModuleWidgetWith8HP {
|
||||||
{
|
{
|
||||||
setModule(m);
|
setModule(m);
|
||||||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostAudio.svg")));
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostAudio.svg")));
|
||||||
setSideScrews();
|
|
||||||
|
createAndAddScrews();
|
||||||
|
|
||||||
for (uint i=0; i<numIO; ++i)
|
for (uint i=0; i<numIO; ++i)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,8 @@ struct HostCVWidget : ModuleWidgetWith8HP {
|
||||||
{
|
{
|
||||||
setModule(module);
|
setModule(module);
|
||||||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostCV.svg")));
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostCV.svg")));
|
||||||
setSideScrews();
|
|
||||||
|
createAndAddScrews();
|
||||||
|
|
||||||
for (uint i=0; i<HostCV::NUM_INPUTS; ++i)
|
for (uint i=0; i<HostCV::NUM_INPUTS; ++i)
|
||||||
createAndAddInput(i);
|
createAndAddInput(i);
|
||||||
|
|
|
||||||
|
|
@ -670,7 +670,8 @@ struct HostMIDIWidget : ModuleWidgetWith9HP {
|
||||||
{
|
{
|
||||||
setModule(m);
|
setModule(m);
|
||||||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDI.svg")));
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/HostMIDI.svg")));
|
||||||
setSideScrews();
|
|
||||||
|
createAndAddScrews();
|
||||||
|
|
||||||
createAndAddInput(0, HostMIDI::PITCH_INPUT);
|
createAndAddInput(0, HostMIDI::PITCH_INPUT);
|
||||||
createAndAddInput(1, HostMIDI::GATE_INPUT);
|
createAndAddInput(1, HostMIDI::GATE_INPUT);
|
||||||
|
|
|
||||||
|
|
@ -25,28 +25,13 @@
|
||||||
|
|
||||||
using namespace rack;
|
using namespace rack;
|
||||||
|
|
||||||
template<int startX_Out>
|
template<int startX_Out = 0>
|
||||||
struct ModuleWidgetWithSideScrews : ModuleWidget {
|
struct ModuleWidgetWithSideScrews : ModuleWidget {
|
||||||
static constexpr const float startX_In = 14.0f;
|
static constexpr const float startX_In = 14.0f;
|
||||||
static constexpr const float startY = 74.0f;
|
static constexpr const float startY = 74.0f;
|
||||||
static constexpr const float padding = 29.0f;
|
static constexpr const float padding = 29.0f;
|
||||||
static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f + padding * 0.35f;
|
static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f + padding * 0.35f;
|
||||||
|
|
||||||
void setSideScrews() {
|
|
||||||
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)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void setupTextLines(NVGcontext* const vg) {
|
|
||||||
nvgBeginPath(vg);
|
|
||||||
nvgRect(vg, startX_Out - 2.5f, startY - 2.0f, padding, padding);
|
|
||||||
nvgFontFaceId(vg, 0);
|
|
||||||
nvgFontSize(vg, 11);
|
|
||||||
nvgTextAlign(vg, NVG_ALIGN_CENTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
void createAndAddInput(const uint paramId) {
|
void createAndAddInput(const uint paramId) {
|
||||||
createAndAddInput(paramId, paramId);
|
createAndAddInput(paramId, paramId);
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +48,20 @@ struct ModuleWidgetWithSideScrews : ModuleWidget {
|
||||||
addOutput(createOutput<PJ301MPort>(Vec(startX_Out, startY + padding * posY), module, paramId));
|
addOutput(createOutput<PJ301MPort>(Vec(startX_Out, startY + padding * posY), module, paramId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void createAndAddScrews() {
|
||||||
|
if (box.size.x > RACK_GRID_WIDTH * 3) {
|
||||||
|
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)));
|
||||||
|
} else {
|
||||||
|
addChild(createWidget<ScrewBlack>(Vec(0, 0)));
|
||||||
|
addChild(createWidget<ScrewBlack>(Vec(box.size.x - RACK_GRID_WIDTH, 0)));
|
||||||
|
addChild(createWidget<ScrewBlack>(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
|
||||||
|
addChild(createWidget<ScrewBlack>(Vec(box.size.x - RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void drawBackground(NVGcontext* const vg) {
|
void drawBackground(NVGcontext* const vg) {
|
||||||
nvgBeginPath(vg);
|
nvgBeginPath(vg);
|
||||||
nvgRect(vg, 0, 0, box.size.x, box.size.y);
|
nvgRect(vg, 0, 0, box.size.x, box.size.y);
|
||||||
|
|
@ -84,7 +83,16 @@ struct ModuleWidgetWithSideScrews : ModuleWidget {
|
||||||
nvgFillColor(vg, color::WHITE);
|
nvgFillColor(vg, color::WHITE);
|
||||||
nvgText(vg, middleX, y + 16, text, nullptr);
|
nvgText(vg, middleX, y + 16, text, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setupTextLines(NVGcontext* const vg) {
|
||||||
|
nvgBeginPath(vg);
|
||||||
|
nvgRect(vg, startX_Out - 2.5f, startY - 2.0f, padding, padding);
|
||||||
|
nvgFontFaceId(vg, 0);
|
||||||
|
nvgFontSize(vg, 11);
|
||||||
|
nvgTextAlign(vg, NVG_ALIGN_CENTER);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef ModuleWidgetWithSideScrews<0> ModuleWidgetWith3HP;
|
||||||
typedef ModuleWidgetWithSideScrews<81> ModuleWidgetWith8HP;
|
typedef ModuleWidgetWithSideScrews<81> ModuleWidgetWith8HP;
|
||||||
typedef ModuleWidgetWithSideScrews<96> ModuleWidgetWith9HP;
|
typedef ModuleWidgetWithSideScrews<96> ModuleWidgetWith9HP;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue