| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> |
| 4 * Copyright (C) 2007 Apple Inc. All rights reserved. | 4 * Copyright (C) 2007 Apple Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 isCalcCSSUnitType(type)) && | 97 isCalcCSSUnitType(type)) && |
| 98 type != CSSPrimitiveValue::UnitType::QuirkyEms; | 98 type != CSSPrimitiveValue::UnitType::QuirkyEms; |
| 99 } | 99 } |
| 100 | 100 |
| 101 void SVGLength::setUnitType(CSSPrimitiveValue::UnitType type) { | 101 void SVGLength::setUnitType(CSSPrimitiveValue::UnitType type) { |
| 102 ASSERT(isSupportedCSSUnitType(type)); | 102 ASSERT(isSupportedCSSUnitType(type)); |
| 103 m_value = CSSPrimitiveValue::create(m_value->getFloatValue(), type); | 103 m_value = CSSPrimitiveValue::create(m_value->getFloatValue(), type); |
| 104 } | 104 } |
| 105 | 105 |
| 106 float SVGLength::valueAsPercentage() const { | 106 float SVGLength::valueAsPercentage() const { |
| 107 // LengthTypePercentage is represented with 100% = 100.0. Good for accuracy bu
t could eventually be changed. | 107 // LengthTypePercentage is represented with 100% = 100.0. Good for accuracy |
| 108 // but could eventually be changed. |
| 108 if (m_value->isPercentage()) { | 109 if (m_value->isPercentage()) { |
| 109 // Note: This division is a source of floating point inaccuracy. | 110 // Note: This division is a source of floating point inaccuracy. |
| 110 return m_value->getFloatValue() / 100; | 111 return m_value->getFloatValue() / 100; |
| 111 } | 112 } |
| 112 | 113 |
| 113 return m_value->getFloatValue(); | 114 return m_value->getFloatValue(); |
| 114 } | 115 } |
| 115 | 116 |
| 116 float SVGLength::valueAsPercentage100() const { | 117 float SVGLength::valueAsPercentage100() const { |
| 117 // LengthTypePercentage is represented with 100% = 100.0. Good for accuracy bu
t could eventually be changed. | 118 // LengthTypePercentage is represented with 100% = 100.0. Good for accuracy |
| 119 // but could eventually be changed. |
| 118 if (m_value->isPercentage()) | 120 if (m_value->isPercentage()) |
| 119 return m_value->getFloatValue(); | 121 return m_value->getFloatValue(); |
| 120 | 122 |
| 121 return m_value->getFloatValue() * 100; | 123 return m_value->getFloatValue() * 100; |
| 122 } | 124 } |
| 123 | 125 |
| 124 float SVGLength::scaleByPercentage(float input) const { | 126 float SVGLength::scaleByPercentage(float input) const { |
| 125 float result = input * m_value->getFloatValue(); | 127 float result = input * m_value->getFloatValue(); |
| 126 if (m_value->isPercentage()) { | 128 if (m_value->isPercentage()) { |
| 127 // Delaying division by 100 as long as possible since it introduces floating
point errors. | 129 // Delaying division by 100 as long as possible since it introduces floating |
| 130 // point errors. |
| 128 result = result / 100; | 131 result = result / 100; |
| 129 } | 132 } |
| 130 return result; | 133 return result; |
| 131 } | 134 } |
| 132 | 135 |
| 133 SVGParsingError SVGLength::setValueAsString(const String& string) { | 136 SVGParsingError SVGLength::setValueAsString(const String& string) { |
| 134 if (string.isEmpty()) { | 137 if (string.isEmpty()) { |
| 135 m_value = | 138 m_value = |
| 136 CSSPrimitiveValue::create(0, CSSPrimitiveValue::UnitType::UserUnits); | 139 CSSPrimitiveValue::create(0, CSSPrimitiveValue::UnitType::UserUnits); |
| 137 return SVGParseStatus::NoError; | 140 return SVGParseStatus::NoError; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 SVGLengthContext lengthContext(contextElement); | 243 SVGLengthContext lengthContext(contextElement); |
| 241 float animatedNumber = value(lengthContext); | 244 float animatedNumber = value(lengthContext); |
| 242 animationElement->animateAdditiveNumber( | 245 animationElement->animateAdditiveNumber( |
| 243 percentage, repeatCount, fromLength->value(lengthContext), | 246 percentage, repeatCount, fromLength->value(lengthContext), |
| 244 toLength->value(lengthContext), | 247 toLength->value(lengthContext), |
| 245 toAtEndOfDurationLength->value(lengthContext), animatedNumber); | 248 toAtEndOfDurationLength->value(lengthContext), animatedNumber); |
| 246 | 249 |
| 247 ASSERT(unitMode() == lengthModeForAnimatedLengthAttribute( | 250 ASSERT(unitMode() == lengthModeForAnimatedLengthAttribute( |
| 248 animationElement->attributeName())); | 251 animationElement->attributeName())); |
| 249 | 252 |
| 250 // TODO(shanmuga.m): Construct a calc() expression if the units fall in differ
ent categories. | 253 // TODO(shanmuga.m): Construct a calc() expression if the units fall in |
| 254 // different categories. |
| 251 CSSPrimitiveValue::UnitType newUnit = CSSPrimitiveValue::UnitType::UserUnits; | 255 CSSPrimitiveValue::UnitType newUnit = CSSPrimitiveValue::UnitType::UserUnits; |
| 252 if (percentage < 0.5) { | 256 if (percentage < 0.5) { |
| 253 if (!fromLength->isCalculated()) | 257 if (!fromLength->isCalculated()) |
| 254 newUnit = fromLength->typeWithCalcResolved(); | 258 newUnit = fromLength->typeWithCalcResolved(); |
| 255 } else { | 259 } else { |
| 256 if (!toLength->isCalculated()) | 260 if (!toLength->isCalculated()) |
| 257 newUnit = toLength->typeWithCalcResolved(); | 261 newUnit = toLength->typeWithCalcResolved(); |
| 258 } | 262 } |
| 259 animatedNumber = lengthContext.convertValueFromUserUnits(animatedNumber, | 263 animatedNumber = lengthContext.convertValueFromUserUnits(animatedNumber, |
| 260 unitMode(), newUnit); | 264 unitMode(), newUnit); |
| 261 m_value = CSSPrimitiveValue::create(animatedNumber, newUnit); | 265 m_value = CSSPrimitiveValue::create(animatedNumber, newUnit); |
| 262 } | 266 } |
| 263 | 267 |
| 264 float SVGLength::calculateDistance(SVGPropertyBase* toValue, | 268 float SVGLength::calculateDistance(SVGPropertyBase* toValue, |
| 265 SVGElement* contextElement) { | 269 SVGElement* contextElement) { |
| 266 SVGLengthContext lengthContext(contextElement); | 270 SVGLengthContext lengthContext(contextElement); |
| 267 SVGLength* toLength = toSVGLength(toValue); | 271 SVGLength* toLength = toSVGLength(toValue); |
| 268 | 272 |
| 269 return fabsf(toLength->value(lengthContext) - value(lengthContext)); | 273 return fabsf(toLength->value(lengthContext) - value(lengthContext)); |
| 270 } | 274 } |
| 271 | 275 |
| 272 } // namespace blink | 276 } // namespace blink |
| OLD | NEW |