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.

53 lines
1.1KB

  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. onZoom();
  17. this->zoom = zoom;
  18. }
  19. void ZoomWidget::draw(NVGcontext *vg) {
  20. nvgScale(vg, zoom, zoom);
  21. Widget::draw(vg);
  22. }
  23. Widget *ZoomWidget::onMouseDown(Vec pos, int button) {
  24. return Widget::onMouseDown(pos.div(zoom), button);
  25. }
  26. Widget *ZoomWidget::onMouseUp(Vec pos, int button) {
  27. return Widget::onMouseUp(pos.div(zoom), button);
  28. }
  29. Widget *ZoomWidget::onMouseMove(Vec pos, Vec mouseRel) {
  30. return Widget::onMouseMove(pos.div(zoom), mouseRel);
  31. }
  32. Widget *ZoomWidget::onHoverKey(Vec pos, int key) {
  33. return Widget::onHoverKey(pos.div(zoom), key);
  34. }
  35. Widget *ZoomWidget::onScroll(Vec pos, Vec scrollRel) {
  36. return Widget::onScroll(pos.div(zoom), scrollRel);
  37. }
  38. } // namespace rack