// Helper to regenerate our path representation & its list of vertices void SVGMotionSMILAnimationFunction:: RebuildPathAndVertices(const nsIContent* aTargetElement) { NS_ABORT_IF_FALSE(mIsPathStale, "rebuilding path when it isn't stale"); // Clear stale data mPath = nullptr; mPathVertices.Clear(); mPathSourceType = ePathSourceType_None; // Do we have a mpath child? if so, it trumps everything. Otherwise, we look // through our list of path-defining attributes, in order of priority. SVGMPathElement* firstMpathChild = GetFirstMPathChild(mAnimationElement); if (firstMpathChild) { RebuildPathAndVerticesFromMpathElem(firstMpathChild); mValueNeedsReparsingEverySample = false; } else if (HasAttr(nsGkAtoms::path)) { RebuildPathAndVerticesFromPathAttr(); mValueNeedsReparsingEverySample = false; } else { // Get path & vertices from basic SMIL attrs: from/by/to/values RebuildPathAndVerticesFromBasicAttrs(aTargetElement); mValueNeedsReparsingEverySample = true; } mIsPathStale = false; }
bool SVGMotionSMILAnimationFunction::IsToAnimation() const { // Rely on inherited method, but not if we have an <mpath> child or a |path| // attribute, because they'll override any 'to' attr we might have. // NOTE: We can't rely on mPathSourceType, because it might not have been // set to a useful value yet (or it might be stale). return !GetFirstMPathChild(mAnimationElement) && !HasAttr(nsGkAtoms::path) && SMILAnimationFunction::IsToAnimation(); }