/* nsIDOMSVGTransform createSVGTransformFromMatrix (in nsIDOMSVGMatrix matrix); */ NS_IMETHODIMP nsSVGTransformList::CreateSVGTransformFromMatrix(nsIDOMSVGMatrix *matrix, nsIDOMSVGTransform **_retval) { NS_ENSURE_NATIVE_MATRIX(matrix, _retval); nsresult rv = NS_NewSVGTransform(_retval); if (NS_FAILED(rv)) return rv; (*_retval)->SetMatrix(matrix); return NS_OK; }
/* nsIDOMSVGTransform createSVGTransformFromMatrix (in nsIDOMSVGMatrix matrix); */ NS_IMETHODIMP nsSVGTransformList::CreateSVGTransformFromMatrix(nsIDOMSVGMatrix *matrix, nsIDOMSVGTransform **_retval) { if (!matrix) return NS_ERROR_DOM_SVG_WRONG_TYPE_ERR; nsresult rv = NS_NewSVGTransform(_retval); if (NS_FAILED(rv)) return rv; (*_retval)->SetMatrix(matrix); return NS_OK; }
nsresult nsSVGTransformSMILAttr::UpdateFromSMILValue( nsIDOMSVGTransformList* aTransformList, const nsSMILValue& aValue) { PRUint32 svgLength = -1; aTransformList->GetNumberOfItems(&svgLength); nsSVGTransformSMILType* type = &nsSVGTransformSMILType::sSingleton; PRUint32 smilLength = type->GetNumTransforms(aValue); nsresult rv = NS_OK; for (PRUint32 i = 0; i < smilLength; i++) { nsCOMPtr<nsIDOMSVGTransform> transform; if (i < svgLength) { // Get the transform to update rv = aTransformList->GetItem(i, getter_AddRefs(transform)); NS_ENSURE_SUCCESS(rv,rv); } else { // Append another transform to the list nsresult rv = NS_NewSVGTransform(getter_AddRefs(transform)); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr<nsIDOMSVGTransform> result; rv = aTransformList->AppendItem(transform, getter_AddRefs(result)); NS_ENSURE_SUCCESS(rv,rv); } // Set the value const nsSVGSMILTransform* smilTransform = type->GetTransformAt(i, aValue); rv = GetSVGTransformFromSMILValue(*smilTransform, transform); NS_ENSURE_SUCCESS(rv,rv); } // Trim excess elements while (svgLength > smilLength) { nsCOMPtr<nsIDOMSVGTransform> removed; rv = aTransformList->RemoveItem(--svgLength, getter_AddRefs(removed)); NS_ENSURE_SUCCESS(rv,rv); } return NS_OK; }