You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
5.5KB

  1. #include "ShaperPlus.hpp"
  2. struct ShaperPlusWidget : ModuleWidget {
  3. static constexpr int hp = 15;
  4. ShaperPlusWidget(ShaperPlus* module) : ModuleWidget(module) {
  5. box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
  6. {
  7. SVGPanel *panel = new SVGPanel();
  8. panel->box.size = box.size;
  9. panel->setBackground(SVG::load(assetPlugin(plugin, "res/ShaperPlus.svg")));
  10. addChild(panel);
  11. }
  12. addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
  13. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
  14. addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
  15. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));
  16. // generated by svg_widgets.rb
  17. auto attackParamPosition = Vec(29.08, 33.08);
  18. auto triggerParamPosition = Vec(89.04, 43.04);
  19. auto onParamPosition = Vec(29.08, 89.08);
  20. auto speedParamPosition = Vec(119.0, 96.0);
  21. auto decayParamPosition = Vec(29.08, 145.08);
  22. auto loopParamPosition = Vec(119.0, 152.0);
  23. auto offParamPosition = Vec(29.08, 201.08);
  24. auto envParamPosition = Vec(82.38, 257.08);
  25. auto signalParamPosition = Vec(82.38, 313.08);
  26. auto triggerInputPosition = Vec(114.0, 40.0);
  27. auto attackInputPosition = Vec(152.0, 40.0);
  28. auto onInputPosition = Vec(152.0, 96.0);
  29. auto decayInputPosition = Vec(152.0, 152.0);
  30. auto offInputPosition = Vec(152.0, 208.0);
  31. auto envInputPosition = Vec(152.0, 264.0);
  32. auto signalInputPosition = Vec(11.5, 320.0);
  33. auto signalcvInputPosition = Vec(152.0, 320.0);
  34. auto attackOutputPosition = Vec(189.0, 40.0);
  35. auto onOutputPosition = Vec(189.0, 96.0);
  36. auto decayOutputPosition = Vec(189.0, 152.0);
  37. auto offOutputPosition = Vec(189.0, 208.0);
  38. auto envOutputPosition = Vec(11.5, 264.0);
  39. auto invOutputPosition = Vec(40.5, 264.0);
  40. auto triggerOutputPosition = Vec(189.0, 264.0);
  41. auto signalOutputPosition = Vec(40.5, 320.0);
  42. auto attackLightPosition = Vec(12.0, 80.0);
  43. auto onLightPosition = Vec(12.0, 121.0);
  44. auto decayLightPosition = Vec(12.0, 189.0);
  45. auto offLightPosition = Vec(12.0, 237.0);
  46. // end generated by svg_widgets.rb
  47. addParam(ParamWidget::create<Knob38>(attackParamPosition, module, ShaperPlus::ATTACK_PARAM, 0.0, 1.0, 0.12));
  48. addParam(ParamWidget::create<Knob38>(onParamPosition, module, ShaperPlus::ON_PARAM, 0.0, 1.0, 0.32));
  49. addParam(ParamWidget::create<Knob38>(decayParamPosition, module, ShaperPlus::DECAY_PARAM, 0.0, 1.0, 0.32));
  50. addParam(ParamWidget::create<Knob38>(offParamPosition, module, ShaperPlus::OFF_PARAM, 0.0, 1.0, 0.07));
  51. addParam(ParamWidget::create<Knob38>(envParamPosition, module, ShaperPlus::ENV_PARAM, 0.0, 1.0, 1.0));
  52. addParam(ParamWidget::create<Knob38>(signalParamPosition, module, ShaperPlus::SIGNAL_PARAM, 0.0, 1.0, 0.1));
  53. addParam(ParamWidget::create<Button18>(triggerParamPosition, module, ShaperPlus::TRIGGER_PARAM, 0.0, 1.0, 0.0));
  54. addInput(Port::create<Port24>(triggerInputPosition, Port::INPUT, module, ShaperPlus::TRIGGER_INPUT));
  55. addParam(ParamWidget::create<SliderSwitch2State14>(speedParamPosition, module, ShaperPlus::SPEED_PARAM, 0.0, 1.0, 1.0));
  56. addParam(ParamWidget::create<SliderSwitch2State14>(loopParamPosition, module, ShaperPlus::LOOP_PARAM, 0.0, 1.0, 1.0));
  57. addOutput(Port::create<Port24>(triggerOutputPosition, Port::OUTPUT, module, ShaperPlus::TRIGGER_OUTPUT));
  58. addOutput(Port::create<Port24>(envOutputPosition, Port::OUTPUT, module, ShaperPlus::ENV_OUTPUT));
  59. addOutput(Port::create<Port24>(invOutputPosition, Port::OUTPUT, module, ShaperPlus::INV_OUTPUT));
  60. addInput(Port::create<Port24>(signalInputPosition, Port::INPUT, module, ShaperPlus::SIGNAL_INPUT));
  61. addOutput(Port::create<Port24>(signalOutputPosition, Port::OUTPUT, module, ShaperPlus::SIGNAL_OUTPUT));
  62. addInput(Port::create<Port24>(attackInputPosition, Port::INPUT, module, ShaperPlus::ATTACK_INPUT));
  63. addInput(Port::create<Port24>(onInputPosition, Port::INPUT, module, ShaperPlus::ON_INPUT));
  64. addInput(Port::create<Port24>(decayInputPosition, Port::INPUT, module, ShaperPlus::DECAY_INPUT));
  65. addInput(Port::create<Port24>(offInputPosition, Port::INPUT, module, ShaperPlus::OFF_INPUT));
  66. addInput(Port::create<Port24>(envInputPosition, Port::INPUT, module, ShaperPlus::ENV_INPUT));
  67. addInput(Port::create<Port24>(signalcvInputPosition, Port::INPUT, module, ShaperPlus::SIGNALCV_INPUT));
  68. addOutput(Port::create<Port24>(attackOutputPosition, Port::OUTPUT, module, ShaperPlus::ATTACK_OUTPUT));
  69. addOutput(Port::create<Port24>(onOutputPosition, Port::OUTPUT, module, ShaperPlus::ON_OUTPUT));
  70. addOutput(Port::create<Port24>(decayOutputPosition, Port::OUTPUT, module, ShaperPlus::DECAY_OUTPUT));
  71. addOutput(Port::create<Port24>(offOutputPosition, Port::OUTPUT, module, ShaperPlus::OFF_OUTPUT));
  72. addChild(ModuleLightWidget::create<TinyLight<GreenLight>>(attackLightPosition, module, ShaperPlus::ATTACK_LIGHT));
  73. addChild(ModuleLightWidget::create<TinyLight<GreenLight>>(onLightPosition, module, ShaperPlus::ON_LIGHT));
  74. addChild(ModuleLightWidget::create<TinyLight<GreenLight>>(decayLightPosition, module, ShaperPlus::DECAY_LIGHT));
  75. addChild(ModuleLightWidget::create<TinyLight<GreenLight>>(offLightPosition, module, ShaperPlus::OFF_LIGHT));
  76. }
  77. void appendContextMenu(Menu* menu) override {
  78. ShaperPlus* shaperPlus = dynamic_cast<ShaperPlus*>(module);
  79. assert(shaperPlus);
  80. menu->addChild(new MenuLabel());
  81. menu->addChild(new TriggerOnLoadMenuItem(shaperPlus, "Resume Loop on Load"));
  82. }
  83. };
  84. RACK_PLUGIN_MODEL_INIT(Bogaudio, ShaperPlus) {
  85. Model *modelShaperPlus = createModel<ShaperPlus, ShaperPlusWidget>("Bogaudio-ShaperPlus", "Shaper+", "envelope and amplifier", ENVELOPE_GENERATOR_TAG, AMPLIFIER_TAG);
  86. return modelShaperPlus;
  87. }