#include "app.hpp" namespace rack { SVGKnob::SVGKnob() { tw = new TransformWidget(); addChild(tw); sw = new SVGWidget(); tw->addChild(sw); } void SVGKnob::setSVG(std::shared_ptr svg) { sw->svg = svg; sw->wrap(); tw->box.size = sw->box.size; box.size = sw->box.size; } void SVGKnob::step() { // Re-transform TransformWidget if dirty if (dirty) { float angle = rescalef(value, minValue, maxValue, minAngle, maxAngle); tw->identity(); // Rotate SVG Vec center = sw->box.getCenter(); tw->translate(center); tw->rotate(angle); tw->translate(center.neg()); } FramebufferWidget::step(); } void SVGKnob::onChange() { dirty = true; Knob::onChange(); } } // namespace rack