circle.Transform(aCTM);
GDIPlusRadialGradient(nsISVGGradient *aGrad, Matrix *aMatrix, Graphics *aGFX,                      void(*aCallback)(Graphics *, Brush*, void *), void *aData){  float fCx, fCy, fR, fFx, fFy;  // Get the Radial Gradient interface  nsCOMPtr<nsISVGRadialGradient>aRgrad = do_QueryInterface(aGrad);  NS_ASSERTION(aRgrad, "error gradient did not provide a Linear Gradient interface");  aRgrad->GetCx(&fCx);  aRgrad->GetCy(&fCy);  aRgrad->GetR(&fR);  aRgrad->GetFx(&fFx);  aRgrad->GetFy(&fFy);  GraphicsPath circle;  circle.StartFigure();  circle.AddEllipse(fCx - fR, fCy - fR, 2 * fR, 2 * fR);  PathGradientBrush gradient(&circle);  gradient.SetCenterPoint(PointF(fFx, fFy));  PRUint16 aSpread;  aGrad->GetSpreadMethod(&aSpread);  if (aSpread == nsIDOMSVGGradientElement::SVG_SPREADMETHOD_PAD) {      gradient.SetWrapMode(WrapModeClamp);  }  else if (aSpread == nsIDOMSVGGradientElement::SVG_SPREADMETHOD_REFLECT)      gradient.SetWrapMode(WrapModeTileFlipX);  else if (aSpread == nsIDOMSVGGradientElement::SVG_SPREADMETHOD_REPEAT)      gradient.SetWrapMode(WrapModeTile);  PRUint32 nStops;  Color *stopsCol;  REAL *stopsPos;  GDIPlusGetStops(aGrad, &stopsCol, &stopsPos, &nStops, PR_TRUE);  gradient.SetInterpolationColors(stopsCol, stopsPos, nStops);  SolidBrush rimBrush(stopsCol[0]);  delete [] stopsCol;  delete [] stopsPos;  gradient.MultiplyTransform(aMatrix, MatrixOrderAppend);    if (aSpread == nsIDOMSVGGradientElement::SVG_SPREADMETHOD_PAD) {    circle.Transform(aMatrix);    Region exclude(&circle), oldClip;    aGFX->GetClip(&oldClip);    aGFX->SetClip(&exclude, CombineModeExclude);    aCallback(aGFX, &rimBrush, aData);    aGFX->SetClip(&oldClip);  }  aCallback(aGFX, &gradient, aData);}