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.

105 lines
2.4KB

  1. #include <sstream>
  2. #include "Squinky.hpp"
  3. #include "WidgetComposite.h"
  4. #ifdef _GMR
  5. #include "GMR.h"
  6. /**
  7. */
  8. struct GMRModule : Module
  9. {
  10. public:
  11. GMRModule();
  12. /**
  13. *
  14. * Overrides of Module functions
  15. */
  16. void step() override;
  17. void onSampleRateChange() override;
  18. GMR<WidgetComposite> gmr;
  19. private:
  20. };
  21. void GMRModule::onSampleRateChange()
  22. {
  23. float rate = engineGetSampleRate();
  24. gmr.setSampleRate(rate);
  25. }
  26. GMRModule::GMRModule()
  27. : Module(gmr.NUM_PARAMS,
  28. gmr.NUM_INPUTS,
  29. gmr.NUM_OUTPUTS,
  30. gmr.NUM_LIGHTS),
  31. gmr(this)
  32. {
  33. onSampleRateChange();
  34. gmr.init();
  35. }
  36. void GMRModule::step()
  37. {
  38. gmr.step();
  39. }
  40. ////////////////////
  41. // module widget
  42. ////////////////////
  43. struct GMRWidget : ModuleWidget
  44. {
  45. GMRWidget(GMRModule *);
  46. void addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK)
  47. {
  48. Label* label = new Label();
  49. label->box.pos = v;
  50. label->text = str;
  51. label->color = color;
  52. addChild(label);
  53. }
  54. };
  55. /**
  56. * Widget constructor will describe my implementation structure and
  57. * provide meta-data.
  58. * This is not shared by all modules in the DLL, just one
  59. */
  60. GMRWidget::GMRWidget(GMRModule *module) : ModuleWidget(module)
  61. {
  62. box.size = Vec(6 * 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. addInput(Port::create<PJ301MPort>(
  70. Vec(40, 200), Port::INPUT, module, module->gmr.CLOCK_INPUT));
  71. addOutput(Port::create<PJ301MPort>(
  72. Vec(40, 300), Port::OUTPUT, module, module->gmr.TRIGGER_OUTPUT));
  73. // screws
  74. addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0)));
  75. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
  76. addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  77. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  78. }
  79. RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, GMR) {
  80. Model *modelGMRModule = Model::create<GMRModule,
  81. GMRWidget>("Squinky Labs",
  82. "squinkylabs-GMR",
  83. "GMR", EFFECT_TAG, LFO_TAG);
  84. return modelGMRModule;
  85. }
  86. #endif