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.

24 lines
722B

  1. #include "widgets.hpp"
  2. namespace rack {
  3. void SpriteWidget::draw(NVGcontext *vg) {
  4. int width, height;
  5. nvgImageSize(vg, spriteImage->handle, &width, &height);
  6. int stride = width / spriteSize.x;
  7. if (stride == 0) {
  8. warn("Size of SpriteWidget is %d, %d but spriteSize is %f, %f", width, height, spriteSize.x, spriteSize.y);
  9. return;
  10. }
  11. Vec offset = Vec((index % stride) * spriteSize.x, (index / stride) * spriteSize.y);
  12. NVGpaint paint = nvgImagePattern(vg, spriteOffset.x - offset.x, spriteOffset.y - offset.y, width, height, 0.0, spriteImage->handle, 1.0);
  13. nvgFillPaint(vg, paint);
  14. nvgBeginPath(vg);
  15. nvgRect(vg, spriteOffset.x, spriteOffset.y, spriteSize.x, spriteSize.y);
  16. nvgFill(vg);
  17. }
  18. } // namespace rack