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.

32 lines
662B

  1. #include <app/MultiLightWidget.hpp>
  2. #include <color.hpp>
  3. namespace rack {
  4. namespace app {
  5. int MultiLightWidget::getNumColors() {
  6. return baseColors.size();
  7. }
  8. void MultiLightWidget::addBaseColor(NVGcolor baseColor) {
  9. baseColors.push_back(baseColor);
  10. }
  11. void MultiLightWidget::setBrightnesses(const std::vector<float>& brightnesses) {
  12. assert(brightnesses.size() == baseColors.size());
  13. color = nvgRGBAf(0, 0, 0, 0);
  14. for (size_t i = 0; i < baseColors.size(); i++) {
  15. NVGcolor c = baseColors[i];
  16. c.a *= math::clamp(brightnesses[i], 0.f, 1.f);
  17. color = color::screen(color, c);
  18. }
  19. color = color::clamp(color);
  20. }
  21. } // namespace app
  22. } // namespace rack