[Sie-announce] SIEコード [2772] animteMotion要素の実装を改良して、バグの修正を開始

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 6月 16日 (木) 23:22:28 JST


Revision: 2772
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2772
Author:   dhrname
Date:     2011-06-16 23:22:28 +0900 (Thu, 16 Jun 2011)

Log Message:
-----------
animteMotion要素の実装を改良して、バグの修正を開始

Modified Paths:
--------------
    branches/08x/080/org/w3c/dom/svg.js

Modified: branches/08x/080/org/w3c/dom/svg.js
===================================================================
--- branches/08x/080/org/w3c/dom/svg.js	2011-06-14 11:31:16 UTC (rev 2771)
+++ branches/08x/080/org/w3c/dom/svg.js	2011-06-16 14:22:28 UTC (rev 2772)
@@ -5435,8 +5435,27 @@
       d = null;
     }
   }, false);
+  this.addEventListener("DOMNodeInserted", function(evt){
+    if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {
+      return; //強制終了させる
+    }
+    var tar = evt.target;
+    tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
+      var vlist = [],
+          ti;
+      if (tar._values) {
+        for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {
+          ti = tav[i];
+          ti = ti.split(",");
+          vlist[i] = [+ti[0], +ti[1]];
+        }
+        tar._valueList = vlist;
+      }
+    }, false);
+  }, false);
   this.addEventListener("beginEvent", function(evt) {
-    var tar = evt.target, trans = tar.targetElement.transform;
+    var tar = evt.target,
+        trans = tar.targetElement.transform;
     /*アニメーション中に変化すべき値をanimValプロパティに入力して、
      *baseValと同じような値に設定。
      */
@@ -5446,15 +5465,17 @@
       }
     trans.animVal.appendItem(tar.ownerDocument.documentElement.createSVGTransform());
     tar._frame = function() {
-      var _tar = tar, tpn = _tar._path;
-      if (!!tpn) { //path属性が指定されていた場合、tpnは属性値となる
-        var tgsd = _tar.getSimpleDuration();
-        if (tgsd === 0) {
-          tgsd = null;
-          return;
-        }
-        var st = (tpn.getTotalLength() / tgsd) * _tar.getCurrentTime() / 125 * 0.8;
-        var p = tpn.getPointAtLength(st), trans = _tar.targetElement.transform;
+      var _tar = tar,
+           tpn = _tar._path,
+           tgsd = _tar.getSimpleDuration();
+      if (tgsd === 0) {
+         tgsd = null;
+         return;
+      }
+      if (tpn) { //path属性が指定されていた場合、tpnは属性値となる
+        var st = (tpn.getTotalLength() / tgsd) * _tar.getCurrentTime() / 125 * 0.8,
+            p = tpn.getPointAtLength(st),
+            trans = _tar.targetElement.transform;
         p = p.matrixTransform(_tar.targetElement.getScreenCTM());
         trans.animVal.getItem(trans.animVal.numberOfItems-1).setTranslate(p.x, p.y);
         var base = trans.baseVal;
@@ -5463,11 +5484,27 @@
         evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
         _tar.targetElement.dispatchEvent(evtt);
         trans.baseVal = base;
-        evtt = base = trans = st = tgsd = p = null;
-      } else {
+        evtt = base = trans = st = p = null;
+      } else if (tar._valueList) {
+        var total = 0;
+        for (var i=1, tav=tar._valueList, tvli=tav.length;i<tvli;i+=2) {
+          total += Math.sqrt(Math.pow(tav[i][1] - tav[i][0], 2) + Math.pow(tav[i-1][1] - tav[i-1][0], 2));
+        }       
+        var st = (total / tgsd) * _tar.getCurrentTime() / 125 * 0.8,
+            p = tar.ownerDocument.documentElement.createSVGPoint(),
+            trans = _tar.targetElement.transform;
+        p = p.matrixTransform(_tar.targetElement.getScreenCTM());
+        trans.animVal.getItem(trans.animVal.numberOfItems-1).setTranslate(p.x, p.y);
+        var base = trans.baseVal;
+        trans.baseVal = trans.animVal;
+        var evtt = _tar.ownerDocument.createEvent("MutationEvents");
+        evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
+        _tar.targetElement.dispatchEvent(evtt);
+        trans.baseVal = base;
+        evtt = base = trans = st = p = null;
       }
     }
-    evt = trans = null;
+    evt = trans = tpn = tgsd = null;
   }, false);
   this.addEventListener("endEvent", function(evt) {
     var tar = evt.target, trans = tar.targetElement.transform;




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