Index: Source/core/svg/animation/SVGSMILElement.cpp |
diff --git a/Source/core/svg/animation/SVGSMILElement.cpp b/Source/core/svg/animation/SVGSMILElement.cpp |
index da5e5a89d2b23a7ed39057af17675e2da0d85770..b72117b966a7d7787624fdc5d74c5aedb67c8391 100644 |
--- a/Source/core/svg/animation/SVGSMILElement.cpp |
+++ b/Source/core/svg/animation/SVGSMILElement.cpp |
@@ -895,8 +895,9 @@ SMILTime SVGSMILElement::resolveActiveEnd(SMILTime resolvedBegin, SMILTime resol |
return resolvedBegin + min(maxValue, max(minValue, preliminaryActiveDuration)); |
} |
-void SVGSMILElement::resolveInterval(bool first, SMILTime& beginResult, SMILTime& endResult) const |
+SMILInterval SVGSMILElement::resolveInterval(ResolveInterval resolveIntervalType) const |
{ |
+ bool first = resolveIntervalType == FirstInterval; |
// See the pseudocode in http://www.w3.org/TR/SMIL3/smil-timing.html#q90. |
SMILTime beginAfter = first ? -numeric_limits<double>::infinity() : m_interval.end; |
SMILTime lastIntervalTempEnd = numeric_limits<double>::infinity(); |
@@ -918,28 +919,22 @@ void SVGSMILElement::resolveInterval(bool first, SMILTime& beginResult, SMILTime |
} |
tempEnd = resolveActiveEnd(tempBegin, tempEnd); |
} |
- if (!first || (tempEnd > 0 || (!tempBegin.value() && !tempEnd.value()))) { |
- beginResult = tempBegin; |
- endResult = tempEnd; |
- return; |
- } |
+ if (!first || (tempEnd > 0 || (!tempBegin.value() && !tempEnd.value()))) |
+ return SMILInterval(tempBegin, tempEnd); |
beginAfter = tempEnd; |
lastIntervalTempEnd = tempEnd; |
} |
- beginResult = SMILTime::unresolved(); |
- endResult = SMILTime::unresolved(); |
+ return SMILInterval(SMILTime::unresolved(), SMILTime::unresolved()); |
} |
void SVGSMILElement::resolveFirstInterval() |
{ |
- SMILInterval firstInterval; |
- resolveInterval(true, firstInterval.begin, firstInterval.end); |
+ SMILInterval firstInterval = resolveInterval(FirstInterval); |
ASSERT(!firstInterval.begin.isIndefinite()); |
- if (!firstInterval.begin.isUnresolved() && firstInterval != SMILInterval(m_interval.begin, m_interval.end)) { |
- m_interval.begin = firstInterval.begin; |
- m_interval.end = firstInterval.end; |
+ if (!firstInterval.begin.isUnresolved() && firstInterval != m_interval) { |
+ m_interval = firstInterval; |
notifyDependentsIntervalChanged(); |
m_nextProgressTime = min(m_nextProgressTime, m_interval.begin); |
@@ -950,14 +945,11 @@ void SVGSMILElement::resolveFirstInterval() |
bool SVGSMILElement::resolveNextInterval() |
{ |
- SMILTime begin; |
- SMILTime end; |
- resolveInterval(false, begin, end); |
- ASSERT(!begin.isIndefinite()); |
+ SMILInterval nextInterval = resolveInterval(NextInterval); |
+ ASSERT(!nextInterval.begin.isIndefinite()); |
- if (!begin.isUnresolved() && begin != m_interval.begin) { |
- m_interval.begin = begin; |
- m_interval.end = end; |
+ if (!nextInterval.begin.isUnresolved() && nextInterval.begin != m_interval.begin) { |
+ m_interval = nextInterval; |
notifyDependentsIntervalChanged(); |
m_nextProgressTime = min(m_nextProgressTime, m_interval.begin); |
return true; |
@@ -981,7 +973,7 @@ void SVGSMILElement::beginListChanged(SMILTime eventTime) |
// Begin time changed, re-resolve the interval. |
SMILTime oldBegin = m_interval.begin; |
m_interval.end = eventTime; |
- resolveInterval(false, m_interval.begin, m_interval.end); |
+ m_interval = resolveInterval(NextInterval); |
ASSERT(!m_interval.begin.isUnresolved()); |
if (m_interval.begin != oldBegin) { |
if (m_activeState == Active && m_interval.begin > eventTime) { |