OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005 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 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> |
5 * Copyright (C) 2008 Apple Inc. All rights reserved. | 5 * Copyright (C) 2008 Apple Inc. All rights reserved. |
6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> | 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> |
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 15 matching lines...) Expand all Loading... |
26 | 26 |
27 #include "bindings/core/v8/ExceptionState.h" | 27 #include "bindings/core/v8/ExceptionState.h" |
28 #include "core/CSSPropertyNames.h" | 28 #include "core/CSSPropertyNames.h" |
29 #include "core/SVGNames.h" | 29 #include "core/SVGNames.h" |
30 #include "core/css/CSSComputedStyleDeclaration.h" | 30 #include "core/css/CSSComputedStyleDeclaration.h" |
31 #include "core/css/parser/CSSParser.h" | 31 #include "core/css/parser/CSSParser.h" |
32 #include "core/frame/UseCounter.h" | 32 #include "core/frame/UseCounter.h" |
33 #include "core/svg/SVGAnimateElement.h" | 33 #include "core/svg/SVGAnimateElement.h" |
34 #include "core/svg/SVGElement.h" | 34 #include "core/svg/SVGElement.h" |
35 #include "core/svg/SVGParserUtilities.h" | 35 #include "core/svg/SVGParserUtilities.h" |
36 #include "platform/FloatConversion.h" | |
37 #include "wtf/MathExtras.h" | 36 #include "wtf/MathExtras.h" |
38 | 37 |
39 namespace blink { | 38 namespace blink { |
40 | 39 |
41 SVGAnimationElement::SVGAnimationElement(const QualifiedName& tagName, Document&
document) | 40 SVGAnimationElement::SVGAnimationElement(const QualifiedName& tagName, Document&
document) |
42 : SVGSMILElement(tagName, document) | 41 : SVGSMILElement(tagName, document) |
43 , m_fromPropertyValueType(RegularPropertyValue) | 42 , m_fromPropertyValueType(RegularPropertyValue) |
44 , m_toPropertyValueType(RegularPropertyValue) | 43 , m_toPropertyValueType(RegularPropertyValue) |
45 , m_animationValid(false) | 44 , m_animationValid(false) |
46 , m_attributeType(AttributeTypeAuto) | 45 , m_attributeType(AttributeTypeAuto) |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 setInactive(); | 236 setInactive(); |
238 } | 237 } |
239 | 238 |
240 float SVGAnimationElement::getStartTime(ExceptionState& exceptionState) const | 239 float SVGAnimationElement::getStartTime(ExceptionState& exceptionState) const |
241 { | 240 { |
242 SMILTime startTime = intervalBegin(); | 241 SMILTime startTime = intervalBegin(); |
243 if (!startTime.isFinite()) { | 242 if (!startTime.isFinite()) { |
244 exceptionState.throwDOMException(InvalidStateError, "No current interval
."); | 243 exceptionState.throwDOMException(InvalidStateError, "No current interval
."); |
245 return 0; | 244 return 0; |
246 } | 245 } |
247 return narrowPrecisionToFloat(startTime.value()); | 246 return clampTo<float>(startTime.value()); |
248 } | 247 } |
249 | 248 |
250 float SVGAnimationElement::getCurrentTime() const | 249 float SVGAnimationElement::getCurrentTime() const |
251 { | 250 { |
252 return narrowPrecisionToFloat(elapsed().value()); | 251 return clampTo<float>(elapsed().value()); |
253 } | 252 } |
254 | 253 |
255 float SVGAnimationElement::getSimpleDuration(ExceptionState& exceptionState) con
st | 254 float SVGAnimationElement::getSimpleDuration(ExceptionState& exceptionState) con
st |
256 { | 255 { |
257 SMILTime duration = simpleDuration(); | 256 SMILTime duration = simpleDuration(); |
258 if (!duration.isFinite()) { | 257 if (!duration.isFinite()) { |
259 exceptionState.throwDOMException(NotSupportedError, "No simple duration
defined."); | 258 exceptionState.throwDOMException(NotSupportedError, "No simple duration
defined."); |
260 return 0; | 259 return 0; |
261 } | 260 } |
262 return narrowPrecisionToFloat(duration.value()); | 261 return clampTo<float>(duration.value()); |
263 } | 262 } |
264 | 263 |
265 void SVGAnimationElement::beginElement() | 264 void SVGAnimationElement::beginElement() |
266 { | 265 { |
267 beginElementAt(0); | 266 beginElementAt(0); |
268 } | 267 } |
269 | 268 |
270 void SVGAnimationElement::beginElementAt(float offset) | 269 void SVGAnimationElement::beginElementAt(float offset) |
271 { | 270 { |
272 ASSERT(std::isfinite(offset)); | 271 ASSERT(std::isfinite(offset)); |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 } | 451 } |
453 | 452 |
454 float SVGAnimationElement::calculatePercentForSpline(float percent, unsigned spl
ineIndex) const | 453 float SVGAnimationElement::calculatePercentForSpline(float percent, unsigned spl
ineIndex) const |
455 { | 454 { |
456 ASSERT(getCalcMode() == CalcModeSpline); | 455 ASSERT(getCalcMode() == CalcModeSpline); |
457 ASSERT_WITH_SECURITY_IMPLICATION(splineIndex < m_keySplines.size()); | 456 ASSERT_WITH_SECURITY_IMPLICATION(splineIndex < m_keySplines.size()); |
458 gfx::CubicBezier bezier = m_keySplines[splineIndex]; | 457 gfx::CubicBezier bezier = m_keySplines[splineIndex]; |
459 SMILTime duration = simpleDuration(); | 458 SMILTime duration = simpleDuration(); |
460 if (!duration.isFinite()) | 459 if (!duration.isFinite()) |
461 duration = 100.0; | 460 duration = 100.0; |
462 return narrowPrecisionToFloat(bezier.SolveWithEpsilon(percent, solveEpsilon(
duration.value()))); | 461 return clampTo<float>(bezier.SolveWithEpsilon(percent, solveEpsilon(duration
.value()))); |
463 } | 462 } |
464 | 463 |
465 float SVGAnimationElement::calculatePercentFromKeyPoints(float percent) const | 464 float SVGAnimationElement::calculatePercentFromKeyPoints(float percent) const |
466 { | 465 { |
467 ASSERT(!m_keyPoints.isEmpty()); | 466 ASSERT(!m_keyPoints.isEmpty()); |
468 ASSERT(getCalcMode() != CalcModePaced); | 467 ASSERT(getCalcMode() != CalcModePaced); |
469 ASSERT(m_keyTimes.size() > 1); | 468 ASSERT(m_keyTimes.size() > 1); |
470 ASSERT(m_keyPoints.size() == m_keyTimes.size()); | 469 ASSERT(m_keyPoints.size() == m_keyTimes.size()); |
471 | 470 |
472 if (percent == 1) | 471 if (percent == 1) |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 if (!hasInvalidCSSAttributeType) | 738 if (!hasInvalidCSSAttributeType) |
740 schedule(); | 739 schedule(); |
741 } | 740 } |
742 | 741 |
743 // Clear values that may depend on the previous target. | 742 // Clear values that may depend on the previous target. |
744 if (targetElement()) | 743 if (targetElement()) |
745 clearAnimatedType(); | 744 clearAnimatedType(); |
746 } | 745 } |
747 | 746 |
748 } // namespace blink | 747 } // namespace blink |
OLD | NEW |