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.

55 lines
1.6KB

  1. #include "app/RackRail.hpp"
  2. namespace rack {
  3. namespace app {
  4. void RackRail::draw(const DrawArgs &args) {
  5. const float railHeight = RACK_GRID_WIDTH;
  6. // Background color
  7. nvgBeginPath(args.vg);
  8. nvgRect(args.vg, 0.0, 0.0, box.size.x, box.size.y);
  9. nvgFillColor(args.vg, nvgRGBf(0.2, 0.2, 0.2));
  10. nvgFill(args.vg);
  11. // Rails
  12. nvgFillColor(args.vg, nvgRGBf(0.85, 0.85, 0.85));
  13. nvgStrokeWidth(args.vg, 1.0);
  14. nvgStrokeColor(args.vg, nvgRGBf(0.7, 0.7, 0.7));
  15. float holeRadius = 3.5;
  16. for (float railY = 0; railY < box.size.y; railY += RACK_GRID_HEIGHT) {
  17. // Top rail
  18. nvgBeginPath(args.vg);
  19. nvgRect(args.vg, 0, railY, box.size.x, railHeight);
  20. for (float railX = 0; railX < box.size.x; railX += RACK_GRID_WIDTH) {
  21. nvgCircle(args.vg, railX + RACK_GRID_WIDTH / 2, railY + railHeight / 2, holeRadius);
  22. nvgPathWinding(args.vg, NVG_HOLE);
  23. }
  24. nvgFill(args.vg);
  25. nvgBeginPath(args.vg);
  26. nvgMoveTo(args.vg, 0, railY + railHeight - 0.5);
  27. nvgLineTo(args.vg, box.size.x, railY + railHeight - 0.5);
  28. nvgStroke(args.vg);
  29. // Bottom rail
  30. nvgBeginPath(args.vg);
  31. nvgRect(args.vg, 0, railY + RACK_GRID_HEIGHT - railHeight, box.size.x, railHeight);
  32. for (float railX = 0; railX < box.size.x; railX += RACK_GRID_WIDTH) {
  33. nvgCircle(args.vg, railX + RACK_GRID_WIDTH / 2, railY + RACK_GRID_HEIGHT - railHeight + railHeight / 2, holeRadius);
  34. nvgPathWinding(args.vg, NVG_HOLE);
  35. }
  36. nvgFill(args.vg);
  37. nvgBeginPath(args.vg);
  38. nvgMoveTo(args.vg, 0, railY + RACK_GRID_HEIGHT - 0.5);
  39. nvgLineTo(args.vg, box.size.x, railY + RACK_GRID_HEIGHT - 0.5);
  40. nvgStroke(args.vg);
  41. }
  42. }
  43. } // namespace app
  44. } // namespace rack