static SMILEventSender& smilEndEventSender()
{
- DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("endEvent"));
+ DEFINE_STATIC_LOCAL(SMILEventSender, sender, (EventTypeNames::endEvent));
return sender;
}
static SMILEventSender& smilBeginEventSender()
{
- DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("beginEvent"));
+ DEFINE_STATIC_LOCAL(SMILEventSender, sender, (EventTypeNames::beginEvent));
return sender;
}
static SMILEventSender& smilRepeatEventSender()
{
- DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("repeatEvent"));
+ DEFINE_STATIC_LOCAL(SMILEventSender, sender, (EventTypeNames::repeatEvent));
return sender;
}
static SMILEventSender& smilRepeatNEventSender()
{
- DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("repeatn"));
+ DEFINE_STATIC_LOCAL(SMILEventSender, sender, (AtomicString("repeatn", AtomicString::ConstructFromLiteral)));
return sender;
}
Vector<SMILTimeWithOrigin>& timeList = beginOrEnd == Begin ? m_beginTimes : m_endTimes;
if (beginOrEnd == End)
m_hasEndEventConditions = false;
- HashSet<double> existing;
- for (unsigned n = 0; n < timeList.size(); ++n)
- existing.add(timeList[n].time().value());
+ HashSet<SMILTime> existing;
+ for (unsigned n = 0; n < timeList.size(); ++n) {
+ if (!timeList[n].time().isUnresolved())
+ existing.add(timeList[n].time().value());
+ }
Vector<String> splitString;
parseString.split(';', splitString);
for (unsigned n = 0; n < splitString.size(); ++n) {
computedRepeatCount = SMILTime::indefinite();
} else {
bool ok;
- double result = value.string().toDouble(&ok);
+ double result = value.toDouble(&ok);
if (ok && result > 0)
computedRepeatCount = result;
}
void SVGSMILElement::addBeginTime(SMILTime eventTime, SMILTime beginTime, SMILTimeWithOrigin::Origin origin)
{
- ASSERT(!std::isnan(beginTime.value()));
m_beginTimes.append(SMILTimeWithOrigin(beginTime, origin));
sortTimeList(m_beginTimes);
beginListChanged(eventTime);
void SVGSMILElement::addEndTime(SMILTime eventTime, SMILTime endTime, SMILTimeWithOrigin::Origin origin)
{
- ASSERT(!std::isnan(endTime.value()));
m_endTimes.append(SMILTimeWithOrigin(endTime, origin));
sortTimeList(m_endTimes);
endListChanged(eventTime);
SMILTime simpleDuration = this->simpleDuration();
if (!simpleDuration || (repeatDur.isUnresolved() && repeatCount.isUnresolved()))
return simpleDuration;
+ repeatDur = std::min(repeatDur, SMILTime::indefinite());
SMILTime repeatCountDuration = simpleDuration * repeatCount;
- return std::min(repeatCountDuration, std::min(repeatDur, SMILTime::indefinite()));
+ if (!repeatCountDuration.isUnresolved())
+ return std::min(repeatDur, repeatCountDuration);
+ return repeatDur;
}
SMILTime SVGSMILElement::resolveActiveEnd(SMILTime resolvedBegin, SMILTime resolvedEnd) const
if (!firstInterval.begin.isUnresolved() && firstInterval != m_interval) {
m_interval = firstInterval;
notifyDependentsIntervalChanged();
- m_nextProgressTime = std::min(m_nextProgressTime, m_interval.begin);
+ m_nextProgressTime = m_nextProgressTime.isUnresolved() ? m_interval.begin : std::min(m_nextProgressTime, m_interval.begin);
if (m_timeContainer)
m_timeContainer->notifyIntervalsChanged();
if (!nextInterval.begin.isUnresolved() && nextInterval.begin != m_interval.begin) {
m_interval = nextInterval;
notifyDependentsIntervalChanged();
- m_nextProgressTime = std::min(m_nextProgressTime, m_interval.begin);
+ m_nextProgressTime = m_nextProgressTime.isUnresolved() ? m_interval.begin : std::min(m_nextProgressTime, m_interval.begin);
return true;
}
time = syncBase->m_interval.end + condition->offset();
if (!time.isFinite())
continue;
+ SMILTime elapsed = this->elapsed();
+ if (elapsed.isUnresolved())
+ continue;
if (condition->beginOrEnd() == Begin)
- addBeginTime(elapsed(), time);
+ addBeginTime(elapsed, time);
else
- addEndTime(elapsed(), time);
+ addEndTime(elapsed, time);
}
}
}
return;
SMILTime elapsed = this->elapsed();
+ if (elapsed.isUnresolved())
+ return;
if (condition->beginOrEnd() == Begin)
addBeginTime(elapsed, elapsed + condition->offset());
else
void SVGSMILElement::beginByLinkActivation()
{
SMILTime elapsed = this->elapsed();
+ if (elapsed.isUnresolved())
+ return;
addBeginTime(elapsed, elapsed);
}