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.

96 lines
2.1KB

  1. #pragma once
  2. #include "util.hpp"
  3. #include "math.hpp"
  4. #include "asset.hpp"
  5. #include "plugin.hpp"
  6. #include "engine.hpp"
  7. #include "gui.hpp"
  8. #include "app.hpp"
  9. #include "components.hpp"
  10. namespace rack {
  11. ////////////////////
  12. // helpers
  13. ////////////////////
  14. inline Vec in2px(Vec inches) {
  15. return inches.mult(SVG_DPI);
  16. }
  17. inline Vec mm2px(Vec millimeters) {
  18. return millimeters.mult(SVG_DPI / 25.4);
  19. }
  20. template <class TModuleWidget>
  21. Model *createModel(std::string manufacturerSlug, std::string manufacturerName, std::string slug, std::string name) {
  22. struct TModel : Model {
  23. ModuleWidget *createModuleWidget() override {
  24. ModuleWidget *moduleWidget = new TModuleWidget();
  25. moduleWidget->model = this;
  26. return moduleWidget;
  27. }
  28. };
  29. Model *model = new TModel();
  30. model->slug = slug;
  31. model->name = name;
  32. model->manufacturerSlug = manufacturerSlug;
  33. model->manufacturerName = manufacturerName;
  34. return model;
  35. }
  36. template <class TScrew>
  37. Widget *createScrew(Vec pos) {
  38. Widget *screw = new TScrew();
  39. screw->box.pos = pos;
  40. return screw;
  41. }
  42. template <class TParamWidget>
  43. ParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) {
  44. ParamWidget *param = new TParamWidget();
  45. param->box.pos = pos;
  46. param->module = module;
  47. param->paramId = paramId;
  48. param->setLimits(minValue, maxValue);
  49. param->setDefaultValue(defaultValue);
  50. return param;
  51. }
  52. template <class TPort>
  53. Port *createInput(Vec pos, Module *module, int inputId) {
  54. Port *port = new TPort();
  55. port->box.pos = pos;
  56. port->module = module;
  57. port->type = Port::INPUT;
  58. port->portId = inputId;
  59. return port;
  60. }
  61. template <class TPort>
  62. Port *createOutput(Vec pos, Module *module, int outputId) {
  63. Port *port = new TPort();
  64. port->box.pos = pos;
  65. port->module = module;
  66. port->type = Port::OUTPUT;
  67. port->portId = outputId;
  68. return port;
  69. }
  70. template<class TModuleLightWidget>
  71. ModuleLightWidget *createLight(Vec pos, Module *module, int lightId) {
  72. ModuleLightWidget *light = new TModuleLightWidget();
  73. light->box.pos = pos;
  74. light->module = module;
  75. light->lightId = lightId;
  76. return light;
  77. }
  78. } // namespace rack