NS_IMETHODIMP nsSVGLength::SetValueAsString(const nsAString & aValueAsString) { nsresult rv = NS_OK; char *str = ToNewCString(aValueAsString); char* number = str; while (*number && isspace(*number)) ++number; if (*number) { char *rest; float value = float(PR_strtod(number, &rest)); if (rest!=number) { const char* unitStr = nsCRT::strtok(rest, "\x20\x9\xD\xA", &rest); PRUint16 unitType = SVG_LENGTHTYPE_UNKNOWN; if (!unitStr || *unitStr=='\0') { unitType = SVG_LENGTHTYPE_NUMBER; } else { nsCOMPtr<nsIAtom> unitAtom = do_GetAtom(unitStr); if (unitAtom == nsGkAtoms::px) unitType = SVG_LENGTHTYPE_PX; else if (unitAtom == nsGkAtoms::mm) unitType = SVG_LENGTHTYPE_MM; else if (unitAtom == nsGkAtoms::cm) unitType = SVG_LENGTHTYPE_CM; else if (unitAtom == nsGkAtoms::in) unitType = SVG_LENGTHTYPE_IN; else if (unitAtom == nsGkAtoms::pt) unitType = SVG_LENGTHTYPE_PT; else if (unitAtom == nsGkAtoms::pc) unitType = SVG_LENGTHTYPE_PC; else if (unitAtom == nsGkAtoms::em) unitType = SVG_LENGTHTYPE_EMS; else if (unitAtom == nsGkAtoms::ex) unitType = SVG_LENGTHTYPE_EXS; else if (unitAtom == nsGkAtoms::percentage) unitType = SVG_LENGTHTYPE_PERCENTAGE; } if (IsValidUnitType(unitType) && NS_FloatIsFinite(value)) { WillModify(); mValueInSpecifiedUnits = value; mSpecifiedUnitType = unitType; DidModify(); } else { // parse error // not a valid unit type rv = NS_ERROR_DOM_SYNTAX_ERR; } } else { // parse error // no number rv = NS_ERROR_DOM_SYNTAX_ERR; } } nsMemory::Free(str); return rv; }
void nsSVGLength2::ConvertToSpecifiedUnits(PRUint16 unitType, nsSVGElement *aSVGElement) { if (!IsValidUnitType(unitType)) return; float valueInUserUnits = mBaseVal / GetUnitScaleFactor(aSVGElement); mSpecifiedUnitType = PRUint8(unitType); SetBaseValue(valueInUserUnits, aSVGElement); }
void nsSVGLength2::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits, nsSVGElement *aSVGElement) { if (!IsValidUnitType(unitType)) return; mBaseVal = mAnimVal = valueInSpecifiedUnits; mSpecifiedUnitType = PRUint8(unitType); aSVGElement->DidChangeLength(mAttrEnum, PR_TRUE); }
static void GetUnitString(nsAString& unit, PRUint16 unitType) { if (IsValidUnitType(unitType)) { if (unitMap[unitType]) { (*unitMap[unitType])->ToString(unit); } return; } NS_NOTREACHED("Unknown unit type"); return; }
nsresult nsSVGLength2::ConvertToSpecifiedUnits(PRUint16 unitType, nsSVGElement *aSVGElement) { if (!IsValidUnitType(unitType)) return NS_ERROR_DOM_NOT_SUPPORTED_ERR; float valueInUserUnits = mBaseVal / GetUnitScaleFactor(aSVGElement, mSpecifiedUnitType); mSpecifiedUnitType = PRUint8(unitType); SetBaseValue(valueInUserUnits, aSVGElement); return NS_OK; }
/* void convertToSpecifiedUnits (in unsigned short unitType); */ NS_IMETHODIMP nsSVGLength::ConvertToSpecifiedUnits(PRUint16 unitType) { if (!IsValidUnitType(unitType)) return NS_ERROR_DOM_NOT_SUPPORTED_ERR; WillModify(); float valueInUserUnits; GetValue(&valueInUserUnits); mSpecifiedUnitType = unitType; SetValue(valueInUserUnits); DidModify(); return NS_OK; }
/* void newValueSpecifiedUnits (in unsigned short unitType, in float valueInSpecifiedUnits); */ NS_IMETHODIMP nsSVGLength::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits) { NS_ENSURE_FINITE(valueInSpecifiedUnits, NS_ERROR_ILLEGAL_VALUE); if (!IsValidUnitType(unitType)) return NS_ERROR_DOM_NOT_SUPPORTED_ERR; WillModify(); mValueInSpecifiedUnits = valueInSpecifiedUnits; mSpecifiedUnitType = unitType; DidModify(); return NS_OK; }
void nsSVGLength2::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits, nsSVGElement *aSVGElement) { if (!IsValidUnitType(unitType)) return; mBaseVal = mAnimVal = valueInSpecifiedUnits; mSpecifiedUnitType = PRUint8(unitType); aSVGElement->DidChangeLength(mAttrEnum, PR_TRUE); #ifdef MOZ_SMIL if (mIsAnimated) { aSVGElement->AnimationNeedsResample(); } #endif }
static nsresult GetValueFromString(const nsAString &aValueAsString, float *aValue, PRUint16 *aUnitType) { NS_ConvertUTF16toUTF8 value(aValueAsString); const char *str = value.get(); if (NS_IsAsciiWhitespace(*str)) return NS_ERROR_DOM_SYNTAX_ERR; char *rest; *aValue = float(PR_strtod(str, &rest)); if (rest != str && NS_FloatIsFinite(*aValue)) { *aUnitType = GetUnitTypeForString(rest); if (IsValidUnitType(*aUnitType)) { return NS_OK; } } return NS_ERROR_DOM_SYNTAX_ERR; }
bool SVGLength::SetValueFromString(const nsAString &aString) { RangedPtr<const char16_t> iter = SVGContentUtils::GetStartRangedPtr(aString); const RangedPtr<const char16_t> end = SVGContentUtils::GetEndRangedPtr(aString); float value; if (!SVGContentUtils::ParseNumber(iter, end, value)) { return false; } const nsAString& units = Substring(iter.get(), end.get()); uint16_t unitType = GetUnitTypeForString(units); if (!IsValidUnitType(unitType)) { return false; } mValue = value; mUnit = uint8_t(unitType); return true; }
nsresult nsSVGLength2::NewValueSpecifiedUnits(PRUint16 unitType, float valueInSpecifiedUnits, nsSVGElement *aSVGElement) { NS_ENSURE_FINITE(valueInSpecifiedUnits, NS_ERROR_ILLEGAL_VALUE); if (!IsValidUnitType(unitType)) return NS_ERROR_DOM_NOT_SUPPORTED_ERR; mBaseVal = valueInSpecifiedUnits; mIsBaseSet = PR_TRUE; mSpecifiedUnitType = PRUint8(unitType); if (!mIsAnimated) { mAnimVal = mBaseVal; } #ifdef MOZ_SMIL else { aSVGElement->AnimationNeedsResample(); } #endif aSVGElement->DidChangeLength(mAttrEnum, PR_TRUE); return NS_OK; }