// calc m_value void SVGAngle::calculate() { if (m_unitType == SVG_ANGLETYPE_GRAD) m_value = grad2deg(m_valueInSpecifiedUnits); else if (m_unitType == SVG_ANGLETYPE_RAD) m_value = rad2deg(m_valueInSpecifiedUnits); else if (m_unitType == SVG_ANGLETYPE_UNSPECIFIED || m_unitType == SVG_ANGLETYPE_DEG) m_value = m_valueInSpecifiedUnits; }
TEST_F(AnimationDoubleStyleInterpolationTest, AngleValue) { RefPtrWillBeRawPtr<CSSValue> value = roundTrip(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_DEG)); testPrimitiveValue(value, 10, CSSPrimitiveValue::CSS_DEG); value = roundTrip(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_RAD)); testPrimitiveValue(value, rad2deg(10.0), CSSPrimitiveValue::CSS_DEG); value = roundTrip(CSSPrimitiveValue::create(10, CSSPrimitiveValue::CSS_GRAD)); testPrimitiveValue(value, grad2deg(10.0), CSSPrimitiveValue::CSS_DEG); }
float SVGAngleValue::value() const { switch (m_unitType) { case SVG_ANGLETYPE_GRAD: return grad2deg(m_valueInSpecifiedUnits); case SVG_ANGLETYPE_RAD: return rad2deg(m_valueInSpecifiedUnits); case SVG_ANGLETYPE_UNSPECIFIED: case SVG_ANGLETYPE_UNKNOWN: case SVG_ANGLETYPE_DEG: return m_valueInSpecifiedUnits; } ASSERT_NOT_REACHED(); return 0; }
double CSSAngleValue::degrees() const { switch (m_unit) { case CSSPrimitiveValue::UnitType::Degrees: return m_value; case CSSPrimitiveValue::UnitType::Radians: return rad2deg(m_value); case CSSPrimitiveValue::UnitType::Gradians: return grad2deg(m_value); case CSSPrimitiveValue::UnitType::Turns: return turn2deg(m_value); default: NOTREACHED(); return 0; } }
double CSSPrimitiveValue::computeDegrees() { switch (m_primitiveUnitType) { case CSS_DEG: return getDoubleValue(); case CSS_RAD: return rad2deg(getDoubleValue()); case CSS_GRAD: return grad2deg(getDoubleValue()); case CSS_TURN: return turn2deg(getDoubleValue()); default: ASSERT_NOT_REACHED(); return 0; } }
double CSSPrimitiveValue::computeDegrees() const { ASSERT(isAngle() || (isCalculated() && cssCalcValue()->category() == CalcAngle)); UnitType currentType = isCalculated() ? cssCalcValue()->expressionNode()->typeWithCalcResolved() : type(); switch (currentType) { case UnitType::Degrees: return getDoubleValue(); case UnitType::Radians: return rad2deg(getDoubleValue()); case UnitType::Gradians: return grad2deg(getDoubleValue()); case UnitType::Turns: return turn2deg(getDoubleValue()); default: ASSERT_NOT_REACHED(); return 0; } }
void SVGAngle::convertToSpecifiedUnits(unsigned short unitType) { if (m_unitType == unitType) return; if (m_unitType == SVG_ANGLETYPE_DEG && unitType == SVG_ANGLETYPE_RAD) m_valueInSpecifiedUnits = deg2rad(m_valueInSpecifiedUnits); else if (m_unitType == SVG_ANGLETYPE_GRAD && unitType == SVG_ANGLETYPE_RAD) m_valueInSpecifiedUnits = grad2rad(m_valueInSpecifiedUnits); else if (m_unitType == SVG_ANGLETYPE_DEG && unitType == SVG_ANGLETYPE_GRAD) m_valueInSpecifiedUnits = deg2grad(m_valueInSpecifiedUnits); else if (m_unitType == SVG_ANGLETYPE_RAD && unitType == SVG_ANGLETYPE_GRAD) m_valueInSpecifiedUnits = rad2grad(m_valueInSpecifiedUnits); else if (m_unitType == SVG_ANGLETYPE_RAD && unitType == SVG_ANGLETYPE_DEG) m_valueInSpecifiedUnits = rad2deg(m_valueInSpecifiedUnits); else if (m_unitType == SVG_ANGLETYPE_GRAD && unitType == SVG_ANGLETYPE_DEG) m_valueInSpecifiedUnits = grad2deg(m_valueInSpecifiedUnits); m_unitType = (SVGAngleType)unitType; }
void SVGAngle::convertToSpecifiedUnits(unsigned short unitType, ExceptionCode& ec) { if (unitType == SVG_ANGLETYPE_UNKNOWN || m_unitType == SVG_ANGLETYPE_UNKNOWN || unitType > SVG_ANGLETYPE_GRAD) { ec = NOT_SUPPORTED_ERR; return; } if (unitType == m_unitType) return; switch (m_unitType) { case SVG_ANGLETYPE_RAD: switch (unitType) { case SVG_ANGLETYPE_GRAD: m_valueInSpecifiedUnits = rad2grad(m_valueInSpecifiedUnits); break; case SVG_ANGLETYPE_UNSPECIFIED: case SVG_ANGLETYPE_DEG: m_valueInSpecifiedUnits = rad2deg(m_valueInSpecifiedUnits); break; case SVG_ANGLETYPE_RAD: case SVG_ANGLETYPE_UNKNOWN: ASSERT_NOT_REACHED(); break; } break; case SVG_ANGLETYPE_GRAD: switch (unitType) { case SVG_ANGLETYPE_RAD: m_valueInSpecifiedUnits = grad2rad(m_valueInSpecifiedUnits); break; case SVG_ANGLETYPE_UNSPECIFIED: case SVG_ANGLETYPE_DEG: m_valueInSpecifiedUnits = grad2deg(m_valueInSpecifiedUnits); break; case SVG_ANGLETYPE_GRAD: case SVG_ANGLETYPE_UNKNOWN: ASSERT_NOT_REACHED(); break; } break; case SVG_ANGLETYPE_UNSPECIFIED: // Spec: For angles, a unitless value is treated the same as if degrees were specified. case SVG_ANGLETYPE_DEG: switch (unitType) { case SVG_ANGLETYPE_RAD: m_valueInSpecifiedUnits = deg2rad(m_valueInSpecifiedUnits); break; case SVG_ANGLETYPE_GRAD: m_valueInSpecifiedUnits = deg2grad(m_valueInSpecifiedUnits); break; case SVG_ANGLETYPE_UNSPECIFIED: break; case SVG_ANGLETYPE_DEG: case SVG_ANGLETYPE_UNKNOWN: ASSERT_NOT_REACHED(); break; } break; case SVG_ANGLETYPE_UNKNOWN: ASSERT_NOT_REACHED(); break; } m_unitType = static_cast<SVGAngleType>(unitType); }