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 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 for (unsigned n = 0; n < splitString.size(); ++n) { | 500 for (unsigned n = 0; n < splitString.size(); ++n) { |
501 SMILTime value = parseClockValue(splitString[n]); | 501 SMILTime value = parseClockValue(splitString[n]); |
502 if (value.isUnresolved()) | 502 if (value.isUnresolved()) |
503 parseCondition(splitString[n], beginOrEnd); | 503 parseCondition(splitString[n], beginOrEnd); |
504 else if (!existing.contains(value.value())) | 504 else if (!existing.contains(value.value())) |
505 timeList.append(SMILTimeWithOrigin(value, SMILTimeWithOrigin::Parser
Origin)); | 505 timeList.append(SMILTimeWithOrigin(value, SMILTimeWithOrigin::Parser
Origin)); |
506 } | 506 } |
507 sortTimeList(timeList); | 507 sortTimeList(timeList); |
508 } | 508 } |
509 | 509 |
510 bool SVGSMILElement::isSupportedAttribute(const QualifiedName& attrName) | |
511 { | |
512 DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ()); | |
513 if (supportedAttributes.isEmpty()) { | |
514 SVGTests::addSupportedAttributes(supportedAttributes); | |
515 supportedAttributes.add(SVGNames::beginAttr); | |
516 supportedAttributes.add(SVGNames::endAttr); | |
517 supportedAttributes.add(SVGNames::durAttr); | |
518 supportedAttributes.add(SVGNames::repeatDurAttr); | |
519 supportedAttributes.add(SVGNames::repeatCountAttr); | |
520 supportedAttributes.add(SVGNames::minAttr); | |
521 supportedAttributes.add(SVGNames::maxAttr); | |
522 supportedAttributes.add(SVGNames::attributeNameAttr); | |
523 supportedAttributes.add(XLinkNames::hrefAttr); | |
524 } | |
525 return supportedAttributes.contains<SVGAttributeHashTranslator>(attrName); | |
526 } | |
527 | |
528 void SVGSMILElement::parseAttribute(const QualifiedName& name, const AtomicStrin
g& value) | 510 void SVGSMILElement::parseAttribute(const QualifiedName& name, const AtomicStrin
g& value) |
529 { | 511 { |
530 if (name == SVGNames::beginAttr) { | 512 if (name == SVGNames::beginAttr) { |
531 if (!m_conditions.isEmpty()) { | 513 if (!m_conditions.isEmpty()) { |
532 clearConditions(); | 514 clearConditions(); |
533 parseBeginOrEnd(fastGetAttribute(SVGNames::endAttr), End); | 515 parseBeginOrEnd(fastGetAttribute(SVGNames::endAttr), End); |
534 } | 516 } |
535 parseBeginOrEnd(value.string(), Begin); | 517 parseBeginOrEnd(value.string(), Begin); |
536 if (inDocument()) | 518 if (inDocument()) |
537 connectSyncBaseConditions(); | 519 connectSyncBaseConditions(); |
(...skipping 11 matching lines...) Expand all Loading... |
549 setAttributeEventListener(EventTypeNames::endEvent, createAttributeEvent
Listener(this, name, value, eventParameterName())); | 531 setAttributeEventListener(EventTypeNames::endEvent, createAttributeEvent
Listener(this, name, value, eventParameterName())); |
550 } else if (name == SVGNames::onrepeatAttr) { | 532 } else if (name == SVGNames::onrepeatAttr) { |
551 setAttributeEventListener(EventTypeNames::repeatEvent, createAttributeEv
entListener(this, name, value, eventParameterName())); | 533 setAttributeEventListener(EventTypeNames::repeatEvent, createAttributeEv
entListener(this, name, value, eventParameterName())); |
552 } else { | 534 } else { |
553 SVGElement::parseAttribute(name, value); | 535 SVGElement::parseAttribute(name, value); |
554 } | 536 } |
555 } | 537 } |
556 | 538 |
557 void SVGSMILElement::svgAttributeChanged(const QualifiedName& attrName) | 539 void SVGSMILElement::svgAttributeChanged(const QualifiedName& attrName) |
558 { | 540 { |
559 if (!isSupportedAttribute(attrName)) { | |
560 SVGElement::svgAttributeChanged(attrName); | |
561 return; | |
562 } | |
563 | |
564 if (attrName == SVGNames::durAttr) | 541 if (attrName == SVGNames::durAttr) |
565 m_cachedDur = invalidCachedTime; | 542 m_cachedDur = invalidCachedTime; |
566 else if (attrName == SVGNames::repeatDurAttr) | 543 else if (attrName == SVGNames::repeatDurAttr) |
567 m_cachedRepeatDur = invalidCachedTime; | 544 m_cachedRepeatDur = invalidCachedTime; |
568 else if (attrName == SVGNames::repeatCountAttr) | 545 else if (attrName == SVGNames::repeatCountAttr) |
569 m_cachedRepeatCount = invalidCachedTime; | 546 m_cachedRepeatCount = invalidCachedTime; |
570 else if (attrName == SVGNames::minAttr) | 547 else if (attrName == SVGNames::minAttr) |
571 m_cachedMin = invalidCachedTime; | 548 m_cachedMin = invalidCachedTime; |
572 else if (attrName == SVGNames::maxAttr) | 549 else if (attrName == SVGNames::maxAttr) |
573 m_cachedMax = invalidCachedTime; | 550 m_cachedMax = invalidCachedTime; |
574 else if (attrName == SVGNames::attributeNameAttr) | 551 else if (attrName == SVGNames::attributeNameAttr) |
575 setAttributeName(constructQualifiedName(this, fastGetAttribute(SVGNames:
:attributeNameAttr))); | 552 setAttributeName(constructQualifiedName(this, fastGetAttribute(SVGNames:
:attributeNameAttr))); |
576 else if (attrName.matches(XLinkNames::hrefAttr)) { | 553 else if (attrName.matches(XLinkNames::hrefAttr)) { |
577 SVGElement::InvalidationGuard invalidationGuard(this); | 554 SVGElement::InvalidationGuard invalidationGuard(this); |
578 buildPendingResource(); | 555 buildPendingResource(); |
579 if (m_targetElement) | 556 if (m_targetElement) |
580 clearAnimatedType(); | 557 clearAnimatedType(); |
581 } else if (inDocument()) { | 558 } else if (attrName == SVGNames::beginAttr || attrName == SVGNames::endAttr)
{ |
582 if (attrName == SVGNames::beginAttr) | 559 if (inDocument()) { |
583 beginListChanged(elapsed()); | 560 if (attrName == SVGNames::beginAttr) |
584 else if (attrName == SVGNames::endAttr) | 561 beginListChanged(elapsed()); |
585 endListChanged(elapsed()); | 562 else if (attrName == SVGNames::endAttr) |
| 563 endListChanged(elapsed()); |
| 564 } |
| 565 } else { |
| 566 SVGElement::svgAttributeChanged(attrName); |
| 567 return; |
586 } | 568 } |
587 | 569 |
588 animationAttributeChanged(); | 570 animationAttributeChanged(); |
589 } | 571 } |
590 | 572 |
591 inline SVGElement* SVGSMILElement::eventBaseFor(const Condition& condition) | 573 inline SVGElement* SVGSMILElement::eventBaseFor(const Condition& condition) |
592 { | 574 { |
593 Element* eventBase = condition.baseID().isEmpty() ? targetElement() : treeSc
ope().getElementById(AtomicString(condition.baseID())); | 575 Element* eventBase = condition.baseID().isEmpty() ? targetElement() : treeSc
ope().getElementById(AtomicString(condition.baseID())); |
594 if (eventBase && eventBase->isSVGElement()) | 576 if (eventBase && eventBase->isSVGElement()) |
595 return toSVGElement(eventBase); | 577 return toSVGElement(eventBase); |
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1371 visitor->trace(m_targetElement); | 1353 visitor->trace(m_targetElement); |
1372 visitor->trace(m_timeContainer); | 1354 visitor->trace(m_timeContainer); |
1373 visitor->trace(m_conditions); | 1355 visitor->trace(m_conditions); |
1374 visitor->trace(m_syncBaseDependents); | 1356 visitor->trace(m_syncBaseDependents); |
1375 #endif | 1357 #endif |
1376 SVGElement::trace(visitor); | 1358 SVGElement::trace(visitor); |
1377 SVGTests::trace(visitor); | 1359 SVGTests::trace(visitor); |
1378 } | 1360 } |
1379 | 1361 |
1380 } // namespace blink | 1362 } // namespace blink |
OLD | NEW |