OLD | NEW |
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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 return CSSPrimitiveValue::UFrequency; | 80 return CSSPrimitiveValue::UFrequency; |
81 case UnitType::DotsPerPixel: | 81 case UnitType::DotsPerPixel: |
82 case UnitType::DotsPerInch: | 82 case UnitType::DotsPerInch: |
83 case UnitType::DotsPerCentimeter: | 83 case UnitType::DotsPerCentimeter: |
84 return CSSPrimitiveValue::UResolution; | 84 return CSSPrimitiveValue::UResolution; |
85 default: | 85 default: |
86 return CSSPrimitiveValue::UOther; | 86 return CSSPrimitiveValue::UOther; |
87 } | 87 } |
88 } | 88 } |
89 | 89 |
90 bool CSSPrimitiveValue::colorIsDerivedFromElement() const | |
91 { | |
92 int valueID = getValueID(); | |
93 switch (valueID) { | |
94 case CSSValueInternalQuirkInherit: | |
95 case CSSValueWebkitLink: | |
96 case CSSValueWebkitActivelink: | |
97 case CSSValueCurrentcolor: | |
98 return true; | |
99 default: | |
100 return false; | |
101 } | |
102 } | |
103 | |
104 CSSPrimitiveValue* CSSPrimitiveValue::createIdentifier(CSSValueID valueID) | |
105 { | |
106 CSSPrimitiveValue* cssValue = cssValuePool().identifierCacheValue(valueID); | |
107 if (!cssValue) | |
108 cssValue = cssValuePool().setIdentifierCacheValue(valueID, new CSSPrimit
iveValue(valueID)); | |
109 return cssValue; | |
110 } | |
111 | |
112 CSSPrimitiveValue* CSSPrimitiveValue::create(double value, UnitType type) | 90 CSSPrimitiveValue* CSSPrimitiveValue::create(double value, UnitType type) |
113 { | 91 { |
114 // TODO(timloh): This looks wrong. | 92 // TODO(timloh): This looks wrong. |
115 if (std::isinf(value)) | 93 if (std::isinf(value)) |
116 value = 0; | 94 value = 0; |
117 | 95 |
118 if (value < 0 || value > CSSValuePool::maximumCacheableIntegerValue) | 96 if (value < 0 || value > CSSValuePool::maximumCacheableIntegerValue) |
119 return new CSSPrimitiveValue(value, type); | 97 return new CSSPrimitiveValue(value, type); |
120 | 98 |
121 int intValue = static_cast<int>(value); | 99 int intValue = static_cast<int>(value); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 case CalcPercentLengthNumber: | 157 case CalcPercentLengthNumber: |
180 return UnitType::CalcPercentageWithLengthAndNumber; | 158 return UnitType::CalcPercentageWithLengthAndNumber; |
181 case CalcTime: | 159 case CalcTime: |
182 return UnitType::Milliseconds; | 160 return UnitType::Milliseconds; |
183 case CalcOther: | 161 case CalcOther: |
184 return UnitType::Unknown; | 162 return UnitType::Unknown; |
185 } | 163 } |
186 return UnitType::Unknown; | 164 return UnitType::Unknown; |
187 } | 165 } |
188 | 166 |
189 static const AtomicString& valueName(CSSValueID valueID) | |
190 { | |
191 DCHECK_GE(valueID, 0); | |
192 DCHECK_LT(valueID, numCSSValueKeywords); | |
193 | |
194 if (valueID < 0) | |
195 return nullAtom; | |
196 | |
197 static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords];
// Leaked intentionally. | |
198 AtomicString& keywordString = keywordStrings[valueID]; | |
199 if (keywordString.isNull()) | |
200 keywordString = getValueName(valueID); | |
201 return keywordString; | |
202 } | |
203 | |
204 CSSPrimitiveValue::CSSPrimitiveValue(CSSValueID valueID) | |
205 : CSSValue(PrimitiveClass) | |
206 { | |
207 init(UnitType::ValueID); | |
208 // TODO(sashab): Add a DCHECK_NE(valueID, CSSValueInvalid). | |
209 m_value.valueID = valueID; | |
210 } | |
211 | |
212 CSSPrimitiveValue::CSSPrimitiveValue(double num, UnitType type) | 167 CSSPrimitiveValue::CSSPrimitiveValue(double num, UnitType type) |
213 : CSSValue(PrimitiveClass) | 168 : CSSValue(PrimitiveClass) |
214 { | 169 { |
215 init(type); | 170 init(type); |
216 ASSERT(std::isfinite(num)); | 171 ASSERT(std::isfinite(num)); |
217 m_value.num = num; | 172 m_value.num = num; |
218 } | 173 } |
219 | 174 |
220 CSSPrimitiveValue::CSSPrimitiveValue(const Length& length, float zoom) | 175 CSSPrimitiveValue::CSSPrimitiveValue(const Length& length, float zoom) |
221 : CSSValue(PrimitiveClass) | 176 : CSSValue(PrimitiveClass) |
222 { | 177 { |
223 switch (length.type()) { | 178 switch (length.type()) { |
224 case Auto: | |
225 init(UnitType::ValueID); | |
226 m_value.valueID = CSSValueAuto; | |
227 break; | |
228 case MinContent: | |
229 init(UnitType::ValueID); | |
230 m_value.valueID = CSSValueMinContent; | |
231 break; | |
232 case MaxContent: | |
233 init(UnitType::ValueID); | |
234 m_value.valueID = CSSValueMaxContent; | |
235 break; | |
236 case FillAvailable: | |
237 init(UnitType::ValueID); | |
238 m_value.valueID = CSSValueWebkitFillAvailable; | |
239 break; | |
240 case FitContent: | |
241 init(UnitType::ValueID); | |
242 m_value.valueID = CSSValueFitContent; | |
243 break; | |
244 case ExtendToZoom: | |
245 init(UnitType::ValueID); | |
246 m_value.valueID = CSSValueInternalExtendToZoom; | |
247 break; | |
248 case Percent: | 179 case Percent: |
249 init(UnitType::Percentage); | 180 init(UnitType::Percentage); |
250 ASSERT(std::isfinite(length.percent())); | 181 ASSERT(std::isfinite(length.percent())); |
251 m_value.num = length.percent(); | 182 m_value.num = length.percent(); |
252 break; | 183 break; |
253 case Fixed: | 184 case Fixed: |
254 init(UnitType::Pixels); | 185 init(UnitType::Pixels); |
255 m_value.num = length.value() / zoom; | 186 m_value.num = length.value() / zoom; |
256 break; | 187 break; |
257 case Calculated: { | 188 case Calculated: { |
258 const CalculationValue& calc = length.getCalculationValue(); | 189 const CalculationValue& calc = length.getCalculationValue(); |
259 if (calc.pixels() && calc.percent()) { | 190 if (calc.pixels() && calc.percent()) { |
260 init(CSSCalcValue::create( | 191 init(CSSCalcValue::create( |
261 CSSCalcValue::createExpressionNode(calc.pixels() / zoom, calc.pe
rcent()), | 192 CSSCalcValue::createExpressionNode(calc.pixels() / zoom, calc.pe
rcent()), |
262 calc.getValueRange())); | 193 calc.getValueRange())); |
263 break; | 194 break; |
264 } | 195 } |
265 if (calc.percent()) { | 196 if (calc.percent()) { |
266 init(UnitType::Percentage); | 197 init(UnitType::Percentage); |
267 m_value.num = calc.percent(); | 198 m_value.num = calc.percent(); |
268 } else { | 199 } else { |
269 init(UnitType::Pixels); | 200 init(UnitType::Pixels); |
270 m_value.num = calc.pixels() / zoom; | 201 m_value.num = calc.pixels() / zoom; |
271 } | 202 } |
272 if (m_value.num < 0 && calc.isNonNegative()) | 203 if (m_value.num < 0 && calc.isNonNegative()) |
273 m_value.num = 0; | 204 m_value.num = 0; |
274 break; | 205 break; |
275 } | 206 } |
| 207 case Auto: |
| 208 case MinContent: |
| 209 case MaxContent: |
| 210 case FillAvailable: |
| 211 case FitContent: |
| 212 case ExtendToZoom: |
276 case DeviceWidth: | 213 case DeviceWidth: |
277 case DeviceHeight: | 214 case DeviceHeight: |
278 case MaxSizeNone: | 215 case MaxSizeNone: |
279 ASSERT_NOT_REACHED(); | 216 ASSERT_NOT_REACHED(); |
280 break; | 217 break; |
281 } | 218 } |
282 } | 219 } |
283 | 220 |
284 void CSSPrimitiveValue::init(UnitType type) | 221 void CSSPrimitiveValue::init(UnitType type) |
285 { | 222 { |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
622 return "fr"; | 559 return "fr"; |
623 case UnitType::ViewportWidth: | 560 case UnitType::ViewportWidth: |
624 return "vw"; | 561 return "vw"; |
625 case UnitType::ViewportHeight: | 562 case UnitType::ViewportHeight: |
626 return "vh"; | 563 return "vh"; |
627 case UnitType::ViewportMin: | 564 case UnitType::ViewportMin: |
628 return "vmin"; | 565 return "vmin"; |
629 case UnitType::ViewportMax: | 566 case UnitType::ViewportMax: |
630 return "vmax"; | 567 return "vmax"; |
631 case UnitType::Unknown: | 568 case UnitType::Unknown: |
632 case UnitType::ValueID: | |
633 case UnitType::Calc: | 569 case UnitType::Calc: |
634 case UnitType::CalcPercentageWithNumber: | 570 case UnitType::CalcPercentageWithNumber: |
635 case UnitType::CalcPercentageWithLength: | 571 case UnitType::CalcPercentageWithLength: |
636 case UnitType::CalcLengthWithNumber: | 572 case UnitType::CalcLengthWithNumber: |
637 case UnitType::CalcPercentageWithLengthAndNumber: | 573 case UnitType::CalcPercentageWithLengthAndNumber: |
638 break; | 574 break; |
639 }; | 575 }; |
640 ASSERT_NOT_REACHED(); | 576 ASSERT_NOT_REACHED(); |
641 return ""; | 577 return ""; |
642 } | 578 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
681 case UnitType::Hertz: | 617 case UnitType::Hertz: |
682 case UnitType::Kilohertz: | 618 case UnitType::Kilohertz: |
683 case UnitType::Turns: | 619 case UnitType::Turns: |
684 case UnitType::Fraction: | 620 case UnitType::Fraction: |
685 case UnitType::ViewportWidth: | 621 case UnitType::ViewportWidth: |
686 case UnitType::ViewportHeight: | 622 case UnitType::ViewportHeight: |
687 case UnitType::ViewportMin: | 623 case UnitType::ViewportMin: |
688 case UnitType::ViewportMax: | 624 case UnitType::ViewportMax: |
689 text = formatNumber(m_value.num, unitTypeToString(type())); | 625 text = formatNumber(m_value.num, unitTypeToString(type())); |
690 break; | 626 break; |
691 case UnitType::ValueID: | |
692 text = valueName(m_value.valueID); | |
693 break; | |
694 case UnitType::Calc: | 627 case UnitType::Calc: |
695 text = m_value.calc->customCSSText(); | 628 text = m_value.calc->customCSSText(); |
696 break; | 629 break; |
697 case UnitType::CalcPercentageWithNumber: | 630 case UnitType::CalcPercentageWithNumber: |
698 case UnitType::CalcPercentageWithLength: | 631 case UnitType::CalcPercentageWithLength: |
699 case UnitType::CalcLengthWithNumber: | 632 case UnitType::CalcLengthWithNumber: |
700 case UnitType::CalcPercentageWithLengthAndNumber: | 633 case UnitType::CalcPercentageWithLengthAndNumber: |
701 ASSERT_NOT_REACHED(); | 634 ASSERT_NOT_REACHED(); |
702 break; | 635 break; |
703 } | 636 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 case UnitType::Seconds: | 672 case UnitType::Seconds: |
740 case UnitType::Hertz: | 673 case UnitType::Hertz: |
741 case UnitType::Kilohertz: | 674 case UnitType::Kilohertz: |
742 case UnitType::Turns: | 675 case UnitType::Turns: |
743 case UnitType::ViewportWidth: | 676 case UnitType::ViewportWidth: |
744 case UnitType::ViewportHeight: | 677 case UnitType::ViewportHeight: |
745 case UnitType::ViewportMin: | 678 case UnitType::ViewportMin: |
746 case UnitType::ViewportMax: | 679 case UnitType::ViewportMax: |
747 case UnitType::Fraction: | 680 case UnitType::Fraction: |
748 return m_value.num == other.m_value.num; | 681 return m_value.num == other.m_value.num; |
749 case UnitType::ValueID: | |
750 return m_value.valueID == other.m_value.valueID; | |
751 case UnitType::Calc: | 682 case UnitType::Calc: |
752 return m_value.calc && other.m_value.calc && m_value.calc->equals(*other
.m_value.calc); | 683 return m_value.calc && other.m_value.calc && m_value.calc->equals(*other
.m_value.calc); |
753 case UnitType::Chs: | 684 case UnitType::Chs: |
754 case UnitType::CalcPercentageWithNumber: | 685 case UnitType::CalcPercentageWithNumber: |
755 case UnitType::CalcPercentageWithLength: | 686 case UnitType::CalcPercentageWithLength: |
756 case UnitType::CalcLengthWithNumber: | 687 case UnitType::CalcLengthWithNumber: |
757 case UnitType::CalcPercentageWithLengthAndNumber: | 688 case UnitType::CalcPercentageWithLengthAndNumber: |
758 case UnitType::QuirkyEms: | 689 case UnitType::QuirkyEms: |
759 return false; | 690 return false; |
760 } | 691 } |
761 return false; | 692 return false; |
762 } | 693 } |
763 | 694 |
764 DEFINE_TRACE_AFTER_DISPATCH(CSSPrimitiveValue) | 695 DEFINE_TRACE_AFTER_DISPATCH(CSSPrimitiveValue) |
765 { | 696 { |
766 switch (type()) { | 697 switch (type()) { |
767 case UnitType::Calc: | 698 case UnitType::Calc: |
768 visitor->trace(m_value.calc); | 699 visitor->trace(m_value.calc); |
769 break; | 700 break; |
770 default: | 701 default: |
771 break; | 702 break; |
772 } | 703 } |
773 CSSValue::traceAfterDispatch(visitor); | 704 CSSValue::traceAfterDispatch(visitor); |
774 } | 705 } |
775 | 706 |
776 } // namespace blink | 707 } // namespace blink |
OLD | NEW |