void SVGAnimationElement::parseAttribute(const QualifiedName& name, const AtomicString& oldValue, const AtomicString& value) { if (name == SVGNames::valuesAttr) { if (!parseValues(value, m_values)) { reportAttributeParsingError(ParsingAttributeFailedError, name, value); return; } updateAnimationMode(); return; } if (name == SVGNames::keyTimesAttr) { if (!parseKeyTimes(value, m_keyTimes, true)) reportAttributeParsingError(ParsingAttributeFailedError, name, value); return; } if (name == SVGNames::keyPointsAttr) { if (isSVGAnimateMotionElement(*this)) { // This is specified to be an animateMotion attribute only but it is simpler to put it here // where the other timing calculatations are. if (!parseKeyTimes(value, m_keyPoints, false)) reportAttributeParsingError(ParsingAttributeFailedError, name, value); } return; } if (name == SVGNames::keySplinesAttr) { if (!parseKeySplines(value, m_keySplines)) reportAttributeParsingError(ParsingAttributeFailedError, name, value); return; } if (name == SVGNames::attributeTypeAttr) { setAttributeType(value); return; } if (name == SVGNames::calcModeAttr) { setCalcMode(value); return; } if (name == SVGNames::fromAttr || name == SVGNames::toAttr || name == SVGNames::byAttr) { updateAnimationMode(); return; } SVGSMILElement::parseAttribute(name, oldValue, value); }
void SVGAnimationElement::setCalcMode(const AtomicString& calcMode) { DEFINE_STATIC_LOCAL(const AtomicString, discrete, ("discrete", AtomicString::ConstructFromLiteral)); DEFINE_STATIC_LOCAL(const AtomicString, linear, ("linear", AtomicString::ConstructFromLiteral)); DEFINE_STATIC_LOCAL(const AtomicString, paced, ("paced", AtomicString::ConstructFromLiteral)); DEFINE_STATIC_LOCAL(const AtomicString, spline, ("spline", AtomicString::ConstructFromLiteral)); if (calcMode == discrete) setCalcMode(CalcModeDiscrete); else if (calcMode == linear) setCalcMode(CalcModeLinear); else if (calcMode == paced) setCalcMode(CalcModePaced); else if (calcMode == spline) setCalcMode(CalcModeSpline); else setCalcMode(isSVGAnimateMotionElement(*this) ? CalcModePaced : CalcModeLinear); }
void SVGMPathElement::notifyParentOfPathChange(ContainerNode* parent) { if (isSVGAnimateMotionElement(parent)) toSVGAnimateMotionElement(parent)->updateAnimationPath(); }