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.

52 lines
1.3KB

  1. #pragma once
  2. #include "rack.hpp"
  3. using namespace rack;
  4. struct JWModuleResizeHandle : Widget {
  5. float minWidth;
  6. bool right = false;
  7. float dragX;
  8. Rect originalBox;
  9. JWModuleResizeHandle(float _minWidth) {
  10. box.size = Vec(RACK_GRID_WIDTH * 1, RACK_GRID_HEIGHT);
  11. minWidth = _minWidth;
  12. }
  13. void onMouseDown(EventMouseDown &e) override {
  14. if (e.button == 0) {
  15. e.consumed = true;
  16. e.target = this;
  17. }
  18. }
  19. void onDragStart(EventDragStart &e) override {
  20. dragX = RACK_PLUGIN_UI_RACKWIDGET->lastMousePos.x;
  21. ModuleWidget *m = getAncestorOfType<ModuleWidget>();
  22. originalBox = m->box;
  23. }
  24. void onDragMove(EventDragMove &e) override {
  25. ModuleWidget *m = getAncestorOfType<ModuleWidget>();
  26. float newDragX = RACK_PLUGIN_UI_RACKWIDGET->lastMousePos.x;
  27. float deltaX = newDragX - dragX;
  28. Rect newBox = originalBox;
  29. if (right) {
  30. newBox.size.x += deltaX;
  31. newBox.size.x = fmaxf(newBox.size.x, minWidth);
  32. newBox.size.x = roundf(newBox.size.x / RACK_GRID_WIDTH) * RACK_GRID_WIDTH;
  33. }
  34. else {
  35. newBox.size.x -= deltaX;
  36. newBox.size.x = fmaxf(newBox.size.x, minWidth);
  37. newBox.size.x = roundf(newBox.size.x / RACK_GRID_WIDTH) * RACK_GRID_WIDTH;
  38. newBox.pos.x = originalBox.pos.x + originalBox.size.x - newBox.size.x;
  39. }
  40. RACK_PLUGIN_UI_RACKWIDGET->requestModuleBox(m, newBox);
  41. }
  42. };