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.

77 lines
1.4KB

  1. #include "widgets.hpp"
  2. namespace rack {
  3. Vec ZoomWidget::getRelativeOffset(Vec v, Widget *relative) {
  4. return Widget::getRelativeOffset(v.mult(zoom), relative);
  5. }
  6. Rect ZoomWidget::getViewport(Rect r) {
  7. r.pos = r.pos.mult(zoom);
  8. r.size = r.size.mult(zoom);
  9. r = Widget::getViewport(r);
  10. r.pos = r.pos.div(zoom);
  11. r.size = r.size.div(zoom);
  12. return r;
  13. }
  14. void ZoomWidget::setZoom(float zoom) {
  15. if (zoom != this->zoom) {
  16. EventZoom e;
  17. onZoom(e);
  18. }
  19. this->zoom = zoom;
  20. }
  21. void ZoomWidget::draw(NVGcontext *vg) {
  22. nvgScale(vg, zoom, zoom);
  23. Widget::draw(vg);
  24. }
  25. void ZoomWidget::onMouseDown(EventMouseDown &e) {
  26. Vec pos = e.pos;
  27. e.pos = e.pos.div(zoom);
  28. Widget::onMouseDown(e);
  29. e.pos = pos;
  30. }
  31. void ZoomWidget::onMouseUp(EventMouseUp &e) {
  32. Vec pos = e.pos;
  33. e.pos = e.pos.div(zoom);
  34. Widget::onMouseUp(e);
  35. e.pos = pos;
  36. }
  37. void ZoomWidget::onMouseMove(EventMouseMove &e) {
  38. Vec pos = e.pos;
  39. e.pos = e.pos.div(zoom);
  40. Widget::onMouseMove(e);
  41. e.pos = pos;
  42. }
  43. void ZoomWidget::onHoverKey(EventHoverKey &e) {
  44. Vec pos = e.pos;
  45. e.pos = e.pos.div(zoom);
  46. Widget::onHoverKey(e);
  47. e.pos = pos;
  48. }
  49. void ZoomWidget::onScroll(EventScroll &e) {
  50. Vec pos = e.pos;
  51. e.pos = e.pos.div(zoom);
  52. Widget::onScroll(e);
  53. e.pos = pos;
  54. }
  55. void ZoomWidget::onPathDrop(EventPathDrop &e) {
  56. Vec pos = e.pos;
  57. e.pos = e.pos.div(zoom);
  58. Widget::onPathDrop(e);
  59. e.pos = pos;
  60. }
  61. } // namespace rack