#include #include namespace rack { namespace app { void LightWidget::draw(const DrawArgs& args) { drawLight(args); drawHalo(args); } void LightWidget::drawLight(const DrawArgs& args) { float radius = std::min(box.size.x, box.size.y) / 2.0; nvgBeginPath(args.vg); nvgCircle(args.vg, radius, radius, radius); // Background if (bgColor.a > 0.0) { nvgFillColor(args.vg, bgColor); nvgFill(args.vg); } // Foreground if (color.a > 0.0) { nvgFillColor(args.vg, color); nvgFill(args.vg); } // Border if (borderColor.a > 0.0) { nvgStrokeWidth(args.vg, 0.5); nvgStrokeColor(args.vg, borderColor); nvgStroke(args.vg); } } void LightWidget::drawHalo(const DrawArgs& args) { float radius = std::min(box.size.x, box.size.y) / 2.0; float oradius = 4.0 * radius; nvgBeginPath(args.vg); nvgRect(args.vg, radius - oradius, radius - oradius, 2 * oradius, 2 * oradius); NVGpaint paint; NVGcolor icol = color::mult(color, 0.07); NVGcolor ocol = nvgRGB(0, 0, 0); paint = nvgRadialGradient(args.vg, radius, radius, radius, oradius, icol, ocol); nvgFillPaint(args.vg, paint); nvgGlobalCompositeOperation(args.vg, NVG_LIGHTER); nvgFill(args.vg); } } // namespace app } // namespace rack