| Index: Source/core/svg/SVGLength.h
|
| diff --git a/Source/core/svg/SVGLength.h b/Source/core/svg/SVGLength.h
|
| index b228627f63c79aa57386ce2a89cece9349166cda..77ffe84560db9256e79d622a02617f5273220cc0 100644
|
| --- a/Source/core/svg/SVGLength.h
|
| +++ b/Source/core/svg/SVGLength.h
|
| @@ -47,23 +47,51 @@ public:
|
| return adoptRefWillBeNoop(new SVGLength(mode));
|
| }
|
|
|
| + DECLARE_VIRTUAL_TRACE();
|
| +
|
| PassRefPtrWillBeRawPtr<SVGLength> clone() const;
|
| virtual PassRefPtrWillBeRawPtr<SVGPropertyBase> cloneForAnimation(const String&) const override;
|
|
|
| - SVGLengthType unitType() const { return static_cast<SVGLengthType>(m_unitType); }
|
| - CSSPrimitiveValue::UnitType cssUnitTypeQuirk() const
|
| + CSSPrimitiveValue::UnitType primitiveType() const { return m_value->primitiveType(); }
|
| +
|
| + static CSSPrimitiveValue::UnitType toCSSUnit(SVGLengthType type)
|
| {
|
| - if (m_unitType == LengthTypeNumber)
|
| + switch (type) {
|
| + case LengthTypeUnknown:
|
| + return CSSPrimitiveValue::UnitType::CSS_UNKNOWN;
|
| + case LengthTypeNumber:
|
| + return CSSPrimitiveValue::UnitType::CSS_NUMBER;
|
| + case LengthTypePercentage:
|
| + return CSSPrimitiveValue::UnitType::CSS_PERCENTAGE;
|
| + case LengthTypeEMS:
|
| + return CSSPrimitiveValue::UnitType::CSS_EMS;
|
| + case LengthTypeEXS:
|
| + return CSSPrimitiveValue::UnitType::CSS_EXS;
|
| + case LengthTypePX:
|
| return CSSPrimitiveValue::UnitType::CSS_PX;
|
| + case LengthTypeCM:
|
| + return CSSPrimitiveValue::UnitType::CSS_CM;
|
| + case LengthTypeMM:
|
| + return CSSPrimitiveValue::UnitType::CSS_MM;
|
| + case LengthTypeIN:
|
| + return CSSPrimitiveValue::UnitType::CSS_IN;
|
| + case LengthTypePT:
|
| + return CSSPrimitiveValue::UnitType::CSS_PT;
|
| + case LengthTypePC:
|
| + return CSSPrimitiveValue::UnitType::CSS_PC;
|
| + default:
|
| + return CSSPrimitiveValue::UnitType::CSS_UNKNOWN;
|
| + }
|
| + }
|
|
|
| - if (m_unitType == LengthTypeREMS)
|
| - return CSSPrimitiveValue::UnitType::CSS_REMS;
|
| - if (m_unitType == LengthTypeCHS)
|
| - return CSSPrimitiveValue::UnitType::CSS_CHS;
|
| + CSSPrimitiveValue::UnitType cssUnitTypeQuirk() const
|
| + {
|
| + if (m_value->primitiveType() == CSSPrimitiveValue::UnitType::CSS_NUMBER)
|
| + return CSSPrimitiveValue::UnitType::CSS_PX;
|
|
|
| - return static_cast<CSSPrimitiveValue::UnitType>(m_unitType);
|
| + return m_value->primitiveType();
|
| }
|
| - void setUnitType(SVGLengthType);
|
| + void setUnitType(CSSPrimitiveValue::UnitType);
|
| SVGLengthMode unitMode() const { return static_cast<SVGLengthMode>(m_unitMode); }
|
|
|
| bool operator==(const SVGLength&) const;
|
| @@ -72,8 +100,11 @@ public:
|
| float value(const SVGLengthContext&) const;
|
| void setValue(float, const SVGLengthContext&);
|
|
|
| - float valueInSpecifiedUnits() const { return m_valueInSpecifiedUnits; }
|
| - void setValueInSpecifiedUnits(float value) { m_valueInSpecifiedUnits = value; }
|
| + float valueInSpecifiedUnits() const { return m_value->getFloatValue(); }
|
| + void setValueInSpecifiedUnits(float value)
|
| + {
|
| + m_value = CSSPrimitiveValue::create(value, m_value->primitiveType());
|
| + }
|
|
|
| // Resolves LengthTypePercentage into a normalized floating point number (full value is 1.0).
|
| float valueAsPercentage() const;
|
| @@ -87,27 +118,27 @@ public:
|
| virtual String valueAsString() const override;
|
| void setValueAsString(const String&, ExceptionState&);
|
|
|
| - void newValueSpecifiedUnits(SVGLengthType, float valueInSpecifiedUnits);
|
| - void convertToSpecifiedUnits(SVGLengthType, const SVGLengthContext&);
|
| + void newValueSpecifiedUnits(CSSPrimitiveValue::UnitType, float valueInSpecifiedUnits);
|
| + void convertToSpecifiedUnits(CSSPrimitiveValue::UnitType, const SVGLengthContext&);
|
|
|
| // Helper functions
|
| - static inline bool isRelativeUnit(SVGLengthType unitType)
|
| + static inline bool isRelativeUnit(CSSPrimitiveValue::UnitType unitType)
|
| {
|
| - return unitType == LengthTypePercentage
|
| - || unitType == LengthTypeEMS
|
| - || unitType == LengthTypeEXS
|
| - || unitType == LengthTypeREMS
|
| - || unitType == LengthTypeCHS;
|
| + return unitType == CSSPrimitiveValue::CSS_PERCENTAGE
|
| + || unitType == CSSPrimitiveValue::CSS_EMS
|
| + || unitType == CSSPrimitiveValue::CSS_EXS
|
| + || unitType == CSSPrimitiveValue::CSS_REMS
|
| + || unitType == CSSPrimitiveValue::CSS_CHS;
|
| }
|
| - inline bool isRelative() const { return isRelativeUnit(unitType()); }
|
| + inline bool isRelative() const { return isRelativeUnit(m_value->primitiveType()); }
|
|
|
| bool isZero() const
|
| {
|
| - return !m_valueInSpecifiedUnits;
|
| + return m_value->getFloatValue() == 0;
|
| }
|
|
|
| static PassRefPtrWillBeRawPtr<SVGLength> fromCSSPrimitiveValue(CSSPrimitiveValue*);
|
| - static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> toCSSPrimitiveValue(PassRefPtrWillBeRawPtr<SVGLength>);
|
| +
|
| static SVGLengthMode lengthModeForAnimatedLengthAttribute(const QualifiedName&);
|
|
|
| PassRefPtrWillBeRawPtr<SVGLength> blend(PassRefPtrWillBeRawPtr<SVGLength> from, float progress) const;
|
| @@ -122,9 +153,8 @@ private:
|
| SVGLength(SVGLengthMode);
|
| SVGLength(const SVGLength&);
|
|
|
| - float m_valueInSpecifiedUnits;
|
| + RefPtrWillBeMember<CSSPrimitiveValue> m_value;
|
| unsigned m_unitMode : 2;
|
| - unsigned m_unitType : 4;
|
| };
|
|
|
| inline PassRefPtrWillBeRawPtr<SVGLength> toSVGLength(PassRefPtrWillBeRawPtr<SVGPropertyBase> passBase)
|
|
|