Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: third_party/WebKit/Source/core/css/CSSCalculationValue.cpp

Issue 2097383002: Added support of calc() for SVGLength (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698