| 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 141 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 152     return length.release(); | 152     return length.release(); | 
| 153 } | 153 } | 
| 154 | 154 | 
| 155 bool SVGLength::operator==(const SVGLength& other) const | 155 bool SVGLength::operator==(const SVGLength& other) const | 
| 156 { | 156 { | 
| 157     return m_unitMode == other.m_unitMode | 157     return m_unitMode == other.m_unitMode | 
| 158         && m_unitType == other.m_unitType | 158         && m_unitType == other.m_unitType | 
| 159         && m_valueInSpecifiedUnits == other.m_valueInSpecifiedUnits; | 159         && m_valueInSpecifiedUnits == other.m_valueInSpecifiedUnits; | 
| 160 } | 160 } | 
| 161 | 161 | 
| 162 float SVGLength::value(const SVGLengthContext& context, ExceptionState& es) cons
     t | 162 float SVGLength::value(const SVGLengthContext& context) const | 
| 163 { | 163 { | 
| 164     return context.convertValueToUserUnits(m_valueInSpecifiedUnits, unitMode(), 
     unitType(), es); | 164     return context.convertValueToUserUnits(m_valueInSpecifiedUnits, unitMode(), 
     unitType()); | 
| 165 } | 165 } | 
| 166 | 166 | 
| 167 void SVGLength::setValue(float value, const SVGLengthContext& context, Exception
     State& es) | 167 void SVGLength::setValue(float value, const SVGLengthContext& context) | 
| 168 { | 168 { | 
| 169     // LengthTypePercentage is represented with 100% = 100.0. Good for accuracy 
     but could eventually be changed. | 169     // LengthTypePercentage is represented with 100% = 100.0. Good for accuracy 
     but could eventually be changed. | 
| 170     if (m_unitType == LengthTypePercentage) | 170     if (m_unitType == LengthTypePercentage) | 
| 171         value = value / 100; | 171         value = value / 100; | 
| 172 | 172 | 
| 173     float convertedValue = context.convertValueFromUserUnits(value, unitMode(), 
     unitType(), es); | 173     m_valueInSpecifiedUnits = context.convertValueFromUserUnits(value, unitMode(
     ), unitType()); | 
| 174     if (es.hadException()) |  | 
| 175         return; |  | 
| 176 |  | 
| 177     m_valueInSpecifiedUnits = convertedValue; |  | 
| 178 } | 174 } | 
| 179 | 175 | 
| 180 void SVGLength::setUnitType(SVGLengthType type) | 176 void SVGLength::setUnitType(SVGLengthType type) | 
| 181 { | 177 { | 
| 182     ASSERT(type != LengthTypeUnknown && type <= LengthTypePC); | 178     ASSERT(type != LengthTypeUnknown && type <= LengthTypePC); | 
| 183     m_unitType = type; | 179     m_unitType = type; | 
| 184 } | 180 } | 
| 185 | 181 | 
| 186 float SVGLength::valueAsPercentage() const | 182 float SVGLength::valueAsPercentage() const | 
| 187 { | 183 { | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 258 { | 254 { | 
| 259     return String::number(m_valueInSpecifiedUnits) + lengthTypeToString(unitType
     ()); | 255     return String::number(m_valueInSpecifiedUnits) + lengthTypeToString(unitType
     ()); | 
| 260 } | 256 } | 
| 261 | 257 | 
| 262 void SVGLength::newValueSpecifiedUnits(SVGLengthType type, float value) | 258 void SVGLength::newValueSpecifiedUnits(SVGLengthType type, float value) | 
| 263 { | 259 { | 
| 264     setUnitType(type); | 260     setUnitType(type); | 
| 265     m_valueInSpecifiedUnits = value; | 261     m_valueInSpecifiedUnits = value; | 
| 266 } | 262 } | 
| 267 | 263 | 
| 268 void SVGLength::convertToSpecifiedUnits(SVGLengthType type, const SVGLengthConte
     xt& context, ExceptionState& exceptionState) | 264 void SVGLength::convertToSpecifiedUnits(SVGLengthType type, const SVGLengthConte
     xt& context) | 
| 269 { | 265 { | 
| 270     ASSERT(type != LengthTypeUnknown && type <= LengthTypePC); | 266     ASSERT(type != LengthTypeUnknown && type <= LengthTypePC); | 
| 271 | 267 | 
| 272     float valueInUserUnits = value(context, exceptionState); | 268     float valueInUserUnits = value(context); | 
| 273     if (exceptionState.hadException()) |  | 
| 274         return; |  | 
| 275 |  | 
| 276     SVGLengthType originalType = unitType(); |  | 
| 277     m_unitType = type; | 269     m_unitType = type; | 
| 278     setValue(valueInUserUnits, context, exceptionState); | 270     setValue(valueInUserUnits, context); | 
| 279     if (!exceptionState.hadException()) |  | 
| 280         return; |  | 
| 281 |  | 
| 282     // Eventually restore old unit and type |  | 
| 283     m_unitType = originalType; |  | 
| 284 } | 271 } | 
| 285 | 272 | 
| 286 PassRefPtrWillBeRawPtr<SVGLength> SVGLength::fromCSSPrimitiveValue(CSSPrimitiveV
     alue* value) | 273 PassRefPtrWillBeRawPtr<SVGLength> SVGLength::fromCSSPrimitiveValue(CSSPrimitiveV
     alue* value) | 
| 287 { | 274 { | 
| 288     ASSERT(value); | 275     ASSERT(value); | 
| 289 | 276 | 
| 290     SVGLengthType svgType; | 277     SVGLengthType svgType; | 
| 291     switch (value->primitiveType()) { | 278     switch (value->primitiveType()) { | 
| 292     case CSSPrimitiveValue::CSS_NUMBER: | 279     case CSSPrimitiveValue::CSS_NUMBER: | 
| 293         svgType = LengthTypeNumber; | 280         svgType = LengthTypeNumber; | 
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 436         if (isZero()) | 423         if (isZero()) | 
| 437             length->newValueSpecifiedUnits(fromType, blink::blend(fromValue, toV
     alue, progress)); | 424             length->newValueSpecifiedUnits(fromType, blink::blend(fromValue, toV
     alue, progress)); | 
| 438         else | 425         else | 
| 439             length->newValueSpecifiedUnits(toType, blink::blend(fromValue, toVal
     ue, progress)); | 426             length->newValueSpecifiedUnits(toType, blink::blend(fromValue, toVal
     ue, progress)); | 
| 440         return length; | 427         return length; | 
| 441     } | 428     } | 
| 442 | 429 | 
| 443     ASSERT(!isRelative()); | 430     ASSERT(!isRelative()); | 
| 444     ASSERT(!from->isRelative()); | 431     ASSERT(!from->isRelative()); | 
| 445 | 432 | 
| 446     TrackExceptionState es; |  | 
| 447     SVGLengthContext nonRelativeLengthContext(0); | 433     SVGLengthContext nonRelativeLengthContext(0); | 
| 448     float fromValueInUserUnits = nonRelativeLengthContext.convertValueToUserUnit
     s(from->valueInSpecifiedUnits(), from->unitMode(), fromType, es); | 434     float fromValueInUserUnits = nonRelativeLengthContext.convertValueToUserUnit
     s(from->valueInSpecifiedUnits(), from->unitMode(), fromType); | 
| 449     if (es.hadException()) | 435     float fromValue = nonRelativeLengthContext.convertValueFromUserUnits(fromVal
     ueInUserUnits, unitMode(), toType); | 
| 450         return create(); |  | 
| 451 |  | 
| 452     float fromValue = nonRelativeLengthContext.convertValueFromUserUnits(fromVal
     ueInUserUnits, unitMode(), toType, es); |  | 
| 453     if (es.hadException()) |  | 
| 454         return create(); |  | 
| 455 | 436 | 
| 456     float toValue = valueInSpecifiedUnits(); | 437     float toValue = valueInSpecifiedUnits(); | 
| 457     length->newValueSpecifiedUnits(toType, blink::blend(fromValue, toValue, prog
     ress)); | 438     length->newValueSpecifiedUnits(toType, blink::blend(fromValue, toValue, prog
     ress)); | 
| 458     return length; | 439     return length; | 
| 459 } | 440 } | 
| 460 | 441 | 
| 461 void SVGLength::add(PassRefPtrWillBeRawPtr<SVGPropertyBase> other, SVGElement* c
     ontextElement) | 442 void SVGLength::add(PassRefPtrWillBeRawPtr<SVGPropertyBase> other, SVGElement* c
     ontextElement) | 
| 462 { | 443 { | 
| 463     SVGLengthContext lengthContext(contextElement); | 444     SVGLengthContext lengthContext(contextElement); | 
| 464 | 445     setValue(value(lengthContext) + toSVGLength(other)->value(lengthContext), le
     ngthContext); | 
| 465     setValue(value(lengthContext) + toSVGLength(other)->value(lengthContext), le
     ngthContext, ASSERT_NO_EXCEPTION); |  | 
| 466 } | 446 } | 
| 467 | 447 | 
| 468 void SVGLength::calculateAnimatedValue(SVGAnimationElement* animationElement, fl
     oat percentage, unsigned repeatCount, PassRefPtrWillBeRawPtr<SVGPropertyBase> fr
     omValue, PassRefPtrWillBeRawPtr<SVGPropertyBase> toValue, PassRefPtrWillBeRawPtr
     <SVGPropertyBase> toAtEndOfDurationValue, SVGElement* contextElement) | 448 void SVGLength::calculateAnimatedValue(SVGAnimationElement* animationElement, fl
     oat percentage, unsigned repeatCount, PassRefPtrWillBeRawPtr<SVGPropertyBase> fr
     omValue, PassRefPtrWillBeRawPtr<SVGPropertyBase> toValue, PassRefPtrWillBeRawPtr
     <SVGPropertyBase> toAtEndOfDurationValue, SVGElement* contextElement) | 
| 469 { | 449 { | 
| 470     RefPtrWillBeRawPtr<SVGLength> fromLength = toSVGLength(fromValue); | 450     RefPtrWillBeRawPtr<SVGLength> fromLength = toSVGLength(fromValue); | 
| 471     RefPtrWillBeRawPtr<SVGLength> toLength = toSVGLength(toValue); | 451     RefPtrWillBeRawPtr<SVGLength> toLength = toSVGLength(toValue); | 
| 472     RefPtrWillBeRawPtr<SVGLength> toAtEndOfDurationLength = toSVGLength(toAtEndO
     fDurationValue); | 452     RefPtrWillBeRawPtr<SVGLength> toAtEndOfDurationLength = toSVGLength(toAtEndO
     fDurationValue); | 
| 473 | 453 | 
| 474     SVGLengthContext lengthContext(contextElement); | 454     SVGLengthContext lengthContext(contextElement); | 
| 475     float animatedNumber = value(lengthContext, IGNORE_EXCEPTION); | 455     float animatedNumber = value(lengthContext); | 
| 476     animationElement->animateAdditiveNumber(percentage, repeatCount, fromLength-
     >value(lengthContext, IGNORE_EXCEPTION), toLength->value(lengthContext, IGNORE_E
     XCEPTION), toAtEndOfDurationLength->value(lengthContext, IGNORE_EXCEPTION), anim
     atedNumber); | 456     animationElement->animateAdditiveNumber(percentage, repeatCount, fromLength-
     >value(lengthContext), toLength->value(lengthContext), toAtEndOfDurationLength->
     value(lengthContext), animatedNumber); | 
| 477 | 457 | 
| 478     ASSERT(unitMode() == lengthModeForAnimatedLengthAttribute(animationElement->
     attributeName())); | 458     ASSERT(unitMode() == lengthModeForAnimatedLengthAttribute(animationElement->
     attributeName())); | 
| 479     m_unitType = percentage < 0.5 ? fromLength->unitType() : toLength->unitType(
     ); | 459     m_unitType = percentage < 0.5 ? fromLength->unitType() : toLength->unitType(
     ); | 
| 480     setValue(animatedNumber, lengthContext, ASSERT_NO_EXCEPTION); | 460     setValue(animatedNumber, lengthContext); | 
| 481 } | 461 } | 
| 482 | 462 | 
| 483 float SVGLength::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> toVal
     ue, SVGElement* contextElement) | 463 float SVGLength::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> toVal
     ue, SVGElement* contextElement) | 
| 484 { | 464 { | 
| 485     SVGLengthContext lengthContext(contextElement); | 465     SVGLengthContext lengthContext(contextElement); | 
| 486     RefPtrWillBeRawPtr<SVGLength> toLength = toSVGLength(toValue); | 466     RefPtrWillBeRawPtr<SVGLength> toLength = toSVGLength(toValue); | 
| 487 | 467 | 
| 488     return fabsf(toLength->value(lengthContext, IGNORE_EXCEPTION) - value(length
     Context, IGNORE_EXCEPTION)); | 468     return fabsf(toLength->value(lengthContext) - value(lengthContext)); | 
| 489 } | 469 } | 
| 490 | 470 | 
| 491 } | 471 } | 
| OLD | NEW | 
|---|