bool DOMSVGTransform::IndexIsValid() { SVGAnimatedTransformList *alist = Element()->GetAnimatedTransformList(); return (mIsAnimValItem && mListIndex < alist->GetAnimValue().Length()) || (!mIsAnimValItem && mListIndex < alist->GetBaseValue().Length()); }
gfxMatrix nsSVGPatternFrame::GetPatternTransform() { SVGAnimatedTransformList* animTransformList = GetPatternTransformList(mContent); if (!animTransformList) return gfxMatrix(); return animTransformList->GetAnimValue().GetConsolidationMatrix(); }
gfxMatrix nsSVGGradientFrame::GetGradientTransform(nsIFrame *aSource, const gfxRect *aOverrideBounds) { gfxMatrix bboxMatrix; PRUint16 gradientUnits = GetGradientUnits(); if (gradientUnits == nsIDOMSVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) { // If this gradient is applied to text, our caller // will be the glyph, which is not a container, so we // need to get the parent if (aSource->GetContent()->IsNodeOfType(nsINode::eTEXT)) mSource = aSource->GetParent(); else mSource = aSource; } else { NS_ASSERTION(gradientUnits == nsIDOMSVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX, "Unknown gradientUnits type"); // objectBoundingBox is the default anyway gfxRect bbox = aOverrideBounds ? *aOverrideBounds : nsSVGUtils::GetBBox(aSource); bboxMatrix = gfxMatrix(bbox.Width(), 0, 0, bbox.Height(), bbox.X(), bbox.Y()); } nsSVGGradientElement *element = GetGradientWithAttr(nsGkAtoms::gradientTransform, mContent); SVGAnimatedTransformList* animTransformList = element->GetAnimatedTransformList(); if (!animTransformList) return bboxMatrix; gfxMatrix gradientTransform = animTransformList->GetAnimValue().GetConsolidationMatrix(); return bboxMatrix.PreMultiply(gradientTransform); }