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.

144 lines
3.5KB

  1. #include "Squinky.hpp"
  2. #include "WidgetComposite.h"
  3. #ifdef _DG
  4. #include "daveguide.h"
  5. /**
  6. */
  7. struct DGModule : Module
  8. {
  9. public:
  10. DGModule();
  11. /**
  12. *
  13. *
  14. * Overrides of Module functions
  15. */
  16. void step() override;
  17. Daveguide<WidgetComposite> dave;
  18. private:
  19. };
  20. DGModule::DGModule()
  21. : Module(dave.NUM_PARAMS,
  22. dave.NUM_INPUTS,
  23. dave.NUM_OUTPUTS,
  24. dave.NUM_LIGHTS),
  25. dave(this)
  26. {
  27. }
  28. void DGModule::step()
  29. {
  30. dave.step();
  31. }
  32. ////////////////////
  33. // module widget
  34. ////////////////////
  35. struct DGWidget : ModuleWidget
  36. {
  37. DGWidget(DGModule *);
  38. /**
  39. * Helper to add a text label to this widget
  40. */
  41. Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK)
  42. {
  43. Label* label = new Label();
  44. label->box.pos = v;
  45. label->text = str;
  46. label->color = color;
  47. addChild(label);
  48. return label;
  49. }
  50. private:
  51. DGModule* const module;
  52. };
  53. /**
  54. * Widget constructor will describe my implementation structure and
  55. * provide meta-data.
  56. * This is not shared by all modules in the DLL, just one
  57. */
  58. DGWidget::DGWidget(DGModule *module) :
  59. ModuleWidget(module),
  60. module(module)
  61. {
  62. box.size = Vec(10 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT);
  63. {
  64. SVGPanel *panel = new SVGPanel();
  65. panel->box.size = box.size;
  66. panel->setBackground(SVG::load(assetPlugin(plugin, "res/blank_panel.svg")));
  67. addChild(panel);
  68. }
  69. addLabel(Vec(35, 20), "Daveguide");
  70. addInput(createInputCentered<PJ301MPort>(
  71. Vec(40, 340),
  72. module,
  73. Daveguide<WidgetComposite>::AUDIO_INPUT));
  74. addOutput(createOutputCentered<PJ301MPort>(
  75. Vec(120, 340),
  76. module,
  77. Daveguide<WidgetComposite>::AUDIO_OUTPUT));
  78. const float labelDeltaY = 25;
  79. const float gainX = 40;
  80. const float offsetX = 114;
  81. const float labelDeltaX = -20;
  82. const float y = 100;
  83. const float y2 = y + 70;
  84. addParam(createParamCentered<Rogan1PSBlue>(
  85. Vec(gainX, y),
  86. module, Daveguide<WidgetComposite>::OCTAVE_PARAM, -5, 5, 0));
  87. addLabel(Vec(gainX + labelDeltaX, y + labelDeltaY), "octave");
  88. addParam(createParamCentered<Rogan1PSBlue>(
  89. Vec(offsetX, y),
  90. module, Daveguide<WidgetComposite>::TUNE_PARAM, -5, 5, 0));
  91. addLabel(Vec(offsetX + labelDeltaX, y + labelDeltaY), "tune");
  92. addParam(createParamCentered<Rogan1PSBlue>(
  93. Vec(gainX, y2),
  94. module, Daveguide<WidgetComposite>::DECAY_PARAM, -5, 5, 0));
  95. addLabel(Vec(gainX + labelDeltaX, y2 + labelDeltaY), "decay");
  96. addParam(createParamCentered<Rogan1PSBlue>(
  97. Vec(offsetX, y2),
  98. module, Daveguide<WidgetComposite>::FC_PARAM, -5, 5, 0));
  99. addLabel(Vec(offsetX + labelDeltaX, y2 + labelDeltaY), "filter");
  100. // screws
  101. addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0)));
  102. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
  103. addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  104. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  105. }
  106. RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, DG) {
  107. Model *modelDGModule = Model::create<DGModule,
  108. DGWidget>("Squinky Labs",
  109. "squinkylabs-dvg",
  110. "dg", EFFECT_TAG, OSCILLATOR_TAG, WAVESHAPER_TAG);
  111. return modelDGModule;
  112. }
  113. #endif