#include namespace rack { namespace app { void ModuleLightWidget::step() { std::vector brightnesses(baseColors.size()); if (module) { assert(module->lights.size() >= firstLightId + baseColors.size()); for (size_t i = 0; i < baseColors.size(); i++) { float b = module->lights[firstLightId + i].getBrightness(); if (!std::isfinite(b)) b = 0.f; b = math::clamp(b, 0.f, 1.f); // Because LEDs are nonlinear, this seems to look more natural. b = std::sqrt(b); brightnesses[i] = b; } } else { // Turn all lights on for (size_t i = 0; i < baseColors.size(); i++) { brightnesses[i] = 1.f; } } setBrightnesses(brightnesses); } } // namespace app } // namespace rack