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 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 case CSSPrimitiveValue::UnitType::DotsPerPixel: | 116 case CSSPrimitiveValue::UnitType::DotsPerPixel: |
117 case CSSPrimitiveValue::UnitType::DotsPerInch: | 117 case CSSPrimitiveValue::UnitType::DotsPerInch: |
118 case CSSPrimitiveValue::UnitType::DotsPerCentimeter: | 118 case CSSPrimitiveValue::UnitType::DotsPerCentimeter: |
119 case CSSPrimitiveValue::UnitType::Fraction: | 119 case CSSPrimitiveValue::UnitType::Fraction: |
120 case CSSPrimitiveValue::UnitType::Integer: | 120 case CSSPrimitiveValue::UnitType::Integer: |
121 return true; | 121 return true; |
122 case CSSPrimitiveValue::UnitType::Unknown: | 122 case CSSPrimitiveValue::UnitType::Unknown: |
123 case CSSPrimitiveValue::UnitType::Calc: | 123 case CSSPrimitiveValue::UnitType::Calc: |
124 case CSSPrimitiveValue::UnitType::CalcPercentageWithNumber: | 124 case CSSPrimitiveValue::UnitType::CalcPercentageWithNumber: |
125 case CSSPrimitiveValue::UnitType::CalcPercentageWithLength: | 125 case CSSPrimitiveValue::UnitType::CalcPercentageWithLength: |
| 126 case CSSPrimitiveValue::UnitType::CalcLengthWithNumber: |
| 127 case CSSPrimitiveValue::UnitType::CalcPercentageWithLengthAndNumber: |
126 case CSSPrimitiveValue::UnitType::ValueID: | 128 case CSSPrimitiveValue::UnitType::ValueID: |
127 case CSSPrimitiveValue::UnitType::QuirkyEms: | 129 case CSSPrimitiveValue::UnitType::QuirkyEms: |
128 return false; | 130 return false; |
129 }; | 131 }; |
130 ASSERT_NOT_REACHED(); | 132 ASSERT_NOT_REACHED(); |
131 return false; | 133 return false; |
132 } | 134 } |
133 | 135 |
134 static String buildCSSText(const String& expression) | 136 static String buildCSSText(const String& expression) |
135 { | 137 { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 void accumulatePixelsAndPercent(const CSSToLengthConversionData& conversionD
ata, PixelsAndPercent& value, float multiplier) const override | 199 void accumulatePixelsAndPercent(const CSSToLengthConversionData& conversionD
ata, PixelsAndPercent& value, float multiplier) const override |
198 { | 200 { |
199 switch (m_category) { | 201 switch (m_category) { |
200 case CalcLength: | 202 case CalcLength: |
201 value.pixels += m_value->computeLength<float>(conversionData) * mult
iplier; | 203 value.pixels += m_value->computeLength<float>(conversionData) * mult
iplier; |
202 break; | 204 break; |
203 case CalcPercent: | 205 case CalcPercent: |
204 ASSERT(m_value->isPercentage()); | 206 ASSERT(m_value->isPercentage()); |
205 value.percent += m_value->getDoubleValue() * multiplier; | 207 value.percent += m_value->getDoubleValue() * multiplier; |
206 break; | 208 break; |
| 209 case CalcNumber: |
| 210 // TODO(alancutter): Stop treating numbers like pixels unconditional
ly in calcs to be able to accomodate border-image-width |
| 211 // https://drafts.csswg.org/css-backgrounds-3/#the-border-image-widt
h |
| 212 value.pixels += m_value->getDoubleValue() * multiplier; |
| 213 break; |
207 default: | 214 default: |
208 ASSERT_NOT_REACHED(); | 215 ASSERT_NOT_REACHED(); |
209 } | 216 } |
210 } | 217 } |
211 | 218 |
212 double doubleValue() const override | 219 double doubleValue() const override |
213 { | 220 { |
214 if (hasDoubleValue(typeWithCalcResolved())) | 221 if (hasDoubleValue(typeWithCalcResolved())) |
215 return m_value->getDoubleValue(); | 222 return m_value->getDoubleValue(); |
216 ASSERT_NOT_REACHED(); | 223 ASSERT_NOT_REACHED(); |
217 return 0; | 224 return 0; |
218 } | 225 } |
219 | 226 |
220 double computeLengthPx(const CSSToLengthConversionData& conversionData) cons
t override | 227 double computeLengthPx(const CSSToLengthConversionData& conversionData) cons
t override |
221 { | 228 { |
222 switch (m_category) { | 229 switch (m_category) { |
223 case CalcLength: | 230 case CalcLength: |
224 return m_value->computeLength<double>(conversionData); | 231 return m_value->computeLength<double>(conversionData); |
225 case CalcNumber: | 232 case CalcNumber: |
226 case CalcPercent: | 233 case CalcPercent: |
227 return m_value->getDoubleValue(); | 234 return m_value->getDoubleValue(); |
228 case CalcAngle: | 235 case CalcAngle: |
229 case CalcFrequency: | 236 case CalcFrequency: |
230 case CalcPercentLength: | 237 case CalcPercentLength: |
231 case CalcPercentNumber: | 238 case CalcPercentNumber: |
232 case CalcTime: | 239 case CalcTime: |
| 240 case CalcLengthNumber: |
| 241 case CalcPercentLengthNumber: |
233 case CalcOther: | 242 case CalcOther: |
234 ASSERT_NOT_REACHED(); | 243 ASSERT_NOT_REACHED(); |
235 break; | 244 break; |
236 } | 245 } |
237 ASSERT_NOT_REACHED(); | 246 ASSERT_NOT_REACHED(); |
238 return 0; | 247 return 0; |
239 } | 248 } |
240 | 249 |
241 void accumulateLengthArray(CSSLengthArray& lengthArray, double multiplier) c
onst override | 250 void accumulateLengthArray(CSSLengthArray& lengthArray, double multiplier) c
onst override |
242 { | 251 { |
(...skipping 26 matching lines...) Expand all Loading... |
269 CSSCalcPrimitiveValue(CSSPrimitiveValue* value, bool isInteger) | 278 CSSCalcPrimitiveValue(CSSPrimitiveValue* value, bool isInteger) |
270 : CSSCalcExpressionNode(unitCategory(value->typeWithCalcResolved()), isI
nteger) | 279 : CSSCalcExpressionNode(unitCategory(value->typeWithCalcResolved()), isI
nteger) |
271 , m_value(value) | 280 , m_value(value) |
272 { | 281 { |
273 } | 282 } |
274 | 283 |
275 Member<CSSPrimitiveValue> m_value; | 284 Member<CSSPrimitiveValue> m_value; |
276 }; | 285 }; |
277 | 286 |
278 static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = { | 287 static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = { |
279 // CalcNumber CalcLength CalcPercent
CalcPercentNumber CalcPercentLength CalcAngle CalcTime CalcFrequency | 288 // CalcNumber CalcLength
CalcPercent CalcPercentNumber CalcPercentLength Cal
cAngle CalcTime CalcFrequency CalcLengthNumber CalcPercentLengthNumb
er |
280 /* CalcNumber */ { CalcNumber, CalcOther, CalcPercentNumbe
r, CalcPercentNumber, CalcOther, CalcOther, CalcOther, CalcOther }, | 289 /* CalcNumber */ { CalcNumber, CalcLengthNumber,
CalcPercentNumber, CalcPercentNumber, CalcOther, Cal
cOther, CalcOther, CalcOther, CalcLengthNumber, CalcPercentLengthNumb
er }, |
281 /* CalcLength */ { CalcOther, CalcLength, CalcPercentLengt
h, CalcOther, CalcPercentLength, CalcOther, CalcOther, CalcOther }, | 290 /* CalcLength */ { CalcLengthNumber, CalcLength,
CalcPercentLength, CalcOther, CalcPercentLength, Cal
cOther, CalcOther, CalcOther, CalcLengthNumber, CalcPercentLengthNumb
er }, |
282 /* CalcPercent */ { CalcPercentNumber, CalcPercentLength, CalcPercent,
CalcPercentNumber, CalcPercentLength, CalcOther, CalcOther, CalcOther }, | 291 /* CalcPercent */ { CalcPercentNumber, CalcPercentLength,
CalcPercent, CalcPercentNumber, CalcPercentLength, Cal
cOther, CalcOther, CalcOther, CalcPercentLengthNumber, CalcPercentLengthNumb
er }, |
283 /* CalcPercentNumber */ { CalcPercentNumber, CalcOther, CalcPercentNumbe
r, CalcPercentNumber, CalcOther, CalcOther, CalcOther, CalcOther }, | 292 /* CalcPercentNumber */ { CalcPercentNumber, CalcPercentLengthNumber
, CalcPercentNumber, CalcPercentNumber, CalcPercentLengthNumber, Cal
cOther, CalcOther, CalcOther, CalcOther, CalcPercentLengthNumb
er }, |
284 /* CalcPercentLength */ { CalcOther, CalcPercentLength, CalcPercentLengt
h, CalcOther, CalcPercentLength, CalcOther, CalcOther, CalcOther }, | 293 /* CalcPercentLength */ { CalcPercentLengthNumber, CalcPercentLength,
CalcPercentLength, CalcPercentLengthNumber, CalcPercentLength, Cal
cOther, CalcOther, CalcOther, CalcOther, CalcPercentLengthNumb
er }, |
285 /* CalcAngle */ { CalcOther, CalcOther, CalcOther,
CalcOther, CalcOther, CalcAngle, CalcOther, CalcOther }, | 294 /* CalcAngle */ { CalcOther, CalcOther,
CalcOther, CalcOther, CalcOther, Cal
cAngle, CalcOther, CalcOther, CalcOther, CalcOther
}, |
286 /* CalcTime */ { CalcOther, CalcOther, CalcOther,
CalcOther, CalcOther, CalcOther, CalcTime, CalcOther }, | 295 /* CalcTime */ { CalcOther, CalcOther,
CalcOther, CalcOther, CalcOther, Cal
cOther, CalcTime, CalcOther, CalcOther, CalcOther
}, |
287 /* CalcFrequency */ { CalcOther, CalcOther, CalcOther,
CalcOther, CalcOther, CalcOther, CalcOther, CalcFrequency } | 296 /* CalcFrequency */ { CalcOther, CalcOther,
CalcOther, CalcOther, CalcOther, Cal
cOther, CalcOther, CalcFrequency, CalcOther, CalcOther
}, |
| 297 /* CalcLengthNumber */ { CalcLengthNumber, CalcLengthNumber,
CalcPercentLengthNumber, CalcPercentLengthNumber, CalcPercentLengthNumber, Cal
cOther, CalcOther, CalcOther, CalcLengthNumber, CalcPercentLengthNumb
er }, |
| 298 /* CalcPercentLengthNumber */ { CalcPercentLengthNumber, CalcPercentLengthNumber
, CalcPercentLengthNumber, CalcPercentLengthNumber, CalcPercentLengthNumber, Cal
cOther, CalcOther, CalcOther, CalcPercentLengthNumber, CalcPercentLengthNumb
er } |
288 }; | 299 }; |
289 | 300 |
290 static CalculationCategory determineCategory(const CSSCalcExpressionNode& leftSi
de, const CSSCalcExpressionNode& rightSide, CalcOperator op) | 301 static CalculationCategory determineCategory(const CSSCalcExpressionNode& leftSi
de, const CSSCalcExpressionNode& rightSide, CalcOperator op) |
291 { | 302 { |
292 CalculationCategory leftCategory = leftSide.category(); | 303 CalculationCategory leftCategory = leftSide.category(); |
293 CalculationCategory rightCategory = rightSide.category(); | 304 CalculationCategory rightCategory = rightSide.category(); |
294 | 305 |
295 if (leftCategory == CalcOther || rightCategory == CalcOther) | 306 if (leftCategory == CalcOther || rightCategory == CalcOther) |
296 return CalcOther; | 307 return CalcOther; |
297 | 308 |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 return CSSPrimitiveValue::UnitType::Unknown; | 522 return CSSPrimitiveValue::UnitType::Unknown; |
512 } | 523 } |
513 case CalcAngle: | 524 case CalcAngle: |
514 return CSSPrimitiveValue::UnitType::Degrees; | 525 return CSSPrimitiveValue::UnitType::Degrees; |
515 case CalcTime: | 526 case CalcTime: |
516 return CSSPrimitiveValue::UnitType::Milliseconds; | 527 return CSSPrimitiveValue::UnitType::Milliseconds; |
517 case CalcFrequency: | 528 case CalcFrequency: |
518 return CSSPrimitiveValue::UnitType::Hertz; | 529 return CSSPrimitiveValue::UnitType::Hertz; |
519 case CalcPercentLength: | 530 case CalcPercentLength: |
520 case CalcPercentNumber: | 531 case CalcPercentNumber: |
| 532 case CalcLengthNumber: |
| 533 case CalcPercentLengthNumber: |
521 case CalcOther: | 534 case CalcOther: |
522 return CSSPrimitiveValue::UnitType::Unknown; | 535 return CSSPrimitiveValue::UnitType::Unknown; |
523 } | 536 } |
524 ASSERT_NOT_REACHED(); | 537 ASSERT_NOT_REACHED(); |
525 return CSSPrimitiveValue::UnitType::Unknown; | 538 return CSSPrimitiveValue::UnitType::Unknown; |
526 } | 539 } |
527 | 540 |
528 DEFINE_INLINE_VIRTUAL_TRACE() | 541 DEFINE_INLINE_VIRTUAL_TRACE() |
529 { | 542 { |
530 visitor->trace(m_leftSide); | 543 visitor->trace(m_leftSide); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 | 746 |
734 return expression ? new CSSCalcValue(expression, range) : nullptr; | 747 return expression ? new CSSCalcValue(expression, range) : nullptr; |
735 } | 748 } |
736 | 749 |
737 CSSCalcValue* CSSCalcValue::create(CSSCalcExpressionNode* expression, ValueRange
range) | 750 CSSCalcValue* CSSCalcValue::create(CSSCalcExpressionNode* expression, ValueRange
range) |
738 { | 751 { |
739 return new CSSCalcValue(expression, range); | 752 return new CSSCalcValue(expression, range); |
740 } | 753 } |
741 | 754 |
742 } // namespace blink | 755 } // namespace blink |
OLD | NEW |