OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
117 case CSSPrimitiveValue::UnitType::DotsPerPixel: | 117 case CSSPrimitiveValue::UnitType::DotsPerPixel: |
118 case CSSPrimitiveValue::UnitType::DotsPerInch: | 118 case CSSPrimitiveValue::UnitType::DotsPerInch: |
119 case CSSPrimitiveValue::UnitType::DotsPerCentimeter: | 119 case CSSPrimitiveValue::UnitType::DotsPerCentimeter: |
120 case CSSPrimitiveValue::UnitType::Fraction: | 120 case CSSPrimitiveValue::UnitType::Fraction: |
121 case CSSPrimitiveValue::UnitType::Integer: | 121 case CSSPrimitiveValue::UnitType::Integer: |
122 return true; | 122 return true; |
123 case CSSPrimitiveValue::UnitType::Unknown: | 123 case CSSPrimitiveValue::UnitType::Unknown: |
124 case CSSPrimitiveValue::UnitType::Calc: | 124 case CSSPrimitiveValue::UnitType::Calc: |
125 case CSSPrimitiveValue::UnitType::CalcPercentageWithNumber: | 125 case CSSPrimitiveValue::UnitType::CalcPercentageWithNumber: |
126 case CSSPrimitiveValue::UnitType::CalcPercentageWithLength: | 126 case CSSPrimitiveValue::UnitType::CalcPercentageWithLength: |
127 case CSSPrimitiveValue::UnitType::CalcLengthWithNumber: | |
128 case CSSPrimitiveValue::UnitType::CalcPercentageWithLengthAndNumber: | |
127 case CSSPrimitiveValue::UnitType::ValueID: | 129 case CSSPrimitiveValue::UnitType::ValueID: |
128 case CSSPrimitiveValue::UnitType::QuirkyEms: | 130 case CSSPrimitiveValue::UnitType::QuirkyEms: |
129 return false; | 131 return false; |
130 }; | 132 }; |
131 ASSERT_NOT_REACHED(); | 133 ASSERT_NOT_REACHED(); |
132 return false; | 134 return false; |
133 } | 135 } |
134 | 136 |
135 static String buildCSSText(const String& expression) | 137 static String buildCSSText(const String& expression) |
136 { | 138 { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
198 void accumulatePixelsAndPercent(const CSSToLengthConversionData& conversionD ata, PixelsAndPercent& value, float multiplier) const override | 200 void accumulatePixelsAndPercent(const CSSToLengthConversionData& conversionD ata, PixelsAndPercent& value, float multiplier) const override |
199 { | 201 { |
200 switch (m_category) { | 202 switch (m_category) { |
201 case CalcLength: | 203 case CalcLength: |
202 value.pixels += m_value->computeLength<float>(conversionData) * mult iplier; | 204 value.pixels += m_value->computeLength<float>(conversionData) * mult iplier; |
203 break; | 205 break; |
204 case CalcPercent: | 206 case CalcPercent: |
205 ASSERT(m_value->isPercentage()); | 207 ASSERT(m_value->isPercentage()); |
206 value.percent += m_value->getDoubleValue() * multiplier; | 208 value.percent += m_value->getDoubleValue() * multiplier; |
207 break; | 209 break; |
210 case CalcNumber: | |
alancutter (OOO until 2018)
2016/07/06 07:45:46
This is not true for border-image-width (which doe
| |
211 value.pixels += m_value->getDoubleValue() * multiplier; | |
212 break; | |
208 default: | 213 default: |
209 ASSERT_NOT_REACHED(); | 214 ASSERT_NOT_REACHED(); |
210 } | 215 } |
211 } | 216 } |
212 | 217 |
213 double doubleValue() const override | 218 double doubleValue() const override |
214 { | 219 { |
215 if (hasDoubleValue(typeWithCalcResolved())) | 220 if (hasDoubleValue(typeWithCalcResolved())) |
216 return m_value->getDoubleValue(); | 221 return m_value->getDoubleValue(); |
217 ASSERT_NOT_REACHED(); | 222 ASSERT_NOT_REACHED(); |
218 return 0; | 223 return 0; |
219 } | 224 } |
220 | 225 |
221 double computeLengthPx(const CSSToLengthConversionData& conversionData) cons t override | 226 double computeLengthPx(const CSSToLengthConversionData& conversionData) cons t override |
222 { | 227 { |
223 switch (m_category) { | 228 switch (m_category) { |
224 case CalcLength: | 229 case CalcLength: |
225 return m_value->computeLength<double>(conversionData); | 230 return m_value->computeLength<double>(conversionData); |
226 case CalcNumber: | 231 case CalcNumber: |
227 case CalcPercent: | 232 case CalcPercent: |
228 return m_value->getDoubleValue(); | 233 return m_value->getDoubleValue(); |
229 case CalcAngle: | 234 case CalcAngle: |
230 case CalcFrequency: | 235 case CalcFrequency: |
231 case CalcPercentLength: | 236 case CalcPercentLength: |
232 case CalcPercentNumber: | 237 case CalcPercentNumber: |
233 case CalcTime: | 238 case CalcTime: |
239 case CalcLengthNumber: | |
240 case CalcPercentLengthNumber: | |
234 case CalcOther: | 241 case CalcOther: |
235 ASSERT_NOT_REACHED(); | 242 ASSERT_NOT_REACHED(); |
236 break; | 243 break; |
237 } | 244 } |
238 ASSERT_NOT_REACHED(); | 245 ASSERT_NOT_REACHED(); |
239 return 0; | 246 return 0; |
240 } | 247 } |
241 | 248 |
242 void accumulateLengthArray(CSSLengthArray& lengthArray, double multiplier) c onst override | 249 void accumulateLengthArray(CSSLengthArray& lengthArray, double multiplier) c onst override |
243 { | 250 { |
(...skipping 26 matching lines...) Expand all Loading... | |
270 CSSCalcPrimitiveValue(CSSPrimitiveValue* value, bool isInteger) | 277 CSSCalcPrimitiveValue(CSSPrimitiveValue* value, bool isInteger) |
271 : CSSCalcExpressionNode(unitCategory(value->typeWithCalcResolved()), isI nteger) | 278 : CSSCalcExpressionNode(unitCategory(value->typeWithCalcResolved()), isI nteger) |
272 , m_value(value) | 279 , m_value(value) |
273 { | 280 { |
274 } | 281 } |
275 | 282 |
276 Member<CSSPrimitiveValue> m_value; | 283 Member<CSSPrimitiveValue> m_value; |
277 }; | 284 }; |
278 | 285 |
279 static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = { | 286 static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = { |
280 // CalcNumber CalcLength CalcPercent CalcPercentNumber CalcPercentLength CalcAngle CalcTime CalcFrequency | 287 // CalcNumber CalcLength CalcPercent CalcPercentNumber CalcPercentLength Cal cAngle CalcTime CalcFrequency CalcLengthNumber CalcPercentLengthNumb er |
281 /* CalcNumber */ { CalcNumber, CalcOther, CalcPercentNumbe r, CalcPercentNumber, CalcOther, CalcOther, CalcOther, CalcOther }, | 288 /* CalcNumber */ { CalcNumber, CalcLengthNumber, CalcPercentNumber, CalcPercentNumber, CalcOther, Cal cOther, CalcOther, CalcOther, CalcLengthNumber, CalcPercentLengthNumb er }, |
282 /* CalcLength */ { CalcOther, CalcLength, CalcPercentLengt h, CalcOther, CalcPercentLength, CalcOther, CalcOther, CalcOther }, | 289 /* CalcLength */ { CalcLengthNumber, CalcLength, CalcPercentLength, CalcOther, CalcPercentLength, Cal cOther, CalcOther, CalcOther, CalcLengthNumber, CalcPercentLengthNumb er }, |
283 /* CalcPercent */ { CalcPercentNumber, CalcPercentLength, CalcPercent, CalcPercentNumber, CalcPercentLength, CalcOther, CalcOther, CalcOther }, | 290 /* CalcPercent */ { CalcPercentNumber, CalcPercentLength, CalcPercent, CalcPercentNumber, CalcPercentLength, Cal cOther, CalcOther, CalcOther, CalcPercentLengthNumber, CalcPercentLengthNumb er }, |
284 /* CalcPercentNumber */ { CalcPercentNumber, CalcOther, CalcPercentNumbe r, CalcPercentNumber, CalcOther, CalcOther, CalcOther, CalcOther }, | 291 /* CalcPercentNumber */ { CalcPercentNumber, CalcPercentLengthNumber , CalcPercentNumber, CalcPercentNumber, CalcPercentLengthNumber, Cal cOther, CalcOther, CalcOther, CalcOther, CalcPercentLengthNumb er }, |
285 /* CalcPercentLength */ { CalcOther, CalcPercentLength, CalcPercentLengt h, CalcOther, CalcPercentLength, CalcOther, CalcOther, CalcOther }, | 292 /* CalcPercentLength */ { CalcPercentLengthNumber, CalcPercentLength, CalcPercentLength, CalcPercentLengthNumber, CalcPercentLength, Cal cOther, CalcOther, CalcOther, CalcOther, CalcPercentLengthNumb er }, |
286 /* CalcAngle */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcAngle, CalcOther, CalcOther }, | 293 /* CalcAngle */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, Cal cAngle, CalcOther, CalcOther, CalcOther, CalcOther }, |
287 /* CalcTime */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcTime, CalcOther }, | 294 /* CalcTime */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, Cal cOther, CalcTime, CalcOther, CalcOther, CalcOther }, |
288 /* CalcFrequency */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, CalcFrequency } | 295 /* CalcFrequency */ { CalcOther, CalcOther, CalcOther, CalcOther, CalcOther, Cal cOther, CalcOther, CalcFrequency, CalcOther, CalcOther }, |
296 /* CalcLengthNumber */ { CalcLengthNumber, CalcLengthNumber, CalcPercentLengthNumber, CalcPercentLengthNumber, CalcPercentLengthNumber, Cal cOther, CalcOther, CalcOther, CalcLengthNumber, CalcPercentLengthNumb er }, | |
297 /* CalcPercentLengthNumber */ { CalcPercentLengthNumber, CalcPercentLengthNumber , CalcPercentLengthNumber, CalcPercentLengthNumber, CalcPercentLengthNumber, Cal cOther, CalcOther, CalcOther, CalcPercentLengthNumber, CalcPercentLengthNumb er } | |
289 }; | 298 }; |
290 | 299 |
291 static CalculationCategory determineCategory(const CSSCalcExpressionNode& leftSi de, const CSSCalcExpressionNode& rightSide, CalcOperator op) | 300 static CalculationCategory determineCategory(const CSSCalcExpressionNode& leftSi de, const CSSCalcExpressionNode& rightSide, CalcOperator op) |
292 { | 301 { |
293 CalculationCategory leftCategory = leftSide.category(); | 302 CalculationCategory leftCategory = leftSide.category(); |
294 CalculationCategory rightCategory = rightSide.category(); | 303 CalculationCategory rightCategory = rightSide.category(); |
295 | 304 |
296 if (leftCategory == CalcOther || rightCategory == CalcOther) | 305 if (leftCategory == CalcOther || rightCategory == CalcOther) |
297 return CalcOther; | 306 return CalcOther; |
298 | 307 |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
512 return CSSPrimitiveValue::UnitType::Unknown; | 521 return CSSPrimitiveValue::UnitType::Unknown; |
513 } | 522 } |
514 case CalcAngle: | 523 case CalcAngle: |
515 return CSSPrimitiveValue::UnitType::Degrees; | 524 return CSSPrimitiveValue::UnitType::Degrees; |
516 case CalcTime: | 525 case CalcTime: |
517 return CSSPrimitiveValue::UnitType::Milliseconds; | 526 return CSSPrimitiveValue::UnitType::Milliseconds; |
518 case CalcFrequency: | 527 case CalcFrequency: |
519 return CSSPrimitiveValue::UnitType::Hertz; | 528 return CSSPrimitiveValue::UnitType::Hertz; |
520 case CalcPercentLength: | 529 case CalcPercentLength: |
521 case CalcPercentNumber: | 530 case CalcPercentNumber: |
531 case CalcLengthNumber: | |
532 case CalcPercentLengthNumber: | |
522 case CalcOther: | 533 case CalcOther: |
523 return CSSPrimitiveValue::UnitType::Unknown; | 534 return CSSPrimitiveValue::UnitType::Unknown; |
524 } | 535 } |
525 ASSERT_NOT_REACHED(); | 536 ASSERT_NOT_REACHED(); |
526 return CSSPrimitiveValue::UnitType::Unknown; | 537 return CSSPrimitiveValue::UnitType::Unknown; |
527 } | 538 } |
528 | 539 |
529 DEFINE_INLINE_VIRTUAL_TRACE() | 540 DEFINE_INLINE_VIRTUAL_TRACE() |
530 { | 541 { |
531 visitor->trace(m_leftSide); | 542 visitor->trace(m_leftSide); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
734 | 745 |
735 return expression ? new CSSCalcValue(expression, range) : nullptr; | 746 return expression ? new CSSCalcValue(expression, range) : nullptr; |
736 } | 747 } |
737 | 748 |
738 CSSCalcValue* CSSCalcValue::create(CSSCalcExpressionNode* expression, ValueRange range) | 749 CSSCalcValue* CSSCalcValue::create(CSSCalcExpressionNode* expression, ValueRange range) |
739 { | 750 { |
740 return new CSSCalcValue(expression, range); | 751 return new CSSCalcValue(expression, range); |
741 } | 752 } |
742 | 753 |
743 } // namespace blink | 754 } // namespace blink |
OLD | NEW |