static void setGradientAttributes(SVGGradientElement* element, RadialGradientAttributes& attributes, bool isRadial = true) { if (!attributes.hasSpreadMethod() && element->spreadMethod()->isSpecified()) attributes.setSpreadMethod(element->spreadMethod()->currentValue()->enumValue()); if (!attributes.hasGradientUnits() && element->gradientUnits()->isSpecified()) attributes.setGradientUnits(element->gradientUnits()->currentValue()->enumValue()); if (!attributes.hasGradientTransform() && element->gradientTransform()->isSpecified()) { AffineTransform transform; element->gradientTransform()->currentValue()->concatenate(transform); attributes.setGradientTransform(transform); } if (!attributes.hasStops()) { const Vector<Gradient::ColorStop>& stops(element->buildStops()); if (!stops.isEmpty()) attributes.setStops(stops); } if (isRadial) { SVGRadialGradientElement* radial = toSVGRadialGradientElement(element); if (!attributes.hasCx() && radial->cx()->isSpecified()) attributes.setCx(radial->cx()->currentValue()); if (!attributes.hasCy() && radial->cy()->isSpecified()) attributes.setCy(radial->cy()->currentValue()); if (!attributes.hasR() && radial->r()->isSpecified()) attributes.setR(radial->r()->currentValue()); if (!attributes.hasFx() && radial->fx()->isSpecified()) attributes.setFx(radial->fx()->currentValue()); if (!attributes.hasFy() && radial->fy()->isSpecified()) attributes.setFy(radial->fy()->currentValue()); if (!attributes.hasFr() && radial->fr()->isSpecified()) attributes.setFr(radial->fr()->currentValue()); } }
static void setGradientAttributes(SVGGradientElement& element, RadialGradientAttributes& attributes, bool isRadial = true) { if (!attributes.hasSpreadMethod() && element.hasAttribute(SVGNames::spreadMethodAttr)) attributes.setSpreadMethod(element.spreadMethod()); if (!attributes.hasGradientUnits() && element.hasAttribute(SVGNames::gradientUnitsAttr)) attributes.setGradientUnits(element.gradientUnits()); if (!attributes.hasGradientTransform() && element.hasAttribute(SVGNames::gradientTransformAttr)) { AffineTransform transform; element.gradientTransform().concatenate(transform); attributes.setGradientTransform(transform); } if (!attributes.hasStops()) { const Vector<Gradient::ColorStop>& stops(element.buildStops()); if (!stops.isEmpty()) attributes.setStops(stops); } if (isRadial) { SVGRadialGradientElement& radial = downcast<SVGRadialGradientElement>(element); if (!attributes.hasCx() && element.hasAttribute(SVGNames::cxAttr)) attributes.setCx(radial.cx()); if (!attributes.hasCy() && element.hasAttribute(SVGNames::cyAttr)) attributes.setCy(radial.cy()); if (!attributes.hasR() && element.hasAttribute(SVGNames::rAttr)) attributes.setR(radial.r()); if (!attributes.hasFx() && element.hasAttribute(SVGNames::fxAttr)) attributes.setFx(radial.fx()); if (!attributes.hasFy() && element.hasAttribute(SVGNames::fyAttr)) attributes.setFy(radial.fy()); if (!attributes.hasFr() && element.hasAttribute(SVGNames::frAttr)) attributes.setFr(radial.fr()); } }