Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 50 DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("endEvent")); | 50 DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("endEvent")); |
| 51 return sender; | 51 return sender; |
| 52 } | 52 } |
| 53 | 53 |
| 54 static SMILEventSender& smilBeginEventSender() | 54 static SMILEventSender& smilBeginEventSender() |
| 55 { | 55 { |
| 56 DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("beginEvent")); | 56 DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("beginEvent")); |
| 57 return sender; | 57 return sender; |
| 58 } | 58 } |
| 59 | 59 |
| 60 static SMILEventSender& smilRepeatEventSender() | |
| 61 { | |
| 62 DEFINE_STATIC_LOCAL(SMILEventSender, sender, ("repeatEvent")); | |
| 63 return sender; | |
| 64 } | |
| 65 | |
| 60 // This is used for duration type time values that can't be negative. | 66 // This is used for duration type time values that can't be negative. |
| 61 static const double invalidCachedTime = -1.; | 67 static const double invalidCachedTime = -1.; |
| 62 | 68 |
| 63 class ConditionEventListener : public EventListener { | 69 class ConditionEventListener : public EventListener { |
| 64 public: | 70 public: |
| 65 static PassRefPtr<ConditionEventListener> create(SVGSMILElement* animation, SVGSMILElement::Condition* condition) | 71 static PassRefPtr<ConditionEventListener> create(SVGSMILElement* animation, SVGSMILElement::Condition* condition) |
| 66 { | 72 { |
| 67 return adoptRef(new ConditionEventListener(animation, condition)); | 73 return adoptRef(new ConditionEventListener(animation, condition)); |
| 68 } | 74 } |
| 69 | 75 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 , m_cachedMax(invalidCachedTime) | 147 , m_cachedMax(invalidCachedTime) |
| 142 { | 148 { |
| 143 resolveFirstInterval(); | 149 resolveFirstInterval(); |
| 144 } | 150 } |
| 145 | 151 |
| 146 SVGSMILElement::~SVGSMILElement() | 152 SVGSMILElement::~SVGSMILElement() |
| 147 { | 153 { |
| 148 clearResourceReferences(); | 154 clearResourceReferences(); |
| 149 smilEndEventSender().cancelEvent(this); | 155 smilEndEventSender().cancelEvent(this); |
| 150 smilBeginEventSender().cancelEvent(this); | 156 smilBeginEventSender().cancelEvent(this); |
| 157 smilRepeatEventSender().cancelEvent(this); | |
| 151 disconnectConditions(); | 158 disconnectConditions(); |
| 152 if (m_timeContainer && m_targetElement && hasValidAttributeName()) | 159 if (m_timeContainer && m_targetElement && hasValidAttributeName()) |
| 153 m_timeContainer->unschedule(this, m_targetElement, m_attributeName); | 160 m_timeContainer->unschedule(this, m_targetElement, m_attributeName); |
| 154 } | 161 } |
| 155 | 162 |
| 156 void SVGSMILElement::clearResourceReferences() | 163 void SVGSMILElement::clearResourceReferences() |
| 157 { | 164 { |
| 158 document().accessSVGExtensions()->removeAllTargetReferencesForElement(this); | 165 document().accessSVGExtensions()->removeAllTargetReferencesForElement(this); |
| 159 } | 166 } |
| 160 | 167 |
| (...skipping 949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1110 // Only reset the animated type to the base value once for the lowest priori ty animation that animates and contributes to a particular element/attribute pai r. | 1117 // Only reset the animated type to the base value once for the lowest priori ty animation that animates and contributes to a particular element/attribute pai r. |
| 1111 if (this == resultElement && animationIsContributing) | 1118 if (this == resultElement && animationIsContributing) |
| 1112 resetAnimatedType(); | 1119 resetAnimatedType(); |
| 1113 | 1120 |
| 1114 if (animationIsContributing) { | 1121 if (animationIsContributing) { |
| 1115 if (oldActiveState == Inactive) { | 1122 if (oldActiveState == Inactive) { |
| 1116 smilBeginEventSender().dispatchEventSoon(this); | 1123 smilBeginEventSender().dispatchEventSoon(this); |
| 1117 startedActiveInterval(); | 1124 startedActiveInterval(); |
| 1118 } | 1125 } |
| 1119 | 1126 |
| 1127 if (repeat && repeat != m_lastRepeat) | |
| 1128 smilRepeatEventSender().dispatchEventSoon(this); | |
| 1129 | |
| 1120 updateAnimation(percent, repeat, resultElement); | 1130 updateAnimation(percent, repeat, resultElement); |
| 1121 m_lastPercent = percent; | 1131 m_lastPercent = percent; |
| 1122 m_lastRepeat = repeat; | 1132 m_lastRepeat = repeat; |
| 1123 } | 1133 } |
| 1124 | 1134 |
| 1125 if (oldActiveState == Active && m_activeState != Active) { | 1135 if (oldActiveState == Active && m_activeState != Active) { |
| 1126 smilEndEventSender().dispatchEventSoon(this); | 1136 smilEndEventSender().dispatchEventSoon(this); |
| 1127 endedActiveInterval(); | 1137 endedActiveInterval(); |
| 1128 if (m_activeState != Frozen && this == resultElement) | 1138 if (m_activeState != Frozen && this == resultElement) |
| 1129 clearAnimatedType(m_targetElement); | 1139 clearAnimatedType(m_targetElement); |
| 1130 } | 1140 } |
| 1131 | 1141 |
| 1132 // Triggering all the pending events if the animation timeline is changed. | 1142 // Triggering all the pending events if the animation timeline is changed. |
| 1133 if (seekToTime) { | 1143 if (seekToTime) { |
| 1134 if (m_activeState == Inactive) | 1144 if (m_activeState == Inactive) |
| 1135 smilBeginEventSender().dispatchEventSoon(this); | 1145 smilBeginEventSender().dispatchEventSoon(this); |
| 1146 | |
| 1147 if (repeat) { | |
| 1148 for (int repeatEventCount = 1; repeatEventCount < repeat; repeatEven tCount++) { | |
|
pdr.
2013/08/31 04:48:29
Looks like this is failing to compile on windows.
| |
| 1149 smilRepeatEventSender().dispatchEventSoon(this); | |
| 1150 } | |
| 1151 if (m_activeState == Inactive) | |
| 1152 smilRepeatEventSender().dispatchEventSoon(this); | |
| 1153 } | |
| 1154 | |
| 1136 if (m_activeState == Inactive || m_activeState == Frozen) | 1155 if (m_activeState == Inactive || m_activeState == Frozen) |
| 1137 smilEndEventSender().dispatchEventSoon(this); | 1156 smilEndEventSender().dispatchEventSoon(this); |
| 1138 } | 1157 } |
| 1139 | 1158 |
| 1140 m_nextProgressTime = calculateNextProgressTime(elapsed); | 1159 m_nextProgressTime = calculateNextProgressTime(elapsed); |
| 1141 return animationIsContributing; | 1160 return animationIsContributing; |
| 1142 } | 1161 } |
| 1143 | 1162 |
| 1144 void SVGSMILElement::notifyDependentsIntervalChanged(NewOrExistingInterval newOr Existing) | 1163 void SVGSMILElement::notifyDependentsIntervalChanged(NewOrExistingInterval newOr Existing) |
| 1145 { | 1164 { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1208 } | 1227 } |
| 1209 | 1228 |
| 1210 void SVGSMILElement::endedActiveInterval() | 1229 void SVGSMILElement::endedActiveInterval() |
| 1211 { | 1230 { |
| 1212 clearTimesWithDynamicOrigins(m_beginTimes); | 1231 clearTimesWithDynamicOrigins(m_beginTimes); |
| 1213 clearTimesWithDynamicOrigins(m_endTimes); | 1232 clearTimesWithDynamicOrigins(m_endTimes); |
| 1214 } | 1233 } |
| 1215 | 1234 |
| 1216 void SVGSMILElement::dispatchPendingEvent(SMILEventSender* eventSender) | 1235 void SVGSMILElement::dispatchPendingEvent(SMILEventSender* eventSender) |
| 1217 { | 1236 { |
| 1218 ASSERT(eventSender == &smilEndEventSender() || eventSender == &smilBeginEven tSender()); | 1237 ASSERT(eventSender == &smilEndEventSender() || eventSender == &smilBeginEven tSender() || eventSender == &smilRepeatEventSender()); |
| 1219 const AtomicString& eventType = eventSender->eventType(); | 1238 const AtomicString& eventType = eventSender->eventType(); |
| 1220 dispatchEvent(Event::create(eventType)); | 1239 dispatchEvent(Event::create(eventType)); |
| 1221 } | 1240 } |
| 1222 | 1241 |
| 1223 } | 1242 } |
| OLD | NEW |