<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[174050] trunk/Source/WebCore</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/174050">174050</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2014-09-28 19:13:41 -0700 (Sun, 28 Sep 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Automatically generate template specializations for most Elements
https://bugs.webkit.org/show_bug.cgi?id=137174
Reviewed by Darin Adler.
Previously, the template specializations to make is<>() / downcast<>()
work for HTML/SVG/MathML elements were only generated if
"generateTypeHelpers" parameter was explicitly specified for the
corresponding tag name in the *Tags.in file.
We are however able to generate the template specializations for most
types so this patch drops the "generateTypeHelpers" parameter and
generates those template specializations by default.
One case we cannot generate the specialization ifor is when a class is
associated to several tag names but this patch updates the
make_names.pl script to detect this and skip those classes.
No new tests, no behavior change.
* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* dom/make_names.pl:
(defaultTagPropertyHash):
(printTypeHelpers):
* html/HTMLTagNames.in:
* mathml/mathtags.in:
* svg/SVGAllInOne.cpp:
* svg/SVGAnimateColorElement.cpp:
(WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
(WebCore::SVGAnimateColorElement::determinePropertyValueTypes):
* svg/SVGAnimateColorElement.h:
* svg/SVGAnimateElement.cpp:
(WebCore::SVGAnimateElement::SVGAnimateElement):
(WebCore::SVGAnimateElement::~SVGAnimateElement): Deleted.
(WebCore::SVGAnimateElement::hasValidAttributeType): Deleted.
(WebCore::SVGAnimateElement::determineAnimatedPropertyType): Deleted.
(WebCore::SVGAnimateElement::calculateAnimatedValue): Deleted.
(WebCore::SVGAnimateElement::calculateToAtEndOfDurationValue): Deleted.
(WebCore::SVGAnimateElement::calculateFromAndToValues): Deleted.
(WebCore::SVGAnimateElement::calculateFromAndByValues): Deleted.
(WebCore::propertyTypesAreConsistent): Deleted.
(WebCore::SVGAnimateElement::resetAnimatedType): Deleted.
(WebCore::applyCSSPropertyToTarget): Deleted.
(WebCore::removeCSSPropertyFromTarget): Deleted.
(WebCore::applyCSSPropertyToTargetAndInstances): Deleted.
(WebCore::removeCSSPropertyFromTargetAndInstances): Deleted.
(WebCore::notifyTargetAboutAnimValChange): Deleted.
(WebCore::notifyTargetAndInstancesAboutAnimValChange): Deleted.
(WebCore::SVGAnimateElement::clearAnimatedType): Deleted.
(WebCore::SVGAnimateElement::applyResultsToTarget): Deleted.
(WebCore::SVGAnimateElement::animatedPropertyTypeSupportsAddition): Deleted.
(WebCore::SVGAnimateElement::isAdditive): Deleted.
(WebCore::SVGAnimateElement::calculateDistance): Deleted.
(WebCore::SVGAnimateElement::setTargetElement): Deleted.
(WebCore::SVGAnimateElement::setAttributeName): Deleted.
(WebCore::SVGAnimateElement::resetAnimatedPropertyType): Deleted.
(WebCore::SVGAnimateElement::ensureAnimator): Deleted.
* svg/SVGAnimateElement.h:
(WebCore::isSVGAnimateElement): Deleted.
* svg/SVGAnimateElementBase.cpp: Copied from Source/WebCore/svg/SVGAnimateElement.cpp.
(WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
(WebCore::SVGAnimateElementBase::~SVGAnimateElementBase):
(WebCore::SVGAnimateElementBase::hasValidAttributeType):
(WebCore::SVGAnimateElementBase::determineAnimatedPropertyType):
(WebCore::SVGAnimateElementBase::calculateAnimatedValue):
(WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
(WebCore::SVGAnimateElementBase::calculateFromAndToValues):
(WebCore::SVGAnimateElementBase::calculateFromAndByValues):
(WebCore::propertyTypesAreConsistent):
(WebCore::SVGAnimateElementBase::resetAnimatedType):
(WebCore::applyCSSPropertyToTarget):
(WebCore::removeCSSPropertyFromTarget):
(WebCore::applyCSSPropertyToTargetAndInstances):
(WebCore::removeCSSPropertyFromTargetAndInstances):
(WebCore::notifyTargetAboutAnimValChange):
(WebCore::notifyTargetAndInstancesAboutAnimValChange):
(WebCore::SVGAnimateElementBase::clearAnimatedType):
(WebCore::SVGAnimateElementBase::applyResultsToTarget):
(WebCore::SVGAnimateElementBase::animatedPropertyTypeSupportsAddition):
(WebCore::SVGAnimateElementBase::isAdditive):
(WebCore::SVGAnimateElementBase::calculateDistance):
(WebCore::SVGAnimateElementBase::setTargetElement):
(WebCore::SVGAnimateElementBase::setAttributeName):
(WebCore::SVGAnimateElementBase::resetAnimatedPropertyType):
(WebCore::SVGAnimateElementBase::ensureAnimator):
* svg/SVGAnimateElementBase.h: Copied from Source/WebCore/svg/SVGAnimateElement.h.
(WebCore::isSVGAnimateElementBase):
* svg/SVGAnimateTransformElement.cpp:
(WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
(WebCore::SVGAnimateTransformElement::parseAttribute):
* svg/SVGAnimateTransformElement.h:
* svg/SVGAnimatedAngle.cpp:
* svg/SVGAnimatedBoolean.cpp:
* svg/SVGAnimatedColor.cpp:
* svg/SVGAnimatedInteger.cpp:
* svg/SVGAnimatedIntegerOptionalInteger.cpp:
* svg/SVGAnimatedLength.cpp:
* svg/SVGAnimatedLengthList.cpp:
* svg/SVGAnimatedNumber.cpp:
* svg/SVGAnimatedNumberList.cpp:
* svg/SVGAnimatedNumberOptionalNumber.cpp:
* svg/SVGAnimatedPath.cpp:
* svg/SVGAnimatedPointList.cpp:
* svg/SVGAnimatedPreserveAspectRatio.cpp:
* svg/SVGAnimatedRect.cpp:
* svg/SVGAnimatedString.cpp:
* svg/SVGAnimationElement.cpp:
(WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
* svg/SVGSetElement.cpp:
(WebCore::SVGSetElement::SVGSetElement):
* svg/SVGSetElement.h:
* svg/svgtags.in:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredommake_namespl">trunk/Source/WebCore/dom/make_names.pl</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTagNamesin">trunk/Source/WebCore/html/HTMLTagNames.in</a></li>
<li><a href="#trunkSourceWebCoremathmlmathtagsin">trunk/Source/WebCore/mathml/mathtags.in</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAllInOnecpp">trunk/Source/WebCore/svg/SVGAllInOne.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateColorElementcpp">trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateColorElementh">trunk/Source/WebCore/svg/SVGAnimateColorElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementcpp">trunk/Source/WebCore/svg/SVGAnimateElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementh">trunk/Source/WebCore/svg/SVGAnimateElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateTransformElementcpp">trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateTransformElementh">trunk/Source/WebCore/svg/SVGAnimateTransformElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedAnglecpp">trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedBooleancpp">trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedColorcpp">trunk/Source/WebCore/svg/SVGAnimatedColor.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedIntegercpp">trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedIntegerOptionalIntegercpp">trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthcpp">trunk/Source/WebCore/svg/SVGAnimatedLength.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthListcpp">trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedNumbercpp">trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedNumberListcpp">trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedNumberOptionalNumbercpp">trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPathcpp">trunk/Source/WebCore/svg/SVGAnimatedPath.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPointListcpp">trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPreserveAspectRatiocpp">trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedRectcpp">trunk/Source/WebCore/svg/SVGAnimatedRect.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedStringcpp">trunk/Source/WebCore/svg/SVGAnimatedString.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimationElementcpp">trunk/Source/WebCore/svg/SVGAnimationElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSetElementcpp">trunk/Source/WebCore/svg/SVGSetElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSetElementh">trunk/Source/WebCore/svg/SVGSetElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgsvgtagsin">trunk/Source/WebCore/svg/svgtags.in</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBasecpp">trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateElementBaseh">trunk/Source/WebCore/svg/SVGAnimateElementBase.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -2521,6 +2521,7 @@
</span><span class="cx"> svg/SVGAltGlyphItemElement.cpp
</span><span class="cx"> svg/SVGAngle.cpp
</span><span class="cx"> svg/SVGAnimateColorElement.cpp
</span><ins>+ svg/SVGAnimateElementBase.cpp
</ins><span class="cx"> svg/SVGAnimateElement.cpp
</span><span class="cx"> svg/SVGAnimateMotionElement.cpp
</span><span class="cx"> svg/SVGAnimateTransformElement.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/ChangeLog        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -1,3 +1,119 @@
</span><ins>+2014-09-28 Christophe Dumez <cdumez@apple.com>
+
+ Automatically generate template specializations for most Elements
+ https://bugs.webkit.org/show_bug.cgi?id=137174
+
+ Reviewed by Darin Adler.
+
+ Previously, the template specializations to make is<>() / downcast<>()
+ work for HTML/SVG/MathML elements were only generated if
+ "generateTypeHelpers" parameter was explicitly specified for the
+ corresponding tag name in the *Tags.in file.
+
+ We are however able to generate the template specializations for most
+ types so this patch drops the "generateTypeHelpers" parameter and
+ generates those template specializations by default.
+
+ One case we cannot generate the specialization ifor is when a class is
+ associated to several tag names but this patch updates the
+ make_names.pl script to detect this and skip those classes.
+
+ No new tests, no behavior change.
+
+ * CMakeLists.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/make_names.pl:
+ (defaultTagPropertyHash):
+ (printTypeHelpers):
+ * html/HTMLTagNames.in:
+ * mathml/mathtags.in:
+ * svg/SVGAllInOne.cpp:
+ * svg/SVGAnimateColorElement.cpp:
+ (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
+ (WebCore::SVGAnimateColorElement::determinePropertyValueTypes):
+ * svg/SVGAnimateColorElement.h:
+ * svg/SVGAnimateElement.cpp:
+ (WebCore::SVGAnimateElement::SVGAnimateElement):
+ (WebCore::SVGAnimateElement::~SVGAnimateElement): Deleted.
+ (WebCore::SVGAnimateElement::hasValidAttributeType): Deleted.
+ (WebCore::SVGAnimateElement::determineAnimatedPropertyType): Deleted.
+ (WebCore::SVGAnimateElement::calculateAnimatedValue): Deleted.
+ (WebCore::SVGAnimateElement::calculateToAtEndOfDurationValue): Deleted.
+ (WebCore::SVGAnimateElement::calculateFromAndToValues): Deleted.
+ (WebCore::SVGAnimateElement::calculateFromAndByValues): Deleted.
+ (WebCore::propertyTypesAreConsistent): Deleted.
+ (WebCore::SVGAnimateElement::resetAnimatedType): Deleted.
+ (WebCore::applyCSSPropertyToTarget): Deleted.
+ (WebCore::removeCSSPropertyFromTarget): Deleted.
+ (WebCore::applyCSSPropertyToTargetAndInstances): Deleted.
+ (WebCore::removeCSSPropertyFromTargetAndInstances): Deleted.
+ (WebCore::notifyTargetAboutAnimValChange): Deleted.
+ (WebCore::notifyTargetAndInstancesAboutAnimValChange): Deleted.
+ (WebCore::SVGAnimateElement::clearAnimatedType): Deleted.
+ (WebCore::SVGAnimateElement::applyResultsToTarget): Deleted.
+ (WebCore::SVGAnimateElement::animatedPropertyTypeSupportsAddition): Deleted.
+ (WebCore::SVGAnimateElement::isAdditive): Deleted.
+ (WebCore::SVGAnimateElement::calculateDistance): Deleted.
+ (WebCore::SVGAnimateElement::setTargetElement): Deleted.
+ (WebCore::SVGAnimateElement::setAttributeName): Deleted.
+ (WebCore::SVGAnimateElement::resetAnimatedPropertyType): Deleted.
+ (WebCore::SVGAnimateElement::ensureAnimator): Deleted.
+ * svg/SVGAnimateElement.h:
+ (WebCore::isSVGAnimateElement): Deleted.
+ * svg/SVGAnimateElementBase.cpp: Copied from Source/WebCore/svg/SVGAnimateElement.cpp.
+ (WebCore::SVGAnimateElementBase::SVGAnimateElementBase):
+ (WebCore::SVGAnimateElementBase::~SVGAnimateElementBase):
+ (WebCore::SVGAnimateElementBase::hasValidAttributeType):
+ (WebCore::SVGAnimateElementBase::determineAnimatedPropertyType):
+ (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
+ (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):
+ (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
+ (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
+ (WebCore::propertyTypesAreConsistent):
+ (WebCore::SVGAnimateElementBase::resetAnimatedType):
+ (WebCore::applyCSSPropertyToTarget):
+ (WebCore::removeCSSPropertyFromTarget):
+ (WebCore::applyCSSPropertyToTargetAndInstances):
+ (WebCore::removeCSSPropertyFromTargetAndInstances):
+ (WebCore::notifyTargetAboutAnimValChange):
+ (WebCore::notifyTargetAndInstancesAboutAnimValChange):
+ (WebCore::SVGAnimateElementBase::clearAnimatedType):
+ (WebCore::SVGAnimateElementBase::applyResultsToTarget):
+ (WebCore::SVGAnimateElementBase::animatedPropertyTypeSupportsAddition):
+ (WebCore::SVGAnimateElementBase::isAdditive):
+ (WebCore::SVGAnimateElementBase::calculateDistance):
+ (WebCore::SVGAnimateElementBase::setTargetElement):
+ (WebCore::SVGAnimateElementBase::setAttributeName):
+ (WebCore::SVGAnimateElementBase::resetAnimatedPropertyType):
+ (WebCore::SVGAnimateElementBase::ensureAnimator):
+ * svg/SVGAnimateElementBase.h: Copied from Source/WebCore/svg/SVGAnimateElement.h.
+ (WebCore::isSVGAnimateElementBase):
+ * svg/SVGAnimateTransformElement.cpp:
+ (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
+ (WebCore::SVGAnimateTransformElement::parseAttribute):
+ * svg/SVGAnimateTransformElement.h:
+ * svg/SVGAnimatedAngle.cpp:
+ * svg/SVGAnimatedBoolean.cpp:
+ * svg/SVGAnimatedColor.cpp:
+ * svg/SVGAnimatedInteger.cpp:
+ * svg/SVGAnimatedIntegerOptionalInteger.cpp:
+ * svg/SVGAnimatedLength.cpp:
+ * svg/SVGAnimatedLengthList.cpp:
+ * svg/SVGAnimatedNumber.cpp:
+ * svg/SVGAnimatedNumberList.cpp:
+ * svg/SVGAnimatedNumberOptionalNumber.cpp:
+ * svg/SVGAnimatedPath.cpp:
+ * svg/SVGAnimatedPointList.cpp:
+ * svg/SVGAnimatedPreserveAspectRatio.cpp:
+ * svg/SVGAnimatedRect.cpp:
+ * svg/SVGAnimatedString.cpp:
+ * svg/SVGAnimationElement.cpp:
+ (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
+ * svg/SVGSetElement.cpp:
+ (WebCore::SVGSetElement::SVGSetElement):
+ * svg/SVGSetElement.h:
+ * svg/svgtags.in:
+
</ins><span class="cx"> 2014-09-28 Gyuyoung Kim <gyuyoung.kim@samsung.com>
</span><span class="cx">
</span><span class="cx"> Use std::unique_ptr for ContextMenuController
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -2476,6 +2476,8 @@
</span><span class="cx">                 82AB1776125C826700C5069D /* InspectorResourceAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 82AB1772125C826700C5069D /* InspectorResourceAgent.h */; };
</span><span class="cx">                 82E3D8DE122EA0D1003AE5BC /* CSSPropertySourceData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 82E3D8DC122EA0D1003AE5BC /* CSSPropertySourceData.cpp */; };
</span><span class="cx">                 82E3D8DF122EA0D1003AE5BC /* CSSPropertySourceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 82E3D8DD122EA0D1003AE5BC /* CSSPropertySourceData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 832B843319D8E55100B26055 /* SVGAnimateElementBase.h */; };
+                832B843619D8E57400B26055 /* SVGAnimateElementBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */; };
</ins><span class="cx">                 836FBCEA178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */; };
</span><span class="cx">                 836FBCEC178C117F00B21A15 /* SVGAnimatedProperty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836FBCEB178C117F00B21A15 /* SVGAnimatedProperty.cpp */; };
</span><span class="cx">                 83C1D425178D5AB400141E68 /* SVGPathSegArcAbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C1D413178D5AB400141E68 /* SVGPathSegArcAbs.h */; };
</span><span class="lines">@@ -9627,6 +9629,8 @@
</span><span class="cx">                 82AB1772125C826700C5069D /* InspectorResourceAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorResourceAgent.h; sourceTree = "<group>"; };
</span><span class="cx">                 82E3D8DC122EA0D1003AE5BC /* CSSPropertySourceData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSPropertySourceData.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 82E3D8DD122EA0D1003AE5BC /* CSSPropertySourceData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSPropertySourceData.h; sourceTree = "<group>"; };
</span><ins>+                832B843319D8E55100B26055 /* SVGAnimateElementBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimateElementBase.h; sourceTree = "<group>"; };
+                832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimateElementBase.cpp; sourceTree = "<group>"; };
</ins><span class="cx">                 836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedTypeAnimator.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 836FBCEB178C117F00B21A15 /* SVGAnimatedProperty.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedProperty.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 83C1D413178D5AB400141E68 /* SVGPathSegArcAbs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegArcAbs.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -19780,6 +19784,8 @@
</span><span class="cx">                                 439D334013A6911C00C20F4F /* SVGAnimatedType.h */,
</span><span class="cx">                                 836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */,
</span><span class="cx">                                 439D334113A6911C00C20F4F /* SVGAnimatedTypeAnimator.h */,
</span><ins>+                                832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */,
+                                832B843319D8E55100B26055 /* SVGAnimateElementBase.h */,
</ins><span class="cx">                                 B22277F90D00BF1F0071B782 /* SVGAnimateElement.cpp */,
</span><span class="cx">                                 B22277FA0D00BF1F0071B782 /* SVGAnimateElement.h */,
</span><span class="cx">                                 B22277FB0D00BF1F0071B782 /* SVGAnimateElement.idl */,
</span><span class="lines">@@ -23856,6 +23862,7 @@
</span><span class="cx">                                 93D3C1590F97A9D70053C013 /* DOMHTMLCanvasElement.h in Headers */,
</span><span class="cx">                                 93F9B6580BA0F35E00854064 /* DOMHTMLCanvasElementInternal.h in Headers */,
</span><span class="cx">                                 85DF2F8E0AA3C88100AD64C5 /* DOMHTMLCollection.h in Headers */,
</span><ins>+                                832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */,
</ins><span class="cx">                                 85E711A20AC5D5350053270F /* DOMHTMLCollectionInternal.h in Headers */,
</span><span class="cx">                                 F5C041E30FFCA96D00839D4A /* DOMHTMLDataListElement.h in Headers */,
</span><span class="cx">                                 F5C041E50FFCA96D00839D4A /* DOMHTMLDataListElementInternal.h in Headers */,
</span><span class="lines">@@ -27370,6 +27377,7 @@
</span><span class="cx">                                 59A8F1D411A69508001AC34A /* DeviceOrientationController.cpp in Sources */,
</span><span class="cx">                                 59D1C10411EB5DCF00B638C8 /* DeviceOrientationData.cpp in Sources */,
</span><span class="cx">                                 59A85EA2119D68D900DEF1EF /* DeviceOrientationEvent.cpp in Sources */,
</span><ins>+                                832B843619D8E57400B26055 /* SVGAnimateElementBase.cpp in Sources */,
</ins><span class="cx">                                 CD37B39815C1B971006DC898 /* DiagnosticLoggingKeys.cpp in Sources */,
</span><span class="cx">                                 CECADFC6153778FF00E37068 /* DictationAlternative.cpp in Sources */,
</span><span class="cx">                                 CECADFC8153778FF00E37068 /* DictationCommand.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoredommake_namespl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/make_names.pl (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/make_names.pl        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/dom/make_names.pl        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -194,7 +194,6 @@
</span><span class="cx"> 'wrapperOnlyIfMediaIsAvailable' => 0,
</span><span class="cx"> 'conditional' => 0,
</span><span class="cx"> 'runtimeConditional' => 0,
</span><del>- 'generateTypeHelpers' => 0
</del><span class="cx"> );
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -627,12 +626,18 @@
</span><span class="cx"> my ($F, $namesRef) = @_;
</span><span class="cx"> my %names = %$namesRef;
</span><span class="cx">
</span><del>- for my $name (sort keys %names) {
- if (!$parsedTags{$name}{generateTypeHelpers}) {
- next;
- }
</del><ins>+ # Do a first pass to discard classes that map to several tags.
+ my %classToTags = ();
+ for my $name (keys %names) {
+ my $class = $parsedTags{$name}{interfaceName};
+ push(@{$classToTags{$class}}, $name) if defined $class;
+ }
</ins><span class="cx">
</span><del>- my $class = $parsedTags{$name}{interfaceName};
</del><ins>+ for my $class (sort keys %classToTags) {
+ # Skip classes that map to more than 1 tag.
+ my $tagCount = scalar @{$classToTags{$class}};
+ next if $tagCount > 1;
+ my $name = $classToTags{$class}[0];
</ins><span class="cx"> print F <<END
</span><span class="cx"> class $class;
</span><span class="cx"> template <typename ArgType>
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTagNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTagNames.in (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTagNames.in        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/html/HTMLTagNames.in        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -3,28 +3,28 @@
</span><span class="cx"> namespaceURI="http://www.w3.org/1999/xhtml"
</span><span class="cx"> fallbackInterfaceName="HTMLUnknownElement"
</span><span class="cx">
</span><del>-a interfaceName=HTMLAnchorElement, generateTypeHelpers
</del><ins>+a interfaceName=HTMLAnchorElement
</ins><span class="cx"> abbr interfaceName=HTMLElement
</span><span class="cx"> acronym interfaceName=HTMLElement
</span><span class="cx"> address interfaceName=HTMLElement
</span><del>-applet constructorNeedsCreatedByParser, generateTypeHelpers
-area generateTypeHelpers
</del><ins>+applet constructorNeedsCreatedByParser
+area
</ins><span class="cx"> article interfaceName=HTMLElement
</span><span class="cx"> aside interfaceName=HTMLElement
</span><del>-audio wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+audio wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser
</ins><span class="cx"> b interfaceName=HTMLElement
</span><del>-base generateTypeHelpers
</del><ins>+base
</ins><span class="cx"> basefont interfaceName=HTMLBaseFontElement
</span><del>-bdi interfaceName=HTMLBDIElement, JSInterfaceName=HTMLElement, generateTypeHelpers
</del><ins>+bdi interfaceName=HTMLBDIElement, JSInterfaceName=HTMLElement
</ins><span class="cx"> bdo interfaceName=HTMLElement
</span><span class="cx"> bgsound interfaceName=HTMLElement
</span><span class="cx"> big interfaceName=HTMLElement
</span><span class="cx"> blockquote interfaceName=HTMLQuoteElement
</span><del>-body generateTypeHelpers
-br interfaceName=HTMLBRElement, generateTypeHelpers
-button constructorNeedsFormElement, generateTypeHelpers
-canvas generateTypeHelpers
-caption interfaceName=HTMLTableCaptionElement, generateTypeHelpers
</del><ins>+body
+br interfaceName=HTMLBRElement
+button constructorNeedsFormElement
+canvas
+caption interfaceName=HTMLTableCaptionElement
</ins><span class="cx"> center interfaceName=HTMLElement
</span><span class="cx"> cite interfaceName=HTMLElement
</span><span class="cx"> code interfaceName=HTMLElement
</span><span class="lines">@@ -32,73 +32,73 @@
</span><span class="cx"> colgroup interfaceName=HTMLTableColElement
</span><span class="cx"> command interfaceName=HTMLElement
</span><span class="cx"> webkitShadowContent interfaceName=HTMLElement, noConstructor
</span><del>-datalist interfaceName=HTMLDataListElement, conditional=DATALIST_ELEMENT, generateTypeHelpers
</del><ins>+datalist interfaceName=HTMLDataListElement, conditional=DATALIST_ELEMENT
</ins><span class="cx"> dd interfaceName=HTMLElement
</span><span class="cx"> del interfaceName=HTMLModElement
</span><del>-details conditional=DETAILS_ELEMENT, generateTypeHelpers
</del><ins>+details conditional=DETAILS_ELEMENT
</ins><span class="cx"> dfn interfaceName=HTMLElement
</span><span class="cx"> dir interfaceName=HTMLDirectoryElement
</span><del>-div generateTypeHelpers
</del><ins>+div
</ins><span class="cx"> dl interfaceName=HTMLDListElement
</span><span class="cx"> dt interfaceName=HTMLElement
</span><span class="cx"> em interfaceName=HTMLElement
</span><del>-embed constructorNeedsCreatedByParser, generateTypeHelpers
-fieldset interfaceName=HTMLFieldSetElement, constructorNeedsFormElement, generateTypeHelpers
</del><ins>+embed constructorNeedsCreatedByParser
+fieldset interfaceName=HTMLFieldSetElement, constructorNeedsFormElement
</ins><span class="cx"> figcaption interfaceName=HTMLElement
</span><span class="cx"> figure interfaceName=HTMLElement
</span><del>-font generateTypeHelpers
</del><ins>+font
</ins><span class="cx"> footer interfaceName=HTMLElement
</span><del>-form generateTypeHelpers
-frame generateTypeHelpers
-frameset interfaceName=HTMLFrameSetElement, generateTypeHelpers
</del><ins>+form
+frame
+frameset interfaceName=HTMLFrameSetElement
</ins><span class="cx"> h1 interfaceName=HTMLHeadingElement
</span><span class="cx"> h2 interfaceName=HTMLHeadingElement
</span><span class="cx"> h3 interfaceName=HTMLHeadingElement
</span><span class="cx"> h4 interfaceName=HTMLHeadingElement
</span><span class="cx"> h5 interfaceName=HTMLHeadingElement
</span><span class="cx"> h6 interfaceName=HTMLHeadingElement
</span><del>-head generateTypeHelpers
</del><ins>+head
</ins><span class="cx"> header interfaceName=HTMLElement
</span><span class="cx"> hgroup interfaceName=HTMLElement
</span><del>-hr interfaceName=HTMLHRElement, generateTypeHelpers
-html generateTypeHelpers
</del><ins>+hr interfaceName=HTMLHRElement
+html
</ins><span class="cx"> i interfaceName=HTMLElement
</span><del>-iframe interfaceName=HTMLIFrameElement, generateTypeHelpers
</del><ins>+iframe interfaceName=HTMLIFrameElement
</ins><span class="cx"> image interfaceName=HTMLUnknownElement
</span><del>-img interfaceName=HTMLImageElement, constructorNeedsFormElement, generateTypeHelpers
-input constructorNeedsFormElement, constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+img interfaceName=HTMLImageElement, constructorNeedsFormElement
+input constructorNeedsFormElement, constructorNeedsCreatedByParser
</ins><span class="cx"> ins interfaceName=HTMLModElement
</span><span class="cx"> isindex interfaceName=HTMLUnknownElement
</span><span class="cx"> kbd interfaceName=HTMLElement
</span><span class="cx"> keygen constructorNeedsFormElement
</span><del>-label generateTypeHelpers
</del><ins>+label
</ins><span class="cx"> layer interfaceName=HTMLElement
</span><del>-legend generateTypeHelpers
</del><ins>+legend
</ins><span class="cx"> li interfaceName=HTMLLIElement
</span><del>-link constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+link constructorNeedsCreatedByParser
</ins><span class="cx"> listing interfaceName=HTMLPreElement
</span><span class="cx"> main interfaceName=HTMLElement
</span><del>-map generateTypeHelpers
</del><ins>+map
</ins><span class="cx"> mark interfaceName=HTMLElement
</span><del>-marquee generateTypeHelpers
</del><ins>+marquee
</ins><span class="cx"> menu
</span><del>-meta generateTypeHelpers
-meter interfaceName=HTMLMeterElement, conditional=METER_ELEMENT, generateTypeHelpers
</del><ins>+meta
+meter interfaceName=HTMLMeterElement, conditional=METER_ELEMENT
</ins><span class="cx"> nav interfaceName=HTMLElement
</span><span class="cx"> nobr interfaceName=HTMLElement
</span><span class="cx"> noembed interfaceName=HTMLElement
</span><span class="cx"> noframes interfaceName=HTMLElement
</span><span class="cx"> nolayer interfaceName=HTMLElement
</span><del>-object constructorNeedsFormElement, constructorNeedsCreatedByParser, generateTypeHelpers
-ol interfaceName=HTMLOListElement, generateTypeHelpers
-optgroup interfaceName=HTMLOptGroupElement, generateTypeHelpers
-option generateTypeHelpers
</del><ins>+object constructorNeedsFormElement, constructorNeedsCreatedByParser
+ol interfaceName=HTMLOListElement
+optgroup interfaceName=HTMLOptGroupElement
+option
</ins><span class="cx"> output constructorNeedsFormElement
</span><del>-p interfaceName=HTMLParagraphElement, generateTypeHelpers
-param generateTypeHelpers
</del><ins>+p interfaceName=HTMLParagraphElement
+param
</ins><span class="cx"> plaintext interfaceName=HTMLElement
</span><span class="cx"> pre
</span><del>-progress interfaceName=HTMLProgressElement, generateTypeHelpers
</del><ins>+progress interfaceName=HTMLProgressElement
</ins><span class="cx"> q interfaceName=HTMLQuoteElement
</span><span class="cx"> rb interfaceName=HTMLElement
</span><span class="cx"> rp interfaceName=HTMLElement
</span><span class="lines">@@ -107,34 +107,34 @@
</span><span class="cx"> ruby interfaceName=HTMLElement
</span><span class="cx"> s interfaceName=HTMLElement
</span><span class="cx"> samp interfaceName=HTMLElement
</span><del>-script constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+script constructorNeedsCreatedByParser
</ins><span class="cx"> section interfaceName=HTMLElement
</span><del>-select constructorNeedsFormElement, generateTypeHelpers
</del><ins>+select constructorNeedsFormElement
</ins><span class="cx"> small interfaceName=HTMLElement
</span><del>-source wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, generateTypeHelpers
-span generateTypeHelpers
</del><ins>+source wrapperOnlyIfMediaIsAvailable, conditional=VIDEO
+span
</ins><span class="cx"> strike interfaceName=HTMLElement
</span><span class="cx"> strong interfaceName=HTMLElement
</span><del>-style constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+style constructorNeedsCreatedByParser
</ins><span class="cx"> sub interfaceName=HTMLElement
</span><del>-summary interfaceName=HTMLSummaryElement, JSInterfaceName=HTMLElement, conditional=DETAILS_ELEMENT, generateTypeHelpers
</del><ins>+summary interfaceName=HTMLSummaryElement, JSInterfaceName=HTMLElement, conditional=DETAILS_ELEMENT
</ins><span class="cx"> sup interfaceName=HTMLElement
</span><del>-table generateTypeHelpers
</del><ins>+table
</ins><span class="cx"> tbody interfaceName=HTMLTableSectionElement
</span><span class="cx"> td interfaceName=HTMLTableCellElement
</span><del>-template conditional=TEMPLATE_ELEMENT, generateTypeHelpers
-textarea interfaceName=HTMLTextAreaElement, constructorNeedsFormElement, generateTypeHelpers
</del><ins>+template conditional=TEMPLATE_ELEMENT
+textarea interfaceName=HTMLTextAreaElement, constructorNeedsFormElement
</ins><span class="cx"> tfoot interfaceName=HTMLTableSectionElement
</span><span class="cx"> th interfaceName=HTMLTableCellElement
</span><span class="cx"> thead interfaceName=HTMLTableSectionElement
</span><del>-title generateTypeHelpers
-tr interfaceName=HTMLTableRowElement, generateTypeHelpers
-track wrapperOnlyIfMediaIsAvailable, conditional=VIDEO_TRACK, generateTypeHelpers
</del><ins>+title
+tr interfaceName=HTMLTableRowElement
+track wrapperOnlyIfMediaIsAvailable, conditional=VIDEO_TRACK
</ins><span class="cx"> tt interfaceName=HTMLElement
</span><span class="cx"> u interfaceName=HTMLElement
</span><del>-ul interfaceName=HTMLUListElement, generateTypeHelpers
</del><ins>+ul interfaceName=HTMLUListElement
</ins><span class="cx"> var interfaceName=HTMLElement
</span><del>-video wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser, generateTypeHelpers
</del><ins>+video wrapperOnlyIfMediaIsAvailable, conditional=VIDEO, constructorNeedsCreatedByParser
</ins><span class="cx"> wbr interfaceName=HTMLElement
</span><span class="cx"> xmp interfaceName=HTMLPreElement
</span><span class="cx"> noscript interfaceName=HTMLElement
</span></span></pre></div>
<a id="trunkSourceWebCoremathmlmathtagsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/mathml/mathtags.in (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/mathml/mathtags.in        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/mathml/mathtags.in        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -6,7 +6,7 @@
</span><span class="cx"> annotation interfaceName=MathMLTextElement
</span><span class="cx"> annotation-xml interfaceName=MathMLInlineContainerElement
</span><span class="cx"> maction interfaceName=MathMLSelectElement
</span><del>-math generateTypeHelpers
</del><ins>+math
</ins><span class="cx"> mfrac interfaceName=MathMLInlineContainerElement
</span><span class="cx"> mfenced interfaceName=MathMLInlineContainerElement
</span><span class="cx"> msubsup interfaceName=MathMLInlineContainerElement
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> mtd interfaceName=MathMLElement
</span><span class="cx"> mmultiscripts interfaceName=MathMLInlineContainerElement
</span><span class="cx"> mprescripts interfaceName=MathMLInlineContainerElement
</span><del>-menclose interfaceName=MathMLMencloseElement, generateTypeHelpers
</del><ins>+menclose interfaceName=MathMLMencloseElement
</ins><span class="cx"> none interfaceName=MathMLInlineContainerElement
</span><span class="cx"> semantics interfaceName=MathMLSelectElement
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAllInOne.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAllInOne.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAllInOne.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include "SVGAngle.cpp"
</span><span class="cx"> #include "SVGAnimateColorElement.cpp"
</span><span class="cx"> #include "SVGAnimateElement.cpp"
</span><ins>+#include "SVGAnimateElementBase.cpp"
</ins><span class="cx"> #include "SVGAnimateMotionElement.cpp"
</span><span class="cx"> #include "SVGAnimateTransformElement.cpp"
</span><span class="cx"> #include "SVGAnimatedAngle.cpp"
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateColorElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateColorElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> inline SVGAnimateColorElement::SVGAnimateColorElement(const QualifiedName& tagName, Document& document)
</span><del>- : SVGAnimateElement(tagName, document)
</del><ins>+ : SVGAnimateElementBase(tagName, document)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(hasTagName(SVGNames::animateColorTag));
</span><span class="cx"> }
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx">
</span><span class="cx"> void SVGAnimateColorElement::determinePropertyValueTypes(const String& from, const String& to)
</span><span class="cx"> {
</span><del>- SVGAnimateElement::determinePropertyValueTypes(from, to);
</del><ins>+ SVGAnimateElementBase::determinePropertyValueTypes(from, to);
</ins><span class="cx"> if (attributeValueIsCurrentColor(from))
</span><span class="cx"> m_fromPropertyValueType = CurrentColorValue;
</span><span class="cx"> if (attributeValueIsCurrentColor(to))
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateColorElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateColorElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateColorElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateColorElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -22,11 +22,11 @@
</span><span class="cx"> #ifndef SVGAnimateColorElement_h
</span><span class="cx"> #define SVGAnimateColorElement_h
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-class SVGAnimateColorElement final : public SVGAnimateElement {
</del><ins>+class SVGAnimateColorElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx"> static PassRefPtr<SVGAnimateColorElement> create(const QualifiedName&, Document&);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -1,45 +1,37 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- * Copyright (C) Research In Motion Limited 2011. All rights reserved.
- * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
</del><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
</ins><span class="cx"> *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx"> */
</span><span class="cx">
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimateElement.h"
</span><span class="cx">
</span><del>-#include "CSSParser.h"
-#include "CSSPropertyNames.h"
-#include "QualifiedName.h"
-#include "RenderObject.h"
-#include "SVGAnimatorFactory.h"
-#include "SVGElement.h"
-#include "SVGNames.h"
-#include "StyleProperties.h"
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> SVGAnimateElement::SVGAnimateElement(const QualifiedName& tagName, Document& document)
</span><del>- : SVGAnimationElement(tagName, document)
- , m_animatedPropertyType(AnimatedString)
</del><ins>+ : SVGAnimateElementBase(tagName, document)
</ins><span class="cx"> {
</span><del>- ASSERT(hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::setTag) || hasTagName(SVGNames::animateColorTag) || hasTagName(SVGNames::animateTransformTag));
</del><ins>+ ASSERT(hasTagName(SVGNames::animateTag));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> PassRefPtr<SVGAnimateElement> SVGAnimateElement::create(const QualifiedName& tagName, Document& document)
</span><span class="lines">@@ -47,416 +39,4 @@
</span><span class="cx"> return adoptRef(new SVGAnimateElement(tagName, document));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-SVGAnimateElement::~SVGAnimateElement()
-{
-}
-
-bool SVGAnimateElement::hasValidAttributeType()
-{
- SVGElement* targetElement = this->targetElement();
- if (!targetElement)
- return false;
-
- return m_animatedPropertyType != AnimatedUnknown && !hasInvalidCSSAttributeType();
-}
-
-AnimatedPropertyType SVGAnimateElement::determineAnimatedPropertyType(SVGElement* targetElement) const
-{
- ASSERT(targetElement);
-
- Vector<AnimatedPropertyType> propertyTypes;
- targetElement->animatedPropertyTypeForAttribute(attributeName(), propertyTypes);
- if (propertyTypes.isEmpty())
- return AnimatedUnknown;
-
- ASSERT(propertyTypes.size() <= 2);
- AnimatedPropertyType type = propertyTypes[0];
- if (hasTagName(SVGNames::animateColorTag) && type != AnimatedColor)
- return AnimatedUnknown;
-
- // Animations of transform lists are not allowed for <animate> or <set>
- // http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties
- if (type == AnimatedTransformList && !hasTagName(SVGNames::animateTransformTag))
- return AnimatedUnknown;
-
- // Fortunately there's just one special case needed here: SVGMarkerElements orientAttr, which
- // corresponds to SVGAnimatedAngle orientAngle and SVGAnimatedEnumeration orientType. We have to
- // figure out whose value to change here.
- if (targetElement->hasTagName(SVGNames::markerTag) && type == AnimatedAngle) {
- ASSERT(propertyTypes.size() == 2);
- ASSERT(propertyTypes[0] == AnimatedAngle);
- ASSERT(propertyTypes[1] == AnimatedEnumeration);
- } else if (propertyTypes.size() == 2)
- ASSERT(propertyTypes[0] == propertyTypes[1]);
-
- return type;
-}
-
-void SVGAnimateElement::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement)
-{
- ASSERT(resultElement);
- SVGElement* targetElement = this->targetElement();
- if (!targetElement)
- return;
-
- ASSERT(m_animatedPropertyType == determineAnimatedPropertyType(targetElement));
-
- ASSERT(percentage >= 0 && percentage <= 1);
- ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
- ASSERT(m_animatedPropertyType != AnimatedUnknown);
- ASSERT(m_animator);
- ASSERT(m_animator->type() == m_animatedPropertyType);
- ASSERT(m_fromType);
- ASSERT(m_fromType->type() == m_animatedPropertyType);
- ASSERT(m_toType);
-
- SVGAnimateElement& resultAnimationElement = downcast<SVGAnimateElement>(*resultElement);
- ASSERT(resultAnimationElement.m_animatedType);
- ASSERT(resultAnimationElement.m_animatedPropertyType == m_animatedPropertyType);
-
- if (hasTagName(SVGNames::setTag))
- percentage = 1;
-
- if (calcMode() == CalcModeDiscrete)
- percentage = percentage < 0.5 ? 0 : 1;
-
- // Target element might have changed.
- m_animator->setContextElement(targetElement);
-
- // Be sure to detach list wrappers before we modfiy their underlying value. If we'd do
- // if after calculateAnimatedValue() ran the cached pointers in the list propery tear
- // offs would point nowhere, and we couldn't create copies of those values anymore,
- // while detaching. This is covered by assertions, moving this down would fire them.
- if (!m_animatedProperties.isEmpty())
- m_animator->animValWillChange(m_animatedProperties);
-
- // Values-animation accumulates using the last values entry corresponding to the end of duration time.
- SVGAnimatedType* toAtEndOfDurationType = m_toAtEndOfDurationType ? m_toAtEndOfDurationType.get() : m_toType.get();
- m_animator->calculateAnimatedValue(percentage, repeatCount, m_fromType.get(), m_toType.get(), toAtEndOfDurationType, resultAnimationElement.m_animatedType.get());
-}
-
-bool SVGAnimateElement::calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString)
-{
- if (toAtEndOfDurationString.isEmpty())
- return false;
- m_toAtEndOfDurationType = ensureAnimator()->constructFromString(toAtEndOfDurationString);
- return true;
-}
-
-bool SVGAnimateElement::calculateFromAndToValues(const String& fromString, const String& toString)
-{
- SVGElement* targetElement = this->targetElement();
- if (!targetElement)
- return false;
-
- determinePropertyValueTypes(fromString, toString);
- ensureAnimator()->calculateFromAndToValues(m_fromType, m_toType, fromString, toString);
- ASSERT(m_animatedPropertyType == m_animator->type());
- return true;
-}
-
-bool SVGAnimateElement::calculateFromAndByValues(const String& fromString, const String& byString)
-{
- SVGElement* targetElement = this->targetElement();
- if (!targetElement)
- return false;
-
- if (animationMode() == ByAnimation && !isAdditive())
- return false;
-
- // from-by animation may only be used with attributes that support addition (e.g. most numeric attributes).
- if (animationMode() == FromByAnimation && !animatedPropertyTypeSupportsAddition())
- return false;
-
- ASSERT(!hasTagName(SVGNames::setTag));
-
- determinePropertyValueTypes(fromString, byString);
- ensureAnimator()->calculateFromAndByValues(m_fromType, m_toType, fromString, byString);
- ASSERT(m_animatedPropertyType == m_animator->type());
- return true;
-}
-
-#ifndef NDEBUG
-static inline bool propertyTypesAreConsistent(AnimatedPropertyType expectedPropertyType, const SVGElementAnimatedPropertyList& animatedTypes)
-{
- SVGElementAnimatedPropertyList::const_iterator end = animatedTypes.end();
- for (SVGElementAnimatedPropertyList::const_iterator it = animatedTypes.begin(); it != end; ++it) {
- for (size_t i = 0; i < it->properties.size(); ++i) {
- if (expectedPropertyType != it->properties[i]->animatedPropertyType()) {
- // This is the only allowed inconsistency. SVGAnimatedAngleAnimator handles both SVGAnimatedAngle & SVGAnimatedEnumeration for markers orient attribute.
- if (expectedPropertyType == AnimatedAngle && it->properties[i]->animatedPropertyType() == AnimatedEnumeration)
- return true;
- return false;
- }
- }
- }
-
- return true;
-}
-#endif
-
-void SVGAnimateElement::resetAnimatedType()
-{
- SVGAnimatedTypeAnimator* animator = ensureAnimator();
- ASSERT(m_animatedPropertyType == animator->type());
-
- SVGElement* targetElement = this->targetElement();
- const QualifiedName& attributeName = this->attributeName();
- ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
-
- if (shouldApply == DontApplyAnimation)
- return;
-
- if (shouldApply == ApplyXMLAnimation || shouldApply == ApplyXMLandCSSAnimation) {
- // SVG DOM animVal animation code-path.
- m_animatedProperties = animator->findAnimatedPropertiesForAttributeName(targetElement, attributeName);
- ASSERT(!m_animatedProperties.isEmpty());
-
- ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties));
- if (!m_animatedType)
- m_animatedType = animator->startAnimValAnimation(m_animatedProperties);
- else {
- animator->resetAnimValToBaseVal(m_animatedProperties, m_animatedType.get());
- animator->animValDidChange(m_animatedProperties);
- }
- return;
- }
-
- // CSS properties animation code-path.
- ASSERT(m_animatedProperties.isEmpty());
- String baseValue;
-
- if (shouldApply == ApplyCSSAnimation) {
- ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement, attributeName));
- computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName()), baseValue);
- }
-
- if (!m_animatedType)
- m_animatedType = animator->constructFromString(baseValue);
- else
- m_animatedType->setValueAsString(attributeName, baseValue);
-}
-
-static inline void applyCSSPropertyToTarget(SVGElement* targetElement, CSSPropertyID id, const String& value)
-{
- ASSERT(!targetElement->m_deletionHasBegun);
-
- if (!targetElement->ensureAnimatedSMILStyleProperties().setProperty(id, value, false, 0))
- return;
-
- targetElement->setNeedsStyleRecalc(SyntheticStyleChange);
-}
-
-static inline void removeCSSPropertyFromTarget(SVGElement* targetElement, CSSPropertyID id)
-{
- ASSERT(!targetElement->m_deletionHasBegun);
- targetElement->ensureAnimatedSMILStyleProperties().removeProperty(id);
- targetElement->setNeedsStyleRecalc(SyntheticStyleChange);
-}
-
-static inline void applyCSSPropertyToTargetAndInstances(SVGElement* targetElement, const QualifiedName& attributeName, const String& valueAsString)
-{
- ASSERT(targetElement);
- if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode())
- return;
-
- CSSPropertyID id = cssPropertyID(attributeName.localName());
-
- SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
- applyCSSPropertyToTarget(targetElement, id, valueAsString);
-
- // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
- const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
- const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
- for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
- if (SVGElement* shadowTreeElement = (*it)->shadowTreeElement())
- applyCSSPropertyToTarget(shadowTreeElement, id, valueAsString);
- }
-}
-
-static inline void removeCSSPropertyFromTargetAndInstances(SVGElement* targetElement, const QualifiedName& attributeName)
-{
- ASSERT(targetElement);
- if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode())
- return;
-
- CSSPropertyID id = cssPropertyID(attributeName.localName());
-
- SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
- removeCSSPropertyFromTarget(targetElement, id);
-
- // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
- const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
- const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
- for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
- if (SVGElement* shadowTreeElement = (*it)->shadowTreeElement())
- removeCSSPropertyFromTarget(shadowTreeElement, id);
- }
-}
-
-static inline void notifyTargetAboutAnimValChange(SVGElement* targetElement, const QualifiedName& attributeName)
-{
- ASSERT(!targetElement->m_deletionHasBegun);
- targetElement->svgAttributeChanged(attributeName);
-}
-
-static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement* targetElement, const QualifiedName& attributeName)
-{
- ASSERT(targetElement);
- if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode())
- return;
-
- SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
- notifyTargetAboutAnimValChange(targetElement, attributeName);
-
- // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
- const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
- const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
- for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
- if (SVGElement* shadowTreeElement = (*it)->shadowTreeElement())
- notifyTargetAboutAnimValChange(shadowTreeElement, attributeName);
- }
-}
-
-void SVGAnimateElement::clearAnimatedType(SVGElement* targetElement)
-{
- if (!m_animatedType)
- return;
-
- if (!targetElement) {
- m_animatedType = nullptr;
- return;
- }
-
- if (m_animatedProperties.isEmpty()) {
- // CSS properties animation code-path.
- removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
- m_animatedType = nullptr;
- return;
- }
-
- ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName());
- if (shouldApply == ApplyXMLandCSSAnimation)
- removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
-
- // SVG DOM animVal animation code-path.
- if (m_animator) {
- m_animator->stopAnimValAnimation(m_animatedProperties);
- notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName());
- }
-
- m_animatedProperties.clear();
- m_animatedType = nullptr;
-}
-
-void SVGAnimateElement::applyResultsToTarget()
-{
- ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
- ASSERT(m_animatedPropertyType != AnimatedUnknown);
- ASSERT(m_animator);
-
- // Early exit if our animated type got destructed by a previous endedActiveInterval().
- if (!m_animatedType)
- return;
-
- SVGElement* targetElement = this->targetElement();
- const QualifiedName& attributeName = this->attributeName();
- if (m_animatedProperties.isEmpty()) {
- // CSS properties animation code-path.
- // Convert the result of the animation to a String and apply it as CSS property on the target & all instances.
- applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType->valueAsString());
- return;
- }
-
- // We do update the style and the animation property independent of each other.
- ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
- if (shouldApply == ApplyXMLandCSSAnimation)
- applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType->valueAsString());
-
- // SVG DOM animVal animation code-path.
- // At this point the SVG DOM values are already changed, unlike for CSS.
- // We only have to trigger update notifications here.
- m_animator->animValDidChange(m_animatedProperties);
- notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName);
-}
-
-bool SVGAnimateElement::animatedPropertyTypeSupportsAddition() const
-{
- // Spec: http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties.
- switch (m_animatedPropertyType) {
- case AnimatedBoolean:
- case AnimatedEnumeration:
- case AnimatedPreserveAspectRatio:
- case AnimatedString:
- case AnimatedUnknown:
- return false;
- case AnimatedAngle:
- case AnimatedColor:
- case AnimatedInteger:
- case AnimatedIntegerOptionalInteger:
- case AnimatedLength:
- case AnimatedLengthList:
- case AnimatedNumber:
- case AnimatedNumberList:
- case AnimatedNumberOptionalNumber:
- case AnimatedPath:
- case AnimatedPoints:
- case AnimatedRect:
- case AnimatedTransformList:
- return true;
- default:
- RELEASE_ASSERT_NOT_REACHED();
- return true;
- }
-}
-
-bool SVGAnimateElement::isAdditive() const
-{
- if (animationMode() == ByAnimation || animationMode() == FromByAnimation)
- if (!animatedPropertyTypeSupportsAddition())
- return false;
-
- return SVGAnimationElement::isAdditive();
-}
-
-float SVGAnimateElement::calculateDistance(const String& fromString, const String& toString)
-{
- // FIXME: A return value of float is not enough to support paced animations on lists.
- SVGElement* targetElement = this->targetElement();
- if (!targetElement)
- return -1;
-
- return ensureAnimator()->calculateDistance(fromString, toString);
-}
-
-void SVGAnimateElement::setTargetElement(SVGElement* target)
-{
- SVGAnimationElement::setTargetElement(target);
- resetAnimatedPropertyType();
-}
-
-void SVGAnimateElement::setAttributeName(const QualifiedName& attributeName)
-{
- SVGAnimationElement::setAttributeName(attributeName);
- resetAnimatedPropertyType();
-}
-
-void SVGAnimateElement::resetAnimatedPropertyType()
-{
- ASSERT(!m_animatedType);
- m_fromType = nullptr;
- m_toType = nullptr;
- m_toAtEndOfDurationType = nullptr;
- m_animator = nullptr;
- m_animatedPropertyType = targetElement() ? determineAnimatedPropertyType(targetElement()) : AnimatedString;
-}
-
-SVGAnimatedTypeAnimator* SVGAnimateElement::ensureAnimator()
-{
- if (!m_animator)
- m_animator = SVGAnimatorFactory::create(this, targetElement(), m_animatedPropertyType);
- ASSERT(m_animatedPropertyType == m_animator->type());
- return m_animator.get();
-}
-
-}
</del><ins>+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -1,88 +1,45 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- * Copyright (C) Research In Motion Limited 2011. All rights reserved.
</del><ins>+ * Copyright (C) 2014 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
</ins><span class="cx"> *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx"> */
</span><span class="cx">
</span><span class="cx"> #ifndef SVGAnimateElement_h
</span><span class="cx"> #define SVGAnimateElement_h
</span><span class="cx">
</span><del>-#include "SVGAnimatedType.h"
-#include "SVGAnimatedTypeAnimator.h"
-#include "SVGAnimationElement.h"
-#include "SVGNames.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class SVGAnimatedProperty;
</span><span class="cx">
</span><del>-class SVGAnimateElement : public SVGAnimationElement {
</del><ins>+class SVGAnimateElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx"> static PassRefPtr<SVGAnimateElement> create(const QualifiedName&, Document&);
</span><del>- virtual ~SVGAnimateElement();
</del><span class="cx">
</span><del>- AnimatedPropertyType determineAnimatedPropertyType(SVGElement*) const;
-
-protected:
- SVGAnimateElement(const QualifiedName&, Document&);
-
- virtual void resetAnimatedType() override;
- virtual void clearAnimatedType(SVGElement* targetElement) override;
-
- virtual bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) override;
- virtual bool calculateFromAndToValues(const String& fromString, const String& toString) override;
- virtual bool calculateFromAndByValues(const String& fromString, const String& byString) override;
- virtual void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
- virtual void applyResultsToTarget() override;
- virtual float calculateDistance(const String& fromString, const String& toString) override;
- virtual bool isAdditive() const override;
-
- virtual void setTargetElement(SVGElement*) override;
- virtual void setAttributeName(const QualifiedName&) override;
-
- AnimatedPropertyType m_animatedPropertyType;
-
</del><span class="cx"> private:
</span><del>- void resetAnimatedPropertyType();
- SVGAnimatedTypeAnimator* ensureAnimator();
- bool animatedPropertyTypeSupportsAddition() const;
-
- virtual bool hasValidAttributeType() override;
-
- std::unique_ptr<SVGAnimatedType> m_fromType;
- std::unique_ptr<SVGAnimatedType> m_toType;
- std::unique_ptr<SVGAnimatedType> m_toAtEndOfDurationType;
- std::unique_ptr<SVGAnimatedType> m_animatedType;
-
- SVGElementAnimatedPropertyList m_animatedProperties;
- std::unique_ptr<SVGAnimatedTypeAnimator> m_animator;
</del><ins>+ SVGAnimateElement(const QualifiedName&, Document&);
</ins><span class="cx"> };
</span><span class="cx">
</span><del>-SPECIALIZE_TYPE_TRAITS_BEGIN(SVGAnimateElement)
- static bool isSVGAnimateElement(const SVGElement& element)
- {
- return element.hasTagName(SVGNames::animateTag) || element.hasTagName(SVGNames::animateColorTag)
- || element.hasTagName(SVGNames::animateTransformTag) || element.hasTagName(SVGNames::setTag);
- }
- static bool isSVGAnimateElement(const Node& node) { return is<SVGElement>(node) && isSVGAnimateElement(downcast<SVGElement>(node)); }
-SPECIALIZE_TYPE_TRAITS_END()
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif // SVGAnimateElement_h
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBasecppfromrev174049trunkSourceWebCoresvgSVGAnimateElementcpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp (from rev 174049, trunk/Source/WebCore/svg/SVGAnimateElement.cpp) (0 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp         (rev 0)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -0,0 +1,458 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) Research In Motion Limited 2011. All rights reserved.
+ * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "SVGAnimateElementBase.h"
+
+#include "CSSParser.h"
+#include "CSSPropertyNames.h"
+#include "QualifiedName.h"
+#include "RenderObject.h"
+#include "SVGAnimatorFactory.h"
+#include "SVGElement.h"
+#include "SVGNames.h"
+#include "StyleProperties.h"
+
+namespace WebCore {
+
+SVGAnimateElementBase::SVGAnimateElementBase(const QualifiedName& tagName, Document& document)
+ : SVGAnimationElement(tagName, document)
+ , m_animatedPropertyType(AnimatedString)
+{
+ ASSERT(hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::setTag) || hasTagName(SVGNames::animateColorTag) || hasTagName(SVGNames::animateTransformTag));
+}
+
+SVGAnimateElementBase::~SVGAnimateElementBase()
+{
+}
+
+bool SVGAnimateElementBase::hasValidAttributeType()
+{
+ SVGElement* targetElement = this->targetElement();
+ if (!targetElement)
+ return false;
+
+ return m_animatedPropertyType != AnimatedUnknown && !hasInvalidCSSAttributeType();
+}
+
+AnimatedPropertyType SVGAnimateElementBase::determineAnimatedPropertyType(SVGElement* targetElement) const
+{
+ ASSERT(targetElement);
+
+ Vector<AnimatedPropertyType> propertyTypes;
+ targetElement->animatedPropertyTypeForAttribute(attributeName(), propertyTypes);
+ if (propertyTypes.isEmpty())
+ return AnimatedUnknown;
+
+ ASSERT(propertyTypes.size() <= 2);
+ AnimatedPropertyType type = propertyTypes[0];
+ if (hasTagName(SVGNames::animateColorTag) && type != AnimatedColor)
+ return AnimatedUnknown;
+
+ // Animations of transform lists are not allowed for <animate> or <set>
+ // http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties
+ if (type == AnimatedTransformList && !hasTagName(SVGNames::animateTransformTag))
+ return AnimatedUnknown;
+
+ // Fortunately there's just one special case needed here: SVGMarkerElements orientAttr, which
+ // corresponds to SVGAnimatedAngle orientAngle and SVGAnimatedEnumeration orientType. We have to
+ // figure out whose value to change here.
+ if (targetElement->hasTagName(SVGNames::markerTag) && type == AnimatedAngle) {
+ ASSERT(propertyTypes.size() == 2);
+ ASSERT(propertyTypes[0] == AnimatedAngle);
+ ASSERT(propertyTypes[1] == AnimatedEnumeration);
+ } else if (propertyTypes.size() == 2)
+ ASSERT(propertyTypes[0] == propertyTypes[1]);
+
+ return type;
+}
+
+void SVGAnimateElementBase::calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement)
+{
+ ASSERT(resultElement);
+ SVGElement* targetElement = this->targetElement();
+ if (!targetElement)
+ return;
+
+ ASSERT(m_animatedPropertyType == determineAnimatedPropertyType(targetElement));
+
+ ASSERT(percentage >= 0 && percentage <= 1);
+ ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
+ ASSERT(m_animatedPropertyType != AnimatedUnknown);
+ ASSERT(m_animator);
+ ASSERT(m_animator->type() == m_animatedPropertyType);
+ ASSERT(m_fromType);
+ ASSERT(m_fromType->type() == m_animatedPropertyType);
+ ASSERT(m_toType);
+
+ SVGAnimateElementBase& resultAnimationElement = downcast<SVGAnimateElementBase>(*resultElement);
+ ASSERT(resultAnimationElement.m_animatedType);
+ ASSERT(resultAnimationElement.m_animatedPropertyType == m_animatedPropertyType);
+
+ if (hasTagName(SVGNames::setTag))
+ percentage = 1;
+
+ if (calcMode() == CalcModeDiscrete)
+ percentage = percentage < 0.5 ? 0 : 1;
+
+ // Target element might have changed.
+ m_animator->setContextElement(targetElement);
+
+ // Be sure to detach list wrappers before we modfiy their underlying value. If we'd do
+ // if after calculateAnimatedValue() ran the cached pointers in the list propery tear
+ // offs would point nowhere, and we couldn't create copies of those values anymore,
+ // while detaching. This is covered by assertions, moving this down would fire them.
+ if (!m_animatedProperties.isEmpty())
+ m_animator->animValWillChange(m_animatedProperties);
+
+ // Values-animation accumulates using the last values entry corresponding to the end of duration time.
+ SVGAnimatedType* toAtEndOfDurationType = m_toAtEndOfDurationType ? m_toAtEndOfDurationType.get() : m_toType.get();
+ m_animator->calculateAnimatedValue(percentage, repeatCount, m_fromType.get(), m_toType.get(), toAtEndOfDurationType, resultAnimationElement.m_animatedType.get());
+}
+
+bool SVGAnimateElementBase::calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString)
+{
+ if (toAtEndOfDurationString.isEmpty())
+ return false;
+ m_toAtEndOfDurationType = ensureAnimator()->constructFromString(toAtEndOfDurationString);
+ return true;
+}
+
+bool SVGAnimateElementBase::calculateFromAndToValues(const String& fromString, const String& toString)
+{
+ SVGElement* targetElement = this->targetElement();
+ if (!targetElement)
+ return false;
+
+ determinePropertyValueTypes(fromString, toString);
+ ensureAnimator()->calculateFromAndToValues(m_fromType, m_toType, fromString, toString);
+ ASSERT(m_animatedPropertyType == m_animator->type());
+ return true;
+}
+
+bool SVGAnimateElementBase::calculateFromAndByValues(const String& fromString, const String& byString)
+{
+ SVGElement* targetElement = this->targetElement();
+ if (!targetElement)
+ return false;
+
+ if (animationMode() == ByAnimation && !isAdditive())
+ return false;
+
+ // from-by animation may only be used with attributes that support addition (e.g. most numeric attributes).
+ if (animationMode() == FromByAnimation && !animatedPropertyTypeSupportsAddition())
+ return false;
+
+ ASSERT(!hasTagName(SVGNames::setTag));
+
+ determinePropertyValueTypes(fromString, byString);
+ ensureAnimator()->calculateFromAndByValues(m_fromType, m_toType, fromString, byString);
+ ASSERT(m_animatedPropertyType == m_animator->type());
+ return true;
+}
+
+#ifndef NDEBUG
+static inline bool propertyTypesAreConsistent(AnimatedPropertyType expectedPropertyType, const SVGElementAnimatedPropertyList& animatedTypes)
+{
+ SVGElementAnimatedPropertyList::const_iterator end = animatedTypes.end();
+ for (SVGElementAnimatedPropertyList::const_iterator it = animatedTypes.begin(); it != end; ++it) {
+ for (size_t i = 0; i < it->properties.size(); ++i) {
+ if (expectedPropertyType != it->properties[i]->animatedPropertyType()) {
+ // This is the only allowed inconsistency. SVGAnimatedAngleAnimator handles both SVGAnimatedAngle & SVGAnimatedEnumeration for markers orient attribute.
+ if (expectedPropertyType == AnimatedAngle && it->properties[i]->animatedPropertyType() == AnimatedEnumeration)
+ return true;
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+#endif
+
+void SVGAnimateElementBase::resetAnimatedType()
+{
+ SVGAnimatedTypeAnimator* animator = ensureAnimator();
+ ASSERT(m_animatedPropertyType == animator->type());
+
+ SVGElement* targetElement = this->targetElement();
+ const QualifiedName& attributeName = this->attributeName();
+ ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
+
+ if (shouldApply == DontApplyAnimation)
+ return;
+
+ if (shouldApply == ApplyXMLAnimation || shouldApply == ApplyXMLandCSSAnimation) {
+ // SVG DOM animVal animation code-path.
+ m_animatedProperties = animator->findAnimatedPropertiesForAttributeName(targetElement, attributeName);
+ ASSERT(!m_animatedProperties.isEmpty());
+
+ ASSERT(propertyTypesAreConsistent(m_animatedPropertyType, m_animatedProperties));
+ if (!m_animatedType)
+ m_animatedType = animator->startAnimValAnimation(m_animatedProperties);
+ else {
+ animator->resetAnimValToBaseVal(m_animatedProperties, m_animatedType.get());
+ animator->animValDidChange(m_animatedProperties);
+ }
+ return;
+ }
+
+ // CSS properties animation code-path.
+ ASSERT(m_animatedProperties.isEmpty());
+ String baseValue;
+
+ if (shouldApply == ApplyCSSAnimation) {
+ ASSERT(SVGAnimationElement::isTargetAttributeCSSProperty(targetElement, attributeName));
+ computeCSSPropertyValue(targetElement, cssPropertyID(attributeName.localName()), baseValue);
+ }
+
+ if (!m_animatedType)
+ m_animatedType = animator->constructFromString(baseValue);
+ else
+ m_animatedType->setValueAsString(attributeName, baseValue);
+}
+
+static inline void applyCSSPropertyToTarget(SVGElement* targetElement, CSSPropertyID id, const String& value)
+{
+ ASSERT(!targetElement->m_deletionHasBegun);
+
+ if (!targetElement->ensureAnimatedSMILStyleProperties().setProperty(id, value, false, 0))
+ return;
+
+ targetElement->setNeedsStyleRecalc(SyntheticStyleChange);
+}
+
+static inline void removeCSSPropertyFromTarget(SVGElement* targetElement, CSSPropertyID id)
+{
+ ASSERT(!targetElement->m_deletionHasBegun);
+ targetElement->ensureAnimatedSMILStyleProperties().removeProperty(id);
+ targetElement->setNeedsStyleRecalc(SyntheticStyleChange);
+}
+
+static inline void applyCSSPropertyToTargetAndInstances(SVGElement* targetElement, const QualifiedName& attributeName, const String& valueAsString)
+{
+ ASSERT(targetElement);
+ if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode())
+ return;
+
+ CSSPropertyID id = cssPropertyID(attributeName.localName());
+
+ SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
+ applyCSSPropertyToTarget(targetElement, id, valueAsString);
+
+ // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
+ const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
+ const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
+ for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
+ if (SVGElement* shadowTreeElement = (*it)->shadowTreeElement())
+ applyCSSPropertyToTarget(shadowTreeElement, id, valueAsString);
+ }
+}
+
+static inline void removeCSSPropertyFromTargetAndInstances(SVGElement* targetElement, const QualifiedName& attributeName)
+{
+ ASSERT(targetElement);
+ if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode())
+ return;
+
+ CSSPropertyID id = cssPropertyID(attributeName.localName());
+
+ SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
+ removeCSSPropertyFromTarget(targetElement, id);
+
+ // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
+ const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
+ const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
+ for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
+ if (SVGElement* shadowTreeElement = (*it)->shadowTreeElement())
+ removeCSSPropertyFromTarget(shadowTreeElement, id);
+ }
+}
+
+static inline void notifyTargetAboutAnimValChange(SVGElement* targetElement, const QualifiedName& attributeName)
+{
+ ASSERT(!targetElement->m_deletionHasBegun);
+ targetElement->svgAttributeChanged(attributeName);
+}
+
+static inline void notifyTargetAndInstancesAboutAnimValChange(SVGElement* targetElement, const QualifiedName& attributeName)
+{
+ ASSERT(targetElement);
+ if (attributeName == anyQName() || !targetElement->inDocument() || !targetElement->parentNode())
+ return;
+
+ SVGElementInstance::InstanceUpdateBlocker blocker(targetElement);
+ notifyTargetAboutAnimValChange(targetElement, attributeName);
+
+ // If the target element has instances, update them as well, w/o requiring the <use> tree to be rebuilt.
+ const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
+ const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
+ for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
+ if (SVGElement* shadowTreeElement = (*it)->shadowTreeElement())
+ notifyTargetAboutAnimValChange(shadowTreeElement, attributeName);
+ }
+}
+
+void SVGAnimateElementBase::clearAnimatedType(SVGElement* targetElement)
+{
+ if (!m_animatedType)
+ return;
+
+ if (!targetElement) {
+ m_animatedType = nullptr;
+ return;
+ }
+
+ if (m_animatedProperties.isEmpty()) {
+ // CSS properties animation code-path.
+ removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
+ m_animatedType = nullptr;
+ return;
+ }
+
+ ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName());
+ if (shouldApply == ApplyXMLandCSSAnimation)
+ removeCSSPropertyFromTargetAndInstances(targetElement, attributeName());
+
+ // SVG DOM animVal animation code-path.
+ if (m_animator) {
+ m_animator->stopAnimValAnimation(m_animatedProperties);
+ notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName());
+ }
+
+ m_animatedProperties.clear();
+ m_animatedType = nullptr;
+}
+
+void SVGAnimateElementBase::applyResultsToTarget()
+{
+ ASSERT(m_animatedPropertyType != AnimatedTransformList || hasTagName(SVGNames::animateTransformTag));
+ ASSERT(m_animatedPropertyType != AnimatedUnknown);
+ ASSERT(m_animator);
+
+ // Early exit if our animated type got destructed by a previous endedActiveInterval().
+ if (!m_animatedType)
+ return;
+
+ SVGElement* targetElement = this->targetElement();
+ const QualifiedName& attributeName = this->attributeName();
+ if (m_animatedProperties.isEmpty()) {
+ // CSS properties animation code-path.
+ // Convert the result of the animation to a String and apply it as CSS property on the target & all instances.
+ applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType->valueAsString());
+ return;
+ }
+
+ // We do update the style and the animation property independent of each other.
+ ShouldApplyAnimation shouldApply = shouldApplyAnimation(targetElement, attributeName);
+ if (shouldApply == ApplyXMLandCSSAnimation)
+ applyCSSPropertyToTargetAndInstances(targetElement, attributeName, m_animatedType->valueAsString());
+
+ // SVG DOM animVal animation code-path.
+ // At this point the SVG DOM values are already changed, unlike for CSS.
+ // We only have to trigger update notifications here.
+ m_animator->animValDidChange(m_animatedProperties);
+ notifyTargetAndInstancesAboutAnimValChange(targetElement, attributeName);
+}
+
+bool SVGAnimateElementBase::animatedPropertyTypeSupportsAddition() const
+{
+ // Spec: http://www.w3.org/TR/SVG/animate.html#AnimationAttributesAndProperties.
+ switch (m_animatedPropertyType) {
+ case AnimatedBoolean:
+ case AnimatedEnumeration:
+ case AnimatedPreserveAspectRatio:
+ case AnimatedString:
+ case AnimatedUnknown:
+ return false;
+ case AnimatedAngle:
+ case AnimatedColor:
+ case AnimatedInteger:
+ case AnimatedIntegerOptionalInteger:
+ case AnimatedLength:
+ case AnimatedLengthList:
+ case AnimatedNumber:
+ case AnimatedNumberList:
+ case AnimatedNumberOptionalNumber:
+ case AnimatedPath:
+ case AnimatedPoints:
+ case AnimatedRect:
+ case AnimatedTransformList:
+ return true;
+ default:
+ RELEASE_ASSERT_NOT_REACHED();
+ return true;
+ }
+}
+
+bool SVGAnimateElementBase::isAdditive() const
+{
+ if (animationMode() == ByAnimation || animationMode() == FromByAnimation) {
+ if (!animatedPropertyTypeSupportsAddition())
+ return false;
+ }
+
+ return SVGAnimationElement::isAdditive();
+}
+
+float SVGAnimateElementBase::calculateDistance(const String& fromString, const String& toString)
+{
+ // FIXME: A return value of float is not enough to support paced animations on lists.
+ SVGElement* targetElement = this->targetElement();
+ if (!targetElement)
+ return -1;
+
+ return ensureAnimator()->calculateDistance(fromString, toString);
+}
+
+void SVGAnimateElementBase::setTargetElement(SVGElement* target)
+{
+ SVGAnimationElement::setTargetElement(target);
+ resetAnimatedPropertyType();
+}
+
+void SVGAnimateElementBase::setAttributeName(const QualifiedName& attributeName)
+{
+ SVGAnimationElement::setAttributeName(attributeName);
+ resetAnimatedPropertyType();
+}
+
+void SVGAnimateElementBase::resetAnimatedPropertyType()
+{
+ ASSERT(!m_animatedType);
+ m_fromType = nullptr;
+ m_toType = nullptr;
+ m_toAtEndOfDurationType = nullptr;
+ m_animator = nullptr;
+ m_animatedPropertyType = targetElement() ? determineAnimatedPropertyType(targetElement()) : AnimatedString;
+}
+
+SVGAnimatedTypeAnimator* SVGAnimateElementBase::ensureAnimator()
+{
+ if (!m_animator)
+ m_animator = SVGAnimatorFactory::create(this, targetElement(), m_animatedPropertyType);
+ ASSERT(m_animatedPropertyType == m_animator->type());
+ return m_animator.get();
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateElementBasehfromrev174049trunkSourceWebCoresvgSVGAnimateElementh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/svg/SVGAnimateElementBase.h (from rev 174049, trunk/Source/WebCore/svg/SVGAnimateElement.h) (0 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateElementBase.h         (rev 0)
+++ trunk/Source/WebCore/svg/SVGAnimateElementBase.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -0,0 +1,86 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) Research In Motion Limited 2011. All rights reserved.
+ * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGAnimateElementBase_h
+#define SVGAnimateElementBase_h
+
+#include "SVGAnimatedType.h"
+#include "SVGAnimatedTypeAnimator.h"
+#include "SVGAnimationElement.h"
+#include "SVGNames.h"
+
+namespace WebCore {
+
+class SVGAnimateElementBase : public SVGAnimationElement {
+public:
+ virtual ~SVGAnimateElementBase();
+
+ AnimatedPropertyType determineAnimatedPropertyType(SVGElement*) const;
+
+protected:
+ SVGAnimateElementBase(const QualifiedName&, Document&);
+
+ virtual void resetAnimatedType() override;
+ virtual void clearAnimatedType(SVGElement* targetElement) override;
+
+ virtual bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) override;
+ virtual bool calculateFromAndToValues(const String& fromString, const String& toString) override;
+ virtual bool calculateFromAndByValues(const String& fromString, const String& byString) override;
+ virtual void calculateAnimatedValue(float percentage, unsigned repeatCount, SVGSMILElement* resultElement) override;
+ virtual void applyResultsToTarget() override;
+ virtual float calculateDistance(const String& fromString, const String& toString) override;
+ virtual bool isAdditive() const override;
+
+ virtual void setTargetElement(SVGElement*) override;
+ virtual void setAttributeName(const QualifiedName&) override;
+
+ AnimatedPropertyType m_animatedPropertyType;
+
+private:
+ void resetAnimatedPropertyType();
+ SVGAnimatedTypeAnimator* ensureAnimator();
+ bool animatedPropertyTypeSupportsAddition() const;
+
+ virtual bool hasValidAttributeType() override;
+
+ std::unique_ptr<SVGAnimatedType> m_fromType;
+ std::unique_ptr<SVGAnimatedType> m_toType;
+ std::unique_ptr<SVGAnimatedType> m_toAtEndOfDurationType;
+ std::unique_ptr<SVGAnimatedType> m_animatedType;
+
+ SVGElementAnimatedPropertyList m_animatedProperties;
+ std::unique_ptr<SVGAnimatedTypeAnimator> m_animator;
+};
+
+SPECIALIZE_TYPE_TRAITS_BEGIN(SVGAnimateElementBase)
+ static bool isSVGAnimateElementBase(const SVGElement& element)
+ {
+ return element.hasTagName(SVGNames::animateTag) || element.hasTagName(SVGNames::animateColorTag)
+ || element.hasTagName(SVGNames::animateTransformTag) || element.hasTagName(SVGNames::setTag);
+ }
+ static bool isSVGAnimateElementBase(const Node& node) { return is<SVGElement>(node) && isSVGAnimateElementBase(downcast<SVGElement>(node)); }
+SPECIALIZE_TYPE_TRAITS_END()
+
+} // namespace WebCore
+
+#endif // SVGAnimateElementBase_h
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateTransformElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> inline SVGAnimateTransformElement::SVGAnimateTransformElement(const QualifiedName& tagName, Document& document)
</span><del>- : SVGAnimateElement(tagName, document)
</del><ins>+ : SVGAnimateElementBase(tagName, document)
</ins><span class="cx"> , m_type(SVGTransform::SVG_TRANSFORM_UNKNOWN)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(hasTagName(SVGNames::animateTransformTag));
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> void SVGAnimateTransformElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
</span><span class="cx"> {
</span><span class="cx"> if (!isSupportedAttribute(name)) {
</span><del>- SVGAnimateElement::parseAttribute(name, value);
</del><ins>+ SVGAnimateElementBase::parseAttribute(name, value);
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateTransformElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateTransformElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateTransformElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimateTransformElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -23,14 +23,14 @@
</span><span class="cx"> #ifndef SVGAnimateTransformElement_h
</span><span class="cx"> #define SVGAnimateTransformElement_h
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGTransform.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class AffineTransform;
</span><span class="cx">
</span><del>-class SVGAnimateTransformElement final : public SVGAnimateElement {
</del><ins>+class SVGAnimateTransformElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx"> static PassRefPtr<SVGAnimateTransformElement> create(const QualifiedName&, Document&);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedAnglecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedAngle.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedAngle.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGMarkerElement.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedBooleancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedBoolean.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedBoolean.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedColorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedColor.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedColor.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedColor.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">
</span><span class="cx"> #include "ColorDistance.h"
</span><span class="cx"> #include "RenderElement.h"
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGColor.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedIntegercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedInteger.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedInteger.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGAnimatedNumber.h"
</span><span class="cx"> #include <wtf/MathExtras.h>
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedIntegerOptionalIntegercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedIntegerOptionalInteger.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedIntegerOptionalInteger.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGAnimatedInteger.h"
</span><span class="cx"> #include "SVGParserUtilities.h"
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLength.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLength.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedLength.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedLength.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGAnimatedNumber.h"
</span><span class="cx"> #include <wtf/NeverDestroyed.h>
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedLengthList.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGAnimatedNumber.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedNumbercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedNumber.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedNumber.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGParserUtilities.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedNumberListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedNumberList.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedNumberList.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGAnimatedNumber.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedNumberOptionalNumbercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedNumberOptionalNumber.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedNumberOptionalNumber.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGAnimatedNumber.h"
</span><span class="cx"> #include "SVGParserUtilities.h"
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPathcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPath.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPath.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedPath.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedPath.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGAnimatedPathSegListPropertyTearOff.h"
</span><span class="cx"> #include "SVGPathUtilities.h"
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPointListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedPointList.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGParserUtilities.h"
</span><span class="cx"> #include "SVGPointList.h"
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPreserveAspectRatiocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedPreserveAspectRatio.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedRectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedRect.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedRect.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedRect.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedRect.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx"> #include "SVGParserUtilities.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedStringcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedString.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedString.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimatedString.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "SVGAnimatedString.h"
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimationElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimationElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimationElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGAnimationElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -507,8 +507,8 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> CalcMode calcMode = this->calcMode();
</span><del>- if (hasTagName(SVGNames::animateTag) || hasTagName(SVGNames::animateColorTag)) {
- AnimatedPropertyType attributeType = downcast<SVGAnimateElement>(*this).determineAnimatedPropertyType(targetElement());
</del><ins>+ if (is<SVGAnimateElement>(*this) || is<SVGAnimateColorElement>(*this)) {
+ AnimatedPropertyType attributeType = downcast<SVGAnimateElementBase>(*this).determineAnimatedPropertyType(targetElement());
</ins><span class="cx"> // Fall back to discrete animations for Strings.
</span><span class="cx"> if (attributeType == AnimatedBoolean
</span><span class="cx"> || attributeType == AnimatedEnumeration
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSetElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSetElement.cpp (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSetElement.cpp        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGSetElement.cpp        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> inline SVGSetElement::SVGSetElement(const QualifiedName& tagName, Document& document)
</span><del>- : SVGAnimateElement(tagName, document)
</del><ins>+ : SVGAnimateElementBase(tagName, document)
</ins><span class="cx"> {
</span><span class="cx"> setAnimationMode(ToAnimation);
</span><span class="cx"> ASSERT(hasTagName(SVGNames::setTag));
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSetElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSetElement.h (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSetElement.h        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/SVGSetElement.h        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -21,12 +21,12 @@
</span><span class="cx"> #ifndef SVGSetElement_h
</span><span class="cx"> #define SVGSetElement_h
</span><span class="cx">
</span><del>-#include "SVGAnimateElement.h"
</del><ins>+#include "SVGAnimateElementBase.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> // SVGAnimateElement implements superset of the functionality.
</span><del>-class SVGSetElement final : public SVGAnimateElement {
</del><ins>+class SVGSetElement final : public SVGAnimateElementBase {
</ins><span class="cx"> public:
</span><span class="cx"> static PassRefPtr<SVGSetElement> create(const QualifiedName&, Document&);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoresvgsvgtagsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/svgtags.in (174049 => 174050)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/svgtags.in        2014-09-29 01:52:42 UTC (rev 174049)
+++ trunk/Source/WebCore/svg/svgtags.in        2014-09-29 02:13:41 UTC (rev 174050)
</span><span class="lines">@@ -3,26 +3,26 @@
</span><span class="cx"> fallbackInterfaceName="SVGUnknownElement"
</span><span class="cx"> fallbackJSInterfaceName="SVGElement"
</span><span class="cx">
</span><del>-a generateTypeHelpers
</del><ins>+a
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-altGlyph generateTypeHelpers
-altGlyphDef generateTypeHelpers
-altGlyphItem generateTypeHelpers
</del><ins>+altGlyph
+altGlyphDef
+altGlyphItem
</ins><span class="cx"> #endif
</span><span class="cx"> animate
</span><span class="cx"> animateColor
</span><del>-animateMotion generateTypeHelpers
-animateTransform generateTypeHelpers
</del><ins>+animateMotion
+animateTransform
</ins><span class="cx"> set
</span><del>-circle generateTypeHelpers
-clipPath generateTypeHelpers
</del><ins>+circle
+clipPath
</ins><span class="cx"> #if 0
</span><span class="cx"> color_profile
</span><span class="cx"> #endif
</span><del>-cursor generateTypeHelpers
</del><ins>+cursor
</ins><span class="cx"> defs
</span><span class="cx"> desc
</span><del>-ellipse generateTypeHelpers
</del><ins>+ellipse
</ins><span class="cx"> feBlend
</span><span class="cx"> feColorMatrix
</span><span class="cx"> feComponentTransfer
</span><span class="lines">@@ -30,69 +30,69 @@
</span><span class="cx"> feConvolveMatrix
</span><span class="cx"> feDiffuseLighting
</span><span class="cx"> feDisplacementMap
</span><del>-feDistantLight generateTypeHelpers
</del><ins>+feDistantLight
</ins><span class="cx"> feDropShadow
</span><span class="cx"> feFlood
</span><del>-feFuncA generateTypeHelpers
-feFuncB generateTypeHelpers
-feFuncG generateTypeHelpers
-feFuncR generateTypeHelpers
</del><ins>+feFuncA
+feFuncB
+feFuncG
+feFuncR
</ins><span class="cx"> feGaussianBlur
</span><span class="cx"> feImage
</span><span class="cx"> feMerge
</span><del>-feMergeNode generateTypeHelpers
</del><ins>+feMergeNode
</ins><span class="cx"> feMorphology
</span><span class="cx"> feOffset
</span><del>-fePointLight generateTypeHelpers
</del><ins>+fePointLight
</ins><span class="cx"> feSpecularLighting
</span><del>-feSpotLight generateTypeHelpers
</del><ins>+feSpotLight
</ins><span class="cx"> feTile
</span><span class="cx"> feTurbulence
</span><del>-filter generateTypeHelpers
</del><ins>+filter
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-font generateTypeHelpers
-font_face generateTypeHelpers
</del><ins>+font
+font_face
</ins><span class="cx"> font_face_format
</span><del>-font_face_name generateTypeHelpers
-font_face_src generateTypeHelpers
-font_face_uri generateTypeHelpers
</del><ins>+font_face_name
+font_face_src
+font_face_uri
</ins><span class="cx"> #endif
</span><del>-foreignObject generateTypeHelpers
-g generateTypeHelpers
</del><ins>+foreignObject
+g
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-glyph generateTypeHelpers
-glyphRef generateTypeHelpers
-hkern interfaceName=SVGHKernElement, generateTypeHelpers
</del><ins>+glyph
+glyphRef
+hkern interfaceName=SVGHKernElement
</ins><span class="cx"> #endif
</span><del>-image generateTypeHelpers
-line generateTypeHelpers
-linearGradient generateTypeHelpers
-marker generateTypeHelpers
-mask generateTypeHelpers
</del><ins>+image
+line
+linearGradient
+marker
+mask
</ins><span class="cx"> metadata
</span><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-missing_glyph generateTypeHelpers
</del><ins>+missing_glyph
</ins><span class="cx"> #endif
</span><del>-mpath interfaceName=SVGMPathElement, generateTypeHelpers
-path generateTypeHelpers
-pattern generateTypeHelpers
-polygon generateTypeHelpers
-polyline generateTypeHelpers
-radialGradient generateTypeHelpers
-rect generateTypeHelpers
-script constructorNeedsCreatedByParser, generateTypeHelpers
-stop generateTypeHelpers
-style constructorNeedsCreatedByParser, generateTypeHelpers
-svg interfaceName=SVGSVGElement, generateTypeHelpers
</del><ins>+mpath interfaceName=SVGMPathElement
+path
+pattern
+polygon
+polyline
+radialGradient
+rect
+script constructorNeedsCreatedByParser
+stop
+style constructorNeedsCreatedByParser
+svg interfaceName=SVGSVGElement
</ins><span class="cx"> switch
</span><span class="cx"> symbol
</span><del>-text generateTypeHelpers
-textPath generateTypeHelpers
-title generateTypeHelpers
</del><ins>+text
+textPath
+title
</ins><span class="cx"> tref interfaceName=SVGTRefElement
</span><span class="cx"> tspan interfaceName=SVGTSpanElement
</span><del>-use constructorNeedsCreatedByParser, generateTypeHelpers
-view generateTypeHelpers
</del><ins>+use constructorNeedsCreatedByParser
+view
</ins><span class="cx"> #if ENABLE_SVG_FONTS
</span><del>-vkern interfaceName=SVGVKernElement, generateTypeHelpers
</del><ins>+vkern interfaceName=SVGVKernElement
</ins><span class="cx"> #endif
</span></span></pre>
</div>
</div>
</body>
</html>