Chromium Code Reviews| Index: Source/core/css/CSSCalculationValue.cpp |
| diff --git a/Source/core/css/CSSCalculationValue.cpp b/Source/core/css/CSSCalculationValue.cpp |
| index 79de5eb33bf8ee142bfad3958a9777d28b560c61..30289af4b1ecc3f4420569d6790371ea08790dff 100644 |
| --- a/Source/core/css/CSSCalculationValue.cpp |
| +++ b/Source/core/css/CSSCalculationValue.cpp |
| @@ -70,8 +70,17 @@ static CalculationCategory unitCategory(CSSPrimitiveValue::UnitType type) |
| case CSSPrimitiveValue::CSS_VMIN: |
| case CSSPrimitiveValue::CSS_VMAX: |
| return CalcLength; |
| - // FIXME: Support angle, time and frequency units. |
| - // http://www.w3.org/TR/css3-values/#calc-notation |
| + case CSSPrimitiveValue::CSS_DEG: |
| + case CSSPrimitiveValue::CSS_GRAD: |
| + case CSSPrimitiveValue::CSS_RAD: |
| + case CSSPrimitiveValue::CSS_TURN: |
| + return CalcAngle; |
| + case CSSPrimitiveValue::CSS_MS: |
| + case CSSPrimitiveValue::CSS_S: |
| + return CalcTime; |
| + case CSSPrimitiveValue::CSS_HZ: |
| + case CSSPrimitiveValue::CSS_KHZ: |
| + return CalcFrequency; |
| default: |
| return CalcOther; |
|
Mike Lawther (Google)
2014/07/04 04:36:40
Down on line 654 you removed the test for CalcOthe
|
| } |
| @@ -96,6 +105,7 @@ static bool hasDoubleValue(CSSPrimitiveValue::UnitType type) |
| case CSSPrimitiveValue::CSS_DEG: |
| case CSSPrimitiveValue::CSS_RAD: |
| case CSSPrimitiveValue::CSS_GRAD: |
| + case CSSPrimitiveValue::CSS_TURN: |
| case CSSPrimitiveValue::CSS_MS: |
| case CSSPrimitiveValue::CSS_S: |
| case CSSPrimitiveValue::CSS_HZ: |
| @@ -123,7 +133,6 @@ static bool hasDoubleValue(CSSPrimitiveValue::UnitType type) |
| case CSSPrimitiveValue::CSS_PARSER_OPERATOR: |
| case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR: |
| case CSSPrimitiveValue::CSS_PARSER_IDENTIFIER: |
| - case CSSPrimitiveValue::CSS_TURN: |
| case CSSPrimitiveValue::CSS_COUNTER_NAME: |
| case CSSPrimitiveValue::CSS_SHAPE: |
| case CSSPrimitiveValue::CSS_QUAD: |
| @@ -232,11 +241,14 @@ public: |
| switch (m_category) { |
| case CalcLength: |
| return m_value->computeLength<double>(conversionData); |
| - case CalcPercent: |
| case CalcNumber: |
| + case CalcPercent: |
| return m_value->getDoubleValue(); |
| + case CalcAngle: |
| + case CalcFrequency: |
| case CalcPercentLength: |
| case CalcPercentNumber: |
| + case CalcTime: |
| case CalcOther: |
| ASSERT_NOT_REACHED(); |
| break; |
| @@ -283,12 +295,15 @@ private: |
| }; |
| static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = { |
| -// CalcNumber CalcLength CalcPercent CalcPercentNumber CalcPercentLength |
| -/* CalcNumber */ { CalcNumber, CalcOther, CalcPercentNumber, CalcPercentNumber, CalcOther }, |
| -/* CalcLength */ { CalcOther, CalcLength, CalcPercentLength, CalcOther, CalcPercentLength }, |
| -/* CalcPercent */ { CalcPercentNumber, CalcPercentLength, CalcPercent, CalcPercentNumber, CalcPercentLength }, |
| -/* CalcPercentNumber */ { CalcPercentNumber, CalcOther, CalcPercentNumber, CalcPercentNumber, CalcOther }, |
| -/* CalcPercentLength */ { CalcOther, CalcPercentLength, CalcPercentLength, CalcOther, CalcPercentLength }, |
| +// CalcNumber CalcLength CalcPercent CalcPercentNumber CalcPercentLength CalcAngle CalcTime CalcFrequency |
| +/* CalcNumber */ { CalcNumber, CalcOther, CalcPercentNumber, CalcPercentNumber, CalcOther, CalcOther, CalcOther, CalcOther }, |
| +/* CalcLength */ { CalcOther, CalcLength, CalcPercentLength, CalcOther, CalcPercentLength, CalcOther, CalcOther, CalcOther }, |
| +/* CalcPercent */ { CalcPercentNumber, CalcPercentLength, CalcPercent, CalcPercentNumber, CalcPercentLength, CalcOther, CalcOther, CalcOther }, |
| +/* CalcPercentNumber */ { CalcPercentNumber, CalcOther, CalcPercentNumber, CalcPercentNumber, CalcOther, CalcOther, CalcOther, CalcOther }, |
| +/* CalcPercentLength */ { CalcOther, CalcPercentLength, CalcPercentLength, CalcOther, CalcPercentLength, CalcOther, CalcOther, CalcOther }, |
| +/* CalcAngle */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcAngle, CalcOther, CalcOther }, |
| +/* CalcTime */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcTime, CalcOther }, |
| +/* CalcFrequency */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcFrequency } |
| }; |
| static CalculationCategory determineCategory(const CSSCalcExpressionNode& leftSide, const CSSCalcExpressionNode& rightSide, CalcOperator op) |
| @@ -517,6 +532,12 @@ public: |
| return leftType; |
| return CSSPrimitiveValue::CSS_UNKNOWN; |
| } |
| + case CalcAngle: |
| + return CSSPrimitiveValue::CSS_DEG; |
| + case CalcTime: |
| + return CSSPrimitiveValue::CSS_MS; |
| + case CalcFrequency: |
| + return CSSPrimitiveValue::CSS_HZ; |
| case CalcPercentLength: |
| case CalcPercentNumber: |
| case CalcOther: |
| @@ -630,11 +651,7 @@ private: |
| if (!value || !value->isPrimitiveValue()) |
| return false; |
| - CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value.get()); |
| - if (unitCategory(primitiveValue->primitiveType()) == CalcOther) |
| - return false; |
| - |
| - result->value = CSSCalcPrimitiveValue::create(primitiveValue, parserValue->isInt); |
| + result->value = CSSCalcPrimitiveValue::create(toCSSPrimitiveValue(value.get()), parserValue->isInt); |
| ++*index; |
| return true; |