float nsSVGLength2::GetUnitScaleFactor(nsSVGSVGElement *aCtx, PRUint8 aUnitType) const { switch (aUnitType) { case nsIDOMSVGLength::SVG_LENGTHTYPE_NUMBER: case nsIDOMSVGLength::SVG_LENGTHTYPE_PX: return 1; case nsIDOMSVGLength::SVG_LENGTHTYPE_MM: return GetMMPerPixel(); case nsIDOMSVGLength::SVG_LENGTHTYPE_CM: return GetMMPerPixel() / 10.0f; case nsIDOMSVGLength::SVG_LENGTHTYPE_IN: return GetMMPerPixel() / MM_PER_INCH_FLOAT; case nsIDOMSVGLength::SVG_LENGTHTYPE_PT: return GetMMPerPixel() * POINTS_PER_INCH_FLOAT / MM_PER_INCH_FLOAT; case nsIDOMSVGLength::SVG_LENGTHTYPE_PC: return GetMMPerPixel() * POINTS_PER_INCH_FLOAT / MM_PER_INCH_FLOAT / 12.0f; case nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE: return 100.0f / GetAxisLength(aCtx); case nsIDOMSVGLength::SVG_LENGTHTYPE_EMS: return 1 / GetEmLength(aCtx); case nsIDOMSVGLength::SVG_LENGTHTYPE_EXS: return 1 / GetExLength(aCtx); default: NS_NOTREACHED("Unknown unit type"); return 0; } }
float nsSVGLength2::GetUnitScaleFactor(nsIFrame *aFrame, PRUint8 aUnitType) const { nsIContent* content = aFrame->GetContent(); if (content->IsSVG()) return GetUnitScaleFactor(static_cast<nsSVGElement*>(content), aUnitType); switch (aUnitType) { case nsIDOMSVGLength::SVG_LENGTHTYPE_NUMBER: case nsIDOMSVGLength::SVG_LENGTHTYPE_PX: return 1; case nsIDOMSVGLength::SVG_LENGTHTYPE_MM: return GetMMPerPixel(); case nsIDOMSVGLength::SVG_LENGTHTYPE_CM: return GetMMPerPixel() / 10.0f; case nsIDOMSVGLength::SVG_LENGTHTYPE_IN: return GetMMPerPixel() / MM_PER_INCH_FLOAT; case nsIDOMSVGLength::SVG_LENGTHTYPE_PT: return GetMMPerPixel() * POINTS_PER_INCH_FLOAT / MM_PER_INCH_FLOAT; case nsIDOMSVGLength::SVG_LENGTHTYPE_PC: return GetMMPerPixel() * POINTS_PER_INCH_FLOAT / MM_PER_INCH_FLOAT / 12.0f; case nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE: return 100.0f / GetAxisLength(aFrame); case nsIDOMSVGLength::SVG_LENGTHTYPE_EMS: return 1 / GetEmLength(aFrame); case nsIDOMSVGLength::SVG_LENGTHTYPE_EXS: return 1 / GetExLength(aFrame); default: NS_NOTREACHED("Unknown unit type"); return 0; } }
float nsSVGLength2::GetUnitScaleFactor(nsSVGElement *aSVGElement) const { switch (mSpecifiedUnitType) { case nsIDOMSVGLength::SVG_LENGTHTYPE_NUMBER: case nsIDOMSVGLength::SVG_LENGTHTYPE_PX: return 1; case nsIDOMSVGLength::SVG_LENGTHTYPE_EMS: return 1 / GetEmLength(aSVGElement); case nsIDOMSVGLength::SVG_LENGTHTYPE_EXS: return 1 / GetExLength(aSVGElement); } return GetUnitScaleFactor(aSVGElement->GetCtx()); }