[Sie-announce] SIEコード [2136] animate要素の実装開始

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 11月 11日 (木) 23:46:59 JST


Revision: 2136
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2136
Author:   dhrname
Date:     2010-11-11 23:46:59 +0900 (Thu, 11 Nov 2010)

Log Message:
-----------
animate要素の実装開始

Modified Paths:
--------------
    branches/06x/063/org/w3c/dom/svg.js

Modified: branches/06x/063/org/w3c/dom/svg.js
===================================================================
--- branches/06x/063/org/w3c/dom/svg.js	2010-11-11 14:30:42 UTC (rev 2135)
+++ branches/06x/063/org/w3c/dom/svg.js	2010-11-11 14:46:59 UTC (rev 2136)
@@ -4746,45 +4746,36 @@
        *この_valueListプロパティはアニメの際に使うので、_valuesプロパティはアニメ中に使わない
        */
       if (!!tta) {
-        var base = tta.baseVal;
         for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {
-          if (base instanceof SVGLength) {
-            tta.baseVal = tar.ownerDocument.documentElement.createSVGLength();
-          } else if (base instanceof SVGRect) {
-            tta.baseVal = tar.ownerDocument.documentElement.createSVGRect();
-          } else {
-            return;
-          }
-          ttr.setAttributeNS(null, attrName, tav[i]);
-          tar._valueList[tar._valueList.length] = tta.baseVal;
+          var vir = ttr.cloneNode(false); //仮の要素
+          vir.setAttributeNS(null, attrName, tav[i]);
+          tar._valueList[tar._valueList.length] = vir.baseVal;
         }
-        tta.baseVal = base;
+      } else if (!!CSS2Properties[attrName] || attrName.indexOf("-") > -1) { //スタイルシートのプロパティならば
+        tar._valueList = tar._value;
       } else if ("animatedPoints" in ttr) {
-        var base = ttr.points;
         for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {
-          ttr.points = new SVGPointList();
-          ttr.setAttributeNS(null, "points", tav[i]);
-          tar._valueList[tar._valueList.length] = ttr.points;
+          var vir = ttr.cloneNode(false); //仮の要素
+          vir.setAttributeNS(null, "points", tav[i]);
+          tar._valueList[tar._valueList.length] = vir.points;
         }
-        ttr.points = base;
       } else if ("normalizedPathSegList" in ttr) {
-        var base = ttr.normalizedPathSegList;
         for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {
-          ttr.normalizedPathSegList = new PathSegList();
-          ttr.setAttributeNS(null, "d", tav[i]);
-          tar._valueList[tar._valueList.length] = ttr.normalizedPathSegList;
+          var vir = ttr.cloneNode(false); //仮の要素
+          vir.setAttributeNS(null, "d", tav[i]);
+          tar._valueList[tar._valueList.length] = vir.normalizedPathSegList;
         }
-        ttr.normalizedPathSegList = base;
       } else {
         return;
       }
-      tta  = null;
+      evt = tta = vir  = null;
     }, false);
   }, false);
   this.addEventListener("beginEvent", function(evt) {
     var tar = evt.target;
     var attrName = tar.getAttributeNS(null, "attributeName"), newAttr = tar.targetElement.attributes.getNamedItemNS(null, attrName);
-    var tta = tar.targetElement[attrName];
+    var ttr = tar.targetElement, tta = ttr[attrName];
+    var vir = ttr.cloneNode(false), vta = vir[attrName];
     tar._frame = function() {
       var d = tar.getSimpleDuration(), n = tar._values.length - 1;
       if ((n !== -1) && (d !== 0)) {
@@ -4792,29 +4783,52 @@
       } else {
         return;
       }
+      var ii = Math.floor(tar.getCurrentTime() * ntd);
       if (!!tta) {
         var base = tta.baseVal;
-        var ii = Math.floor(tar.getCurrentTime() * ntd);
-        /*setAttrbute(NS)メソッドはDOM属性を書き換えるため利用しない。
-         *
-         * 参照:アニメーションサンドイッチモデル
-         * >アニメーションが起動している時,それは実際,DOMの中の属性値は変化しない。
-         *http://www.jsa.or.jp/stdz/instac/syoukai/H13/H13annual_report/12/ngc-wg3/offline/smil_20_20020131/animation.html#animationNS-AnimationSandwichModel
-         */
-        var evt = tar.ownerDocument.createEvent("MutationEvents");
-        evt.initMutationEvent("DOMAttrModified", true, false, newAttr, newAttr, tar._to, attrName, MutationEvent.MODIFICATION);
-        tar.targetElement.dispatchEvent(evt);
-        evt = null;
-        /*変化値はanimValプロパティに収納しておき、
-         *変化する前の、元の値はbaseValプロパティに再び収納しておく
-         */
-        tta.animVal = tta.baseVal;
-        tta.baseVal = base;
+        tta.baseVal = vta;
+      } else if (!!CSS2Properties[attrName] || attrName.indexOf("-") > -1) { //スタイルシートのプロパティならば
+        var base = null;
+      } else if ("animatedPoints" in ttr) {
+        var base = tta.points;
+        tta.points = vta;
+      } else if ("normalizedPathSegList" in ttr) {
+        var base = tta.normalizedPathSegList;
+        tta.normalizedPathSegList = vta;
       }
+      /*setAttrbute(NS)メソッドはDOM属性を書き換えるため利用しない。
+      *
+      * 参照:アニメーションサンドイッチモデル
+      * >アニメーションが起動している時,それは実際,DOMの中の属性値は変化しない。
+      *http://www.jsa.or.jp/stdz/instac/syoukai/H13/H13annual_report/12/ngc-wg3/offline/smil_20_20020131/animation.html#animationNS-AnimationSandwichModel
+      */
+     var evt = tar.ownerDocument.createEvent("MutationEvents");
+     evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
+     ttr.dispatchEvent(evt);
+     evt = null;
+     if (!!tta) {
+       /*変化値はanimValプロパティに収納しておき、
+        *変化する前の、元の値はbaseValプロパティに再び収納しておく
+        */
+       tta.animVal = tta.baseVal;
+       tta.baseVal = base;
+     } else if (!base) { //スタイルシートのプロパティならば
+     } else if ("animatedPoints" in ttr) {
+       tta.animatedPoints = tta.points;
+       tta.points = base;
+     } else if ("normalizedPathSegList" in ttr) {
+       tta.animatednormalizedPathSegList = tta.normalizedPathSegList;
+       tta.normalizedPathSegList = base;
+     }
     };
+    evt = vir = null;
   }, false);
   this.addEventListener("endEvent", function(evt) {
     var tar = evt.target;
+    var evt = tar.ownerDocument.createEvent("MutationEvents");
+    evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
+    tar.targetElement.dispatchEvent(evt);
+    evt = null;
   }, false);
   this.addEventListener("repeatEvent", function(evt) {
     var tar = evt.target;




Sie-announce メーリングリストの案内
Back to archive index