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.

50 lines
856B

  1. #include "app.hpp"
  2. #include "window.hpp"
  3. #include "engine.hpp"
  4. namespace rack {
  5. #define KNOB_SENSITIVITY 0.0015
  6. void Knob::onDragStart(EventDragStart &e) {
  7. windowCursorLock();
  8. dragValue = value;
  9. randomizable = false;
  10. }
  11. void Knob::onDragMove(EventDragMove &e) {
  12. float range = maxValue - minValue;
  13. float delta = KNOB_SENSITIVITY * -e.mouseRel.y * speed;
  14. if (isfinite(range))
  15. delta *= range;
  16. // Drag slower if Mod is held
  17. if (windowIsModPressed())
  18. delta /= 16.0;
  19. dragValue += delta;
  20. if (snap)
  21. setValue(roundf(dragValue));
  22. else
  23. setValue(dragValue);
  24. }
  25. void Knob::onDragEnd(EventDragEnd &e) {
  26. windowCursorUnlock();
  27. randomizable = true;
  28. }
  29. void Knob::onChange(EventChange &e) {
  30. if (!module)
  31. return;
  32. if (snap)
  33. engineSetParam(module, paramId, value);
  34. else
  35. engineSetParamSmooth(module, paramId, value);
  36. }
  37. } // namespace rack