| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/css/cssom/StyleCalcLength.h" | 5 #include "core/css/cssom/CSSStyleCalcLength.h" |
| 6 | 6 |
| 7 #include "core/css/CSSCalculationValue.h" | 7 #include "core/css/CSSCalculationValue.h" |
| 8 #include "core/css/CSSPrimitiveValue.h" | 8 #include "core/css/CSSPrimitiveValue.h" |
| 9 #include "core/css/cssom/CSSSimpleLength.h" |
| 9 #include "core/css/cssom/CalcDictionary.h" | 10 #include "core/css/cssom/CalcDictionary.h" |
| 10 #include "core/css/cssom/SimpleLength.h" | |
| 11 #include "wtf/Vector.h" | 11 #include "wtf/Vector.h" |
| 12 | 12 |
| 13 namespace blink { | 13 namespace blink { |
| 14 | 14 |
| 15 StyleCalcLength::StyleCalcLength() : m_values(LengthValue::kNumSupportedUnits),
m_hasValues(LengthValue::kNumSupportedUnits) {} | 15 CSSStyleCalcLength::CSSStyleCalcLength() : m_values(CSSLengthValue::kNumSupporte
dUnits), m_hasValues(CSSLengthValue::kNumSupportedUnits) {} |
| 16 | 16 |
| 17 StyleCalcLength::StyleCalcLength(const StyleCalcLength& other) : | 17 CSSStyleCalcLength::CSSStyleCalcLength(const CSSStyleCalcLength& other) : |
| 18 m_values(other.m_values), | 18 m_values(other.m_values), |
| 19 m_hasValues(other.m_hasValues) | 19 m_hasValues(other.m_hasValues) |
| 20 {} | 20 {} |
| 21 | 21 |
| 22 StyleCalcLength::StyleCalcLength(const SimpleLength& other) : | 22 CSSStyleCalcLength::CSSStyleCalcLength(const CSSSimpleLength& other) : |
| 23 m_values(LengthValue::kNumSupportedUnits), m_hasValues(LengthValue::kNumSupp
ortedUnits) | 23 m_values(CSSLengthValue::kNumSupportedUnits), m_hasValues(CSSLengthValue::kN
umSupportedUnits) |
| 24 { | 24 { |
| 25 set(other.value(), other.lengthUnit()); | 25 set(other.value(), other.lengthUnit()); |
| 26 } | 26 } |
| 27 | 27 |
| 28 StyleCalcLength* StyleCalcLength::create(const LengthValue* length) | 28 CSSStyleCalcLength* CSSStyleCalcLength::create(const CSSLengthValue* length) |
| 29 { | 29 { |
| 30 if (length->type() == SimpleLengthType) { | 30 if (length->type() == SimpleLengthType) { |
| 31 const SimpleLength* simpleLength = toSimpleLength(length); | 31 const CSSSimpleLength* simpleLength = toCSSSimpleLength(length); |
| 32 return new StyleCalcLength(*simpleLength); | 32 return new CSSStyleCalcLength(*simpleLength); |
| 33 } | 33 } |
| 34 | 34 |
| 35 return new StyleCalcLength(*toStyleCalcLength(length)); | 35 return new CSSStyleCalcLength(*toCSSStyleCalcLength(length)); |
| 36 } | 36 } |
| 37 | 37 |
| 38 StyleCalcLength* StyleCalcLength::create(const CalcDictionary& dictionary, Excep
tionState& exceptionState) | 38 CSSStyleCalcLength* CSSStyleCalcLength::create(const CalcDictionary& dictionary,
ExceptionState& exceptionState) |
| 39 { | 39 { |
| 40 StyleCalcLength* result = new StyleCalcLength(); | 40 CSSStyleCalcLength* result = new CSSStyleCalcLength(); |
| 41 int numSet = 0; | 41 int numSet = 0; |
| 42 | 42 |
| 43 #define setFromDictValue(name, camelName, primitiveName) \ | 43 #define setFromDictValue(name, camelName, primitiveName) \ |
| 44 if (dictionary.has##camelName()) { \ | 44 if (dictionary.has##camelName()) { \ |
| 45 result->set(dictionary.name(), CSSPrimitiveValue::UnitType::primitiveNam
e); \ | 45 result->set(dictionary.name(), CSSPrimitiveValue::UnitType::primitiveNam
e); \ |
| 46 numSet++; \ | 46 numSet++; \ |
| 47 } | 47 } |
| 48 | 48 |
| 49 setFromDictValue(px, Px, Pixels) | 49 setFromDictValue(px, Px, Pixels) |
| 50 setFromDictValue(percent, Percent, Percentage) | 50 setFromDictValue(percent, Percent, Percentage) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 61 setFromDictValue(in, In, Inches) | 61 setFromDictValue(in, In, Inches) |
| 62 setFromDictValue(pc, Pc, Picas) | 62 setFromDictValue(pc, Pc, Picas) |
| 63 setFromDictValue(pt, Pt, Points) | 63 setFromDictValue(pt, Pt, Points) |
| 64 | 64 |
| 65 if (numSet == 0) { | 65 if (numSet == 0) { |
| 66 exceptionState.throwTypeError("Must specify at least one value in CalcDi
ctionary for creating a CalcLength."); | 66 exceptionState.throwTypeError("Must specify at least one value in CalcDi
ctionary for creating a CalcLength."); |
| 67 } | 67 } |
| 68 return result; | 68 return result; |
| 69 } | 69 } |
| 70 | 70 |
| 71 bool StyleCalcLength::containsPercent() const | 71 bool CSSStyleCalcLength::containsPercent() const |
| 72 { | 72 { |
| 73 return has(CSSPrimitiveValue::UnitType::Percentage); | 73 return has(CSSPrimitiveValue::UnitType::Percentage); |
| 74 } | 74 } |
| 75 | 75 |
| 76 LengthValue* StyleCalcLength::addInternal(const LengthValue* other, ExceptionSta
te& exceptionState) | 76 CSSLengthValue* CSSStyleCalcLength::addInternal(const CSSLengthValue* other, Exc
eptionState& exceptionState) |
| 77 { | 77 { |
| 78 StyleCalcLength* result = StyleCalcLength::create(other, exceptionState); | 78 CSSStyleCalcLength* result = CSSStyleCalcLength::create(other, exceptionStat
e); |
| 79 for (int i = 0; i < LengthValue::kNumSupportedUnits; ++i) { | 79 for (int i = 0; i < CSSLengthValue::kNumSupportedUnits; ++i) { |
| 80 if (hasAtIndex(i)) { | 80 if (hasAtIndex(i)) { |
| 81 result->setAtIndex(getAtIndex(i) + result->getAtIndex(i), i); | 81 result->setAtIndex(getAtIndex(i) + result->getAtIndex(i), i); |
| 82 } | 82 } |
| 83 } | 83 } |
| 84 return result; | 84 return result; |
| 85 } | 85 } |
| 86 | 86 |
| 87 LengthValue* StyleCalcLength::subtractInternal(const LengthValue* other, Excepti
onState& exceptionState) | 87 CSSLengthValue* CSSStyleCalcLength::subtractInternal(const CSSLengthValue* other
, ExceptionState& exceptionState) |
| 88 { | 88 { |
| 89 StyleCalcLength* result = StyleCalcLength::create(this, exceptionState); | 89 CSSStyleCalcLength* result = CSSStyleCalcLength::create(this, exceptionState
); |
| 90 if (other->type() == CalcLengthType) { | 90 if (other->type() == CalcLengthType) { |
| 91 const StyleCalcLength* o = toStyleCalcLength(other); | 91 const CSSStyleCalcLength* o = toCSSStyleCalcLength(other); |
| 92 for (unsigned i = 0; i < LengthValue::kNumSupportedUnits; ++i) { | 92 for (unsigned i = 0; i < CSSLengthValue::kNumSupportedUnits; ++i) { |
| 93 if (o->hasAtIndex(i)) { | 93 if (o->hasAtIndex(i)) { |
| 94 result->setAtIndex(getAtIndex(i) - o->getAtIndex(i), i); | 94 result->setAtIndex(getAtIndex(i) - o->getAtIndex(i), i); |
| 95 } | 95 } |
| 96 } | 96 } |
| 97 } else { | 97 } else { |
| 98 const SimpleLength* o = toSimpleLength(other); | 98 const CSSSimpleLength* o = toCSSSimpleLength(other); |
| 99 result->set(get(o->lengthUnit()) - o->value(), o->lengthUnit()); | 99 result->set(get(o->lengthUnit()) - o->value(), o->lengthUnit()); |
| 100 } | 100 } |
| 101 return result; | 101 return result; |
| 102 } | 102 } |
| 103 | 103 |
| 104 LengthValue* StyleCalcLength::multiplyInternal(double x, ExceptionState& excepti
onState) | 104 CSSLengthValue* CSSStyleCalcLength::multiplyInternal(double x, ExceptionState& e
xceptionState) |
| 105 { | 105 { |
| 106 StyleCalcLength* result = StyleCalcLength::create(this, exceptionState); | 106 CSSStyleCalcLength* result = CSSStyleCalcLength::create(this, exceptionState
); |
| 107 for (unsigned i = 0; i < LengthValue::kNumSupportedUnits; ++i) { | 107 for (unsigned i = 0; i < CSSLengthValue::kNumSupportedUnits; ++i) { |
| 108 if (hasAtIndex(i)) { | 108 if (hasAtIndex(i)) { |
| 109 result->setAtIndex(getAtIndex(i) * x, i); | 109 result->setAtIndex(getAtIndex(i) * x, i); |
| 110 } | 110 } |
| 111 } | 111 } |
| 112 return result; | 112 return result; |
| 113 } | 113 } |
| 114 | 114 |
| 115 LengthValue* StyleCalcLength::divideInternal(double x, ExceptionState& exception
State) | 115 CSSLengthValue* CSSStyleCalcLength::divideInternal(double x, ExceptionState& exc
eptionState) |
| 116 { | 116 { |
| 117 StyleCalcLength* result = StyleCalcLength::create(this, exceptionState); | 117 CSSStyleCalcLength* result = CSSStyleCalcLength::create(this, exceptionState
); |
| 118 for (unsigned i = 0; i < LengthValue::kNumSupportedUnits; ++i) { | 118 for (unsigned i = 0; i < CSSLengthValue::kNumSupportedUnits; ++i) { |
| 119 if (hasAtIndex(i)) { | 119 if (hasAtIndex(i)) { |
| 120 result->setAtIndex(getAtIndex(i) / x, i); | 120 result->setAtIndex(getAtIndex(i) / x, i); |
| 121 } | 121 } |
| 122 } | 122 } |
| 123 return result; | 123 return result; |
| 124 } | 124 } |
| 125 | 125 |
| 126 CSSValue* StyleCalcLength::toCSSValue() const | 126 CSSValue* CSSStyleCalcLength::toCSSValue() const |
| 127 { | 127 { |
| 128 // Create a CSS Calc Value, then put it into a CSSPrimitiveValue | 128 // Create a CSS Calc Value, then put it into a CSSPrimitiveValue |
| 129 CSSCalcExpressionNode* node = nullptr; | 129 CSSCalcExpressionNode* node = nullptr; |
| 130 for (unsigned i = 0; i < LengthValue::kNumSupportedUnits; ++i) { | 130 for (unsigned i = 0; i < CSSLengthValue::kNumSupportedUnits; ++i) { |
| 131 if (!hasAtIndex(i)) | 131 if (!hasAtIndex(i)) |
| 132 continue; | 132 continue; |
| 133 double value = getAtIndex(i); | 133 double value = getAtIndex(i); |
| 134 if (node) { | 134 if (node) { |
| 135 node = CSSCalcValue::createExpressionNode( | 135 node = CSSCalcValue::createExpressionNode( |
| 136 node, | 136 node, |
| 137 CSSCalcValue::createExpressionNode(CSSPrimitiveValue::create(std
::abs(value), unitFromIndex(i))), | 137 CSSCalcValue::createExpressionNode(CSSPrimitiveValue::create(std
::abs(value), unitFromIndex(i))), |
| 138 value >= 0 ? CalcAdd : CalcSubtract); | 138 value >= 0 ? CalcAdd : CalcSubtract); |
| 139 } else { | 139 } else { |
| 140 node = CSSCalcValue::createExpressionNode(CSSPrimitiveValue::create(
value, unitFromIndex(i))); | 140 node = CSSCalcValue::createExpressionNode(CSSPrimitiveValue::create(
value, unitFromIndex(i))); |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 return CSSPrimitiveValue::create(CSSCalcValue::create(node)); | 143 return CSSPrimitiveValue::create(CSSCalcValue::create(node)); |
| 144 } | 144 } |
| 145 | 145 |
| 146 int StyleCalcLength::indexForUnit(CSSPrimitiveValue::UnitType unit) | 146 int CSSStyleCalcLength::indexForUnit(CSSPrimitiveValue::UnitType unit) |
| 147 { | 147 { |
| 148 return (static_cast<int>(unit) - static_cast<int>(CSSPrimitiveValue::UnitTyp
e::Percentage)); | 148 return (static_cast<int>(unit) - static_cast<int>(CSSPrimitiveValue::UnitTyp
e::Percentage)); |
| 149 } | 149 } |
| 150 | 150 |
| 151 } // namespace blink | 151 } // namespace blink |
| OLD | NEW |