OSDN Git Service

Support the additive attribute for the animateTransform element
authordhrname <dhrname@users.sourceforge.jp>
Thu, 3 Mar 2016 14:22:22 +0000 (23:22 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Thu, 3 Mar 2016 14:22:22 +0000 (23:22 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index ed08b45..75dc0a0 100644 (file)
@@ -1413,12 +1413,18 @@ base("$calcMode").up("$attribute").mix( {
    /*type属性の値*/\r
    type: "translate",\r
    \r
+   /*additive属性がsumなら真*/\r
+   isAdditive: false,\r
+   \r
    /*$animateElementオブジェクトのtocallメソッドをオーバライド*/\r
    tocall: function (advance) {\r
      if (this.numberOfList < 0) {\r
        throw new Error("Number of The List Error");\r
      }\r
-     this.element.__transformList[this.numberOfList] = this.type+ "(" +this.$animateElement.tocall.call(this, advance)+ ")";\r
+     if (this.isAdditive\r
+      || (this.numberOfList === (this.element.__transformList.length - 1) )) {\r
+       this.element.__transformList[this.numberOfList] = this.type+ "(" +this.$animateElement.tocall.call(this, advance)+ ")";\r
+     }\r
      var d = this.defaultValue;\r
      d = d && (d + " ");\r
      return d + this.element.__transformList.join(" ");\r
@@ -1432,6 +1438,7 @@ base("$calcMode").up("$attribute").mix( {
    var parent = this.element;\r
    this.isDefault = parent.hasAttributeNS(null, "transform");\r
    this.defaultValue = parent.getAttributeNS(null, "transform") || "";\r
+   this.isAdditive = (parent.getAttributeNS(null, "additive") === "sum");\r
    if (!parent.__transformList) {\r
      parent.__transformList = [];\r
    }\r
index a8063df..cb214ea 100644 (file)
@@ -2595,7 +2595,27 @@ describe("SMIL Animation Spec", function() {
           expect($animate.tocall(0.5)).toBe("scale(0.5)");\r
           expect($animate.tocall(0.9)).toBe("scale(0.9)");\r
           expect($animate.tocall(1)).toBe("scale(1.0)");\r
+\r
+          ele.parentNode.appendChild(ele.cloneNode(true));\r
+          $animate.numberOfList = -1;\r
+          $animate.init(ele.parentNode.lastChild);\r
+          expect($animate.numberOfList).toBe(1);\r
+          expect($animate.tocall(0)).toBe("scale(0.0)");\r
+          expect($animate.tocall(1)).toBe("scale(1.0)");\r
+          \r
+          ele.parentNode.appendChild(ele.cloneNode(true));\r
+          $animate.up("$a").numberOfList = -1;\r
+          ele.parentNode.setAttribute("transform", "matrix(0 0 0 0 0 0)");\r
+          $animate.$a.init(ele.parentNode.lastChild);\r
+          expect($animate.$a.numberOfList).toBe(2);\r
+          expect($animate.$a.isDefault).toBeTruthy();\r
+          expect($animate.$a.defaultValue).toBe("matrix(0 0 0 0 0 0)");\r
+          expect($animate.$a.tocall(0)).toBe("scale(0.0)");\r
+          expect($animate.$a.tocall(1)).toBe("scale(1.0)");\r
+          $animate.defaultValue = $animate.$a.defaultValue;\r
+          expect($animate.tocall(0.1)).toBe("scale(1.0)");\r
           \r
+          ele.setAttributeNS(null, "additive", "sum");\r
           ele.parentNode.appendChild(ele.cloneNode(true));\r
           $animate.numberOfList = -1;\r
           $animate.init(ele.parentNode.lastChild);\r