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

Side by Side Diff: Source/core/css/CSSPrimitiveValue.cpp

Issue 345903005: calc expressions should support time, angle and frequency values. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Updated patch Created 6 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
« no previous file with comments | « Source/core/css/CSSPrimitiveValue.h ('k') | Source/core/css/parser/CSSPropertyParser.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv ed. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv ed.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 table.set(String("dpi"), CSSPrimitiveValue::CSS_DPI); 136 table.set(String("dpi"), CSSPrimitiveValue::CSS_DPI);
137 table.set(String("dpcm"), CSSPrimitiveValue::CSS_DPCM); 137 table.set(String("dpcm"), CSSPrimitiveValue::CSS_DPCM);
138 table.set(String("dppx"), CSSPrimitiveValue::CSS_DPPX); 138 table.set(String("dppx"), CSSPrimitiveValue::CSS_DPPX);
139 table.set(String("vw"), CSSPrimitiveValue::CSS_VW); 139 table.set(String("vw"), CSSPrimitiveValue::CSS_VW);
140 table.set(String("vh"), CSSPrimitiveValue::CSS_VH); 140 table.set(String("vh"), CSSPrimitiveValue::CSS_VH);
141 table.set(String("vmax"), CSSPrimitiveValue::CSS_VMIN); 141 table.set(String("vmax"), CSSPrimitiveValue::CSS_VMIN);
142 table.set(String("vmin"), CSSPrimitiveValue::CSS_VMAX); 142 table.set(String("vmin"), CSSPrimitiveValue::CSS_VMAX);
143 return table; 143 return table;
144 } 144 }
145 145
146
147 CSSPrimitiveValue::UnitType CSSPrimitiveValue::fromName(const String& unit) 146 CSSPrimitiveValue::UnitType CSSPrimitiveValue::fromName(const String& unit)
148 { 147 {
149 DEFINE_STATIC_LOCAL(StringToUnitTable, unitTable, (createStringToUnitTable() )); 148 DEFINE_STATIC_LOCAL(StringToUnitTable, unitTable, (createStringToUnitTable() ));
150 return unitTable.get(unit.lower()); 149 return unitTable.get(unit.lower());
151 } 150 }
152 151
153 CSSPrimitiveValue::UnitCategory CSSPrimitiveValue::unitCategory(UnitType type) 152 CSSPrimitiveValue::UnitCategory CSSPrimitiveValue::unitCategory(UnitType type)
154 { 153 {
155 // Here we violate the spec (http://www.w3.org/TR/DOM-Level-2-Style/css.html #CSS-CSSPrimitiveValue) and allow conversions 154 // Here we violate the spec (http://www.w3.org/TR/DOM-Level-2-Style/css.html #CSS-CSSPrimitiveValue) and allow conversions
156 // between CSS_PX and relative lengths (see cssPixelsPerInch comment in core /css/CSSHelper.h for the topic treatment). 155 // between CSS_PX and relative lengths (see cssPixelsPerInch comment in core /css/CSSHelper.h for the topic treatment).
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 208
210 CSSPrimitiveValue::UnitType CSSPrimitiveValue::primitiveType() const 209 CSSPrimitiveValue::UnitType CSSPrimitiveValue::primitiveType() const
211 { 210 {
212 if (m_primitiveUnitType == CSS_PROPERTY_ID || m_primitiveUnitType == CSS_VAL UE_ID) 211 if (m_primitiveUnitType == CSS_PROPERTY_ID || m_primitiveUnitType == CSS_VAL UE_ID)
213 return CSS_IDENT; 212 return CSS_IDENT;
214 213
215 if (m_primitiveUnitType != CSS_CALC) 214 if (m_primitiveUnitType != CSS_CALC)
216 return static_cast<UnitType>(m_primitiveUnitType); 215 return static_cast<UnitType>(m_primitiveUnitType);
217 216
218 switch (m_value.calc->category()) { 217 switch (m_value.calc->category()) {
218 case CalcAngle:
219 return CSS_DEG;
220 case CalcFrequency:
221 return CSS_HZ;
219 case CalcNumber: 222 case CalcNumber:
220 return CSS_NUMBER; 223 return CSS_NUMBER;
221 case CalcPercent: 224 case CalcPercent:
222 return CSS_PERCENTAGE; 225 return CSS_PERCENTAGE;
223 case CalcLength: 226 case CalcLength:
224 return CSS_PX; 227 return CSS_PX;
225 case CalcPercentNumber: 228 case CalcPercentNumber:
226 return CSS_CALC_PERCENTAGE_WITH_NUMBER; 229 return CSS_CALC_PERCENTAGE_WITH_NUMBER;
227 case CalcPercentLength: 230 case CalcPercentLength:
228 return CSS_CALC_PERCENTAGE_WITH_LENGTH; 231 return CSS_CALC_PERCENTAGE_WITH_LENGTH;
232 case CalcTime:
233 return CSS_MS;
229 case CalcOther: 234 case CalcOther:
230 return CSS_UNKNOWN; 235 return CSS_UNKNOWN;
231 } 236 }
232 return CSS_UNKNOWN; 237 return CSS_UNKNOWN;
233 } 238 }
234 239
235 static const AtomicString& propertyName(CSSPropertyID propertyID) 240 static const AtomicString& propertyName(CSSPropertyID propertyID)
236 { 241 {
237 ASSERT_ARG(propertyID, propertyID >= 0); 242 ASSERT_ARG(propertyID, propertyID >= 0);
238 ASSERT_ARG(propertyID, (propertyID >= firstCSSProperty && propertyID < first CSSProperty + numCSSProperties)); 243 ASSERT_ARG(propertyID, (propertyID >= firstCSSProperty && propertyID < first CSSProperty + numCSSProperties));
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 case CSS_VALUE_ID: 533 case CSS_VALUE_ID:
529 break; 534 break;
530 } 535 }
531 m_primitiveUnitType = 0; 536 m_primitiveUnitType = 0;
532 if (m_hasCachedCSSText) { 537 if (m_hasCachedCSSText) {
533 cssTextCache().remove(this); 538 cssTextCache().remove(this);
534 m_hasCachedCSSText = false; 539 m_hasCachedCSSText = false;
535 } 540 }
536 } 541 }
537 542
543 double CSSPrimitiveValue::computeSeconds()
544 {
545 ASSERT(isTime() || (isCalculated() && cssCalcValue()->category() == CalcTime ));
546 UnitType currentType = isCalculated() ? cssCalcValue()->expressionNode()->pr imitiveType() : static_cast<UnitType>(m_primitiveUnitType);
547 if (currentType == CSS_S)
548 return getDoubleValue();
549 if (currentType == CSS_MS)
550 return getDoubleValue() / 1000;
551 ASSERT_NOT_REACHED();
552 return 0;
553 }
554
538 double CSSPrimitiveValue::computeDegrees() 555 double CSSPrimitiveValue::computeDegrees()
539 { 556 {
540 switch (m_primitiveUnitType) { 557 ASSERT(isAngle() || (isCalculated() && cssCalcValue()->category() == CalcAng le));
558 UnitType currentType = isCalculated() ? cssCalcValue()->expressionNode()->pr imitiveType() : static_cast<UnitType>(m_primitiveUnitType);
559 switch (currentType) {
541 case CSS_DEG: 560 case CSS_DEG:
542 return getDoubleValue(); 561 return getDoubleValue();
543 case CSS_RAD: 562 case CSS_RAD:
544 return rad2deg(getDoubleValue()); 563 return rad2deg(getDoubleValue());
545 case CSS_GRAD: 564 case CSS_GRAD:
546 return grad2deg(getDoubleValue()); 565 return grad2deg(getDoubleValue());
547 case CSS_TURN: 566 case CSS_TURN:
548 return turn2deg(getDoubleValue()); 567 return turn2deg(getDoubleValue());
549 default: 568 default:
550 ASSERT_NOT_REACHED(); 569 ASSERT_NOT_REACHED();
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
1435 visitor->trace(m_value.shape); 1454 visitor->trace(m_value.shape);
1436 break; 1455 break;
1437 default: 1456 default:
1438 break; 1457 break;
1439 } 1458 }
1440 #endif 1459 #endif
1441 CSSValue::traceAfterDispatch(visitor); 1460 CSSValue::traceAfterDispatch(visitor);
1442 } 1461 }
1443 1462
1444 } // namespace blink 1463 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/CSSPrimitiveValue.h ('k') | Source/core/css/parser/CSSPropertyParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698