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.

106 lines
2.2KB

  1. #include "app.hpp"
  2. #include "window.hpp"
  3. #include "util/request.hpp"
  4. #include <string.h>
  5. #include <thread>
  6. namespace rack {
  7. RackScene::RackScene() {
  8. scrollWidget = new RackScrollWidget();
  9. {
  10. zoomWidget = new ZoomWidget();
  11. {
  12. assert(!gRackWidget);
  13. gRackWidget = new RackWidget();
  14. zoomWidget->addChild(gRackWidget);
  15. }
  16. scrollWidget->container->addChild(zoomWidget);
  17. }
  18. addChild(scrollWidget);
  19. gToolbar = new Toolbar();
  20. addChild(gToolbar);
  21. scrollWidget->box.pos.y = gToolbar->box.size.y;
  22. }
  23. void RackScene::step() {
  24. // Resize owned descendants
  25. gToolbar->box.size.x = box.size.x;
  26. scrollWidget->box.size = box.size.minus(scrollWidget->box.pos);
  27. // Resize to be a bit larger than the ScrollWidget viewport
  28. gRackWidget->box.size = scrollWidget->box.size
  29. .minus(scrollWidget->container->box.pos)
  30. .plus(Vec(500, 500))
  31. .div(zoomWidget->zoom);
  32. Scene::step();
  33. zoomWidget->box.size = gRackWidget->box.size.mult(zoomWidget->zoom);
  34. }
  35. void RackScene::draw(NVGcontext *vg) {
  36. Scene::draw(vg);
  37. }
  38. void RackScene::onHoverKey(EventHoverKey &e) {
  39. Widget::onHoverKey(e);
  40. if (!e.consumed) {
  41. switch (e.key) {
  42. case GLFW_KEY_N: {
  43. if (windowIsModPressed() && !windowIsShiftPressed()) {
  44. gRackWidget->reset();
  45. e.consumed = true;
  46. }
  47. } break;
  48. case GLFW_KEY_Q: {
  49. if (windowIsModPressed() && !windowIsShiftPressed()) {
  50. windowClose();
  51. e.consumed = true;
  52. }
  53. } break;
  54. case GLFW_KEY_O: {
  55. if (windowIsModPressed() && !windowIsShiftPressed()) {
  56. gRackWidget->openDialog();
  57. e.consumed = true;
  58. }
  59. } break;
  60. case GLFW_KEY_S: {
  61. if (windowIsModPressed() && !windowIsShiftPressed()) {
  62. gRackWidget->saveDialog();
  63. e.consumed = true;
  64. }
  65. if (windowIsModPressed() && windowIsShiftPressed()) {
  66. gRackWidget->saveAsDialog();
  67. e.consumed = true;
  68. }
  69. } break;
  70. case GLFW_KEY_ENTER:
  71. case GLFW_KEY_KP_ENTER: {
  72. appModuleBrowserCreate();
  73. e.consumed = true;
  74. } break;
  75. }
  76. }
  77. }
  78. void RackScene::onPathDrop(EventPathDrop &e) {
  79. if (e.paths.size() >= 1) {
  80. const std::string& firstPath = e.paths.front();
  81. if (stringExtension(firstPath) == "vcv") {
  82. gRackWidget->loadPatch(firstPath);
  83. e.consumed = true;
  84. }
  85. }
  86. if (!e.consumed)
  87. Scene::onPathDrop(e);
  88. }
  89. } // namespace rack