Index: Source/core/css/CSSPrimitiveValue.cpp |
diff --git a/Source/core/css/CSSPrimitiveValue.cpp b/Source/core/css/CSSPrimitiveValue.cpp |
index ae9dc85a4265d88911e438e6c17be192c0e03145..3df44cc1d45a414ead7c3d22f48de134f82b3e07 100644 |
--- a/Source/core/css/CSSPrimitiveValue.cpp |
+++ b/Source/core/css/CSSPrimitiveValue.cpp |
@@ -143,6 +143,13 @@ StringToUnitTable createStringToUnitTable() |
return table; |
} |
+CSSPrimitiveValue::UnitType CSSPrimitiveValue::calcUnitType() const |
+{ |
+ CSSCalcExpressionNode* calcExpressionNode = cssCalcValue()->expressionNode(); |
+ if (calcExpressionNode) |
+ return calcExpressionNode->primitiveType(); |
+ return CSS_UNKNOWN; |
alancutter (OOO until 2018)
2014/07/21 14:03:47
This function should only get called if we are a c
|
+} |
CSSPrimitiveValue::UnitType CSSPrimitiveValue::fromName(const String& unit) |
{ |
@@ -216,6 +223,10 @@ CSSPrimitiveValue::UnitType CSSPrimitiveValue::primitiveType() const |
return static_cast<UnitType>(m_primitiveUnitType); |
switch (m_value.calc->category()) { |
+ case CalcAngle: |
+ return CSS_DEG; |
+ case CalcFrequency: |
+ return CSS_HZ; |
case CalcNumber: |
return CSS_NUMBER; |
case CalcPercent: |
@@ -226,6 +237,8 @@ CSSPrimitiveValue::UnitType CSSPrimitiveValue::primitiveType() const |
return CSS_CALC_PERCENTAGE_WITH_NUMBER; |
case CalcPercentLength: |
return CSS_CALC_PERCENTAGE_WITH_LENGTH; |
+ case CalcTime: |
+ return CSS_MS; |
case CalcOther: |
return CSS_UNKNOWN; |
} |
@@ -534,9 +547,23 @@ void CSSPrimitiveValue::cleanup() |
} |
} |
+double CSSPrimitiveValue::computeSeconds() |
+{ |
+ ASSERT(isTime() || (isCalculated() && cssCalcValue()->category() == CalcTime)); |
+ UnitType currentType = isCalculated() ? calcUnitType() : static_cast<UnitType>(m_primitiveUnitType); |
+ if (currentType == CSS_S) |
+ return getDoubleValue(); |
+ if (currentType == CSS_MS) |
+ return getDoubleValue() / 1000; |
+ ASSERT_NOT_REACHED(); |
+ return 0; |
+} |
+ |
double CSSPrimitiveValue::computeDegrees() |
{ |
- switch (m_primitiveUnitType) { |
+ ASSERT(isAngle() || (isCalculated() && cssCalcValue()->category() == CalcAngle)); |
+ UnitType currentType = isCalculated() ? calcUnitType() : static_cast<UnitType>(m_primitiveUnitType); |
+ switch (currentType) { |
case CSS_DEG: |
return getDoubleValue(); |
case CSS_RAD: |