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.

62 lines
1.6KB

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