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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 void SVGSMILElement::buildPendingResource() | 201 void SVGSMILElement::buildPendingResource() |
202 { | 202 { |
203 clearResourceReferences(); | 203 clearResourceReferences(); |
204 | 204 |
205 if (!inDocument()) { | 205 if (!inDocument()) { |
206 // Reset the target element if we are no longer in the document. | 206 // Reset the target element if we are no longer in the document. |
207 setTargetElement(0); | 207 setTargetElement(0); |
208 return; | 208 return; |
209 } | 209 } |
210 | 210 |
211 String id; | 211 AtomicString id; |
212 String href = getAttribute(XLinkNames::hrefAttr); | 212 AtomicString href = getAttribute(XLinkNames::hrefAttr); |
213 Element* target; | 213 Element* target; |
214 if (href.isEmpty()) | 214 if (href.isEmpty()) |
215 target = parentNode() && parentNode()->isElementNode() ? toElement(paren
tNode()) : 0; | 215 target = parentNode() && parentNode()->isElementNode() ? toElement(paren
tNode()) : 0; |
216 else | 216 else |
217 target = SVGURIReference::targetElementFromIRIString(href, document(), &
id); | 217 target = SVGURIReference::targetElementFromIRIString(href, document(), &
id); |
218 SVGElement* svgTarget = target && target->isSVGElement() ? toSVGElement(targ
et) : 0; | 218 SVGElement* svgTarget = target && target->isSVGElement() ? toSVGElement(targ
et) : 0; |
219 | 219 |
220 if (svgTarget && !svgTarget->inDocument()) | 220 if (svgTarget && !svgTarget->inDocument()) |
221 svgTarget = 0; | 221 svgTarget = 0; |
222 | 222 |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 beginListChanged(elapsed()); | 550 beginListChanged(elapsed()); |
551 else if (attrName == SVGNames::endAttr) | 551 else if (attrName == SVGNames::endAttr) |
552 endListChanged(elapsed()); | 552 endListChanged(elapsed()); |
553 } | 553 } |
554 | 554 |
555 animationAttributeChanged(); | 555 animationAttributeChanged(); |
556 } | 556 } |
557 | 557 |
558 inline Element* SVGSMILElement::eventBaseFor(const Condition& condition) | 558 inline Element* SVGSMILElement::eventBaseFor(const Condition& condition) |
559 { | 559 { |
560 return condition.m_baseID.isEmpty() ? targetElement() : treeScope().getEleme
ntById(condition.m_baseID); | 560 return condition.m_baseID.isEmpty() ? targetElement() : treeScope().getEleme
ntById(AtomicString(condition.m_baseID)); |
561 } | 561 } |
562 | 562 |
563 void SVGSMILElement::connectConditions() | 563 void SVGSMILElement::connectConditions() |
564 { | 564 { |
565 if (m_conditionsConnected) | 565 if (m_conditionsConnected) |
566 disconnectConditions(); | 566 disconnectConditions(); |
567 m_conditionsConnected = true; | 567 m_conditionsConnected = true; |
568 for (unsigned n = 0; n < m_conditions.size(); ++n) { | 568 for (unsigned n = 0; n < m_conditions.size(); ++n) { |
569 Condition& condition = m_conditions[n]; | 569 Condition& condition = m_conditions[n]; |
570 if (condition.m_type == Condition::EventBase) { | 570 if (condition.m_type == Condition::EventBase) { |
571 ASSERT(!condition.m_syncbase); | 571 ASSERT(!condition.m_syncbase); |
572 Element* eventBase = eventBaseFor(condition); | 572 Element* eventBase = eventBaseFor(condition); |
573 if (!eventBase) | 573 if (!eventBase) |
574 continue; | 574 continue; |
575 ASSERT(!condition.m_eventListener); | 575 ASSERT(!condition.m_eventListener); |
576 condition.m_eventListener = ConditionEventListener::create(this, &co
ndition); | 576 condition.m_eventListener = ConditionEventListener::create(this, &co
ndition); |
577 eventBase->addEventListener(condition.m_name, condition.m_eventListe
ner, false); | 577 eventBase->addEventListener(AtomicString(condition.m_name), conditio
n.m_eventListener, false); |
578 } else if (condition.m_type == Condition::Syncbase) { | 578 } else if (condition.m_type == Condition::Syncbase) { |
579 ASSERT(!condition.m_baseID.isEmpty()); | 579 ASSERT(!condition.m_baseID.isEmpty()); |
580 condition.m_syncbase = treeScope().getElementById(condition.m_baseID
); | 580 condition.m_syncbase = treeScope().getElementById(AtomicString(condi
tion.m_baseID)); |
581 if (!condition.m_syncbase || !isSVGSMILElement(*condition.m_syncbase
)) { | 581 if (!condition.m_syncbase || !isSVGSMILElement(*condition.m_syncbase
)) { |
582 condition.m_syncbase = 0; | 582 condition.m_syncbase = 0; |
583 continue; | 583 continue; |
584 } | 584 } |
585 toSVGSMILElement(condition.m_syncbase.get())->addTimeDependent(this)
; | 585 toSVGSMILElement(condition.m_syncbase.get())->addTimeDependent(this)
; |
586 } | 586 } |
587 } | 587 } |
588 } | 588 } |
589 | 589 |
590 void SVGSMILElement::disconnectConditions() | 590 void SVGSMILElement::disconnectConditions() |
591 { | 591 { |
592 if (!m_conditionsConnected) | 592 if (!m_conditionsConnected) |
593 return; | 593 return; |
594 m_conditionsConnected = false; | 594 m_conditionsConnected = false; |
595 for (unsigned n = 0; n < m_conditions.size(); ++n) { | 595 for (unsigned n = 0; n < m_conditions.size(); ++n) { |
596 Condition& condition = m_conditions[n]; | 596 Condition& condition = m_conditions[n]; |
597 if (condition.m_type == Condition::EventBase) { | 597 if (condition.m_type == Condition::EventBase) { |
598 ASSERT(!condition.m_syncbase); | 598 ASSERT(!condition.m_syncbase); |
599 if (!condition.m_eventListener) | 599 if (!condition.m_eventListener) |
600 continue; | 600 continue; |
601 // Note: It's a memory optimization to try to remove our condition | 601 // Note: It's a memory optimization to try to remove our condition |
602 // event listener, but it's not guaranteed to work, since we have | 602 // event listener, but it's not guaranteed to work, since we have |
603 // no guarantee that eventBaseFor() will be able to find our conditi
on's | 603 // no guarantee that eventBaseFor() will be able to find our conditi
on's |
604 // original eventBase. So, we also have to disconnect ourselves from | 604 // original eventBase. So, we also have to disconnect ourselves from |
605 // our condition event listener, in case it later fires. | 605 // our condition event listener, in case it later fires. |
606 Element* eventBase = eventBaseFor(condition); | 606 Element* eventBase = eventBaseFor(condition); |
607 if (eventBase) | 607 if (eventBase) |
608 eventBase->removeEventListener(condition.m_name, condition.m_eve
ntListener.get(), false); | 608 eventBase->removeEventListener(AtomicString(condition.m_name), c
ondition.m_eventListener.get(), false); |
609 condition.m_eventListener->disconnectAnimation(); | 609 condition.m_eventListener->disconnectAnimation(); |
610 condition.m_eventListener = 0; | 610 condition.m_eventListener = 0; |
611 } else if (condition.m_type == Condition::Syncbase) { | 611 } else if (condition.m_type == Condition::Syncbase) { |
612 if (condition.m_syncbase) | 612 if (condition.m_syncbase) |
613 toSVGSMILElement(condition.m_syncbase.get())->removeTimeDependen
t(this); | 613 toSVGSMILElement(condition.m_syncbase.get())->removeTimeDependen
t(this); |
614 } | 614 } |
615 condition.m_syncbase = 0; | 615 condition.m_syncbase = 0; |
616 } | 616 } |
617 } | 617 } |
618 | 618 |
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1274 if (eventType == "repeatn") { | 1274 if (eventType == "repeatn") { |
1275 unsigned repeatEventCount = m_repeatEventCountList.first(); | 1275 unsigned repeatEventCount = m_repeatEventCountList.first(); |
1276 m_repeatEventCountList.remove(0); | 1276 m_repeatEventCountList.remove(0); |
1277 dispatchEvent(RepeatEvent::create(eventType, repeatEventCount)); | 1277 dispatchEvent(RepeatEvent::create(eventType, repeatEventCount)); |
1278 } else { | 1278 } else { |
1279 dispatchEvent(Event::create(eventType)); | 1279 dispatchEvent(Event::create(eventType)); |
1280 } | 1280 } |
1281 } | 1281 } |
1282 | 1282 |
1283 } | 1283 } |
OLD | NEW |