[Sie-announce] SIEコード [2387] 0. 70のモジュールを結合

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2011年 2月 12日 (土) 23:33:48 JST


Revision: 2387
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2387
Author:   dhrname
Date:     2011-02-12 23:33:48 +0900 (Sat, 12 Feb 2011)

Log Message:
-----------
0.70のモジュールを結合

Modified Paths:
--------------
    branches/07x/sie.js

Modified: branches/07x/sie.js
===================================================================
--- branches/07x/sie.js	2011-02-12 14:28:37 UTC (rev 2386)
+++ branches/07x/sie.js	2011-02-12 14:33:48 UTC (rev 2387)
@@ -1,4 +1,4 @@
-/*SIE-SVG without Plugin under LGPL2.1 & GPL2.0 & Mozilla Public Lisence
+/*SIE-SVG without Plugin under LGPL2.1 & GPL2.0 & Mozilla Public Lisence
  *公式ページは http://sie.sourceforge.jp/
  *利用方法は <script defer="defer" type="text/javascript" src="sie.js"></script>
  *http://sie.sourceforge.jp/
@@ -1076,6 +1076,9 @@
     throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR);
   }
   if (!this.ownerDocument._isLoaded) {
+    /*以下では、画像の処理に時間がかかりそうな場合、処理落ちとして、遅延処理
+     *を行い、バッファリングにイベント送付処理をためていく作業となる
+     */
     if (evt.type === "SVGLoad") {
       this.ownerDocument._isLoaded = 1;
     }
@@ -1125,7 +1128,7 @@
     evt.eventPhase = type;
     var tce = td._capter; //tceは登録しておいたリスナーのリスト
     for (var j=0,tcli=tce.length;j<tcli;++j){
-      if (tce[j]) {
+      if (tce[j] && (evt.type === tce[j]._type)) {
         tce[j].handleEvent(evt);
       }
     }
@@ -1174,7 +1177,6 @@
  *イベントの雛形となる。プロパティもすべて含めて、必須
  */
 function Event() {
-  /*DOMTimeStamp*/     this.timeStamp = +(new Date());
   return this;
 };
 // PhaseType
@@ -1182,6 +1184,7 @@
 /*unsigned short*/ Event.AT_TARGET         = 2;
 /*unsigned short*/ Event.BUBBLING_PHASE    = 3;
 Event.prototype = {
+  /*DOMTimeStamp*/     timeStamp : 0,
   /*DOMString*/        type : null,
   /*EventTarget*/      target : null,
   /*EventTarget*/      currentTarget : null,
@@ -1208,6 +1211,10 @@
 function DocumentEvent() {
   return this;
 }*/
+/*_date_プロパティは、createEventメソッドで使われるために、
+ *あらかじめ、Dateオブジェクトを作成しておいて、それを入れるプロパティ
+ */
+Document.prototype._date_ = new Date();
 /*Event*/ Document.prototype.createEvent = function( /*string*/ eventType) {
   var evt;
   if (eventType === "MutationEvents") {
@@ -1224,6 +1231,7 @@
     evt =  new Event();
   }
   evt.type = eventType;
+  evt.timeStamp = this._date_.getTime();
   return evt;
 };
 
@@ -1402,7 +1410,6 @@
   }
   var descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得
   if (descend) {
-    evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
     for (var i=0,dli=descend.length;i<dli;++i) {
       var di = descend[i];
       di.dispatchEvent(evt);
@@ -2796,11 +2803,11 @@
 };
 
 function SVGStringList() {
-  /*readonly unsigned long*/ this.numberOfItems = 0;
   this._list = []; //リストの本体
   return this;
 };
 SVGStringList.prototype = {
+  /*readonly unsigned long*/ numberOfItems : 0,
   /*void*/   clear : function(){
     this._list = [];
     this.numberOfItems = 0;
@@ -2874,7 +2881,6 @@
 };
 
 function SVGNumberList() {
-  /*readonly unsigned long*/ this.numberOfItems = 0;
   this._list = []; //リストの本体
   return this;
 };
@@ -2969,7 +2975,6 @@
   return this;
 };
 function SVGLengthList() {
-  /*readonly unsigned long*/ this.numberOfItems = 0;
   this._list = []; //リストの本体
   return this;
 };
@@ -4105,6 +4110,7 @@
       } else {
         /*全要素の読み込みが終了した場合*/
         if (s.implementation._buffer_) {
+          screen.updateInterval = 0;
           /*以下はバッファリングにためておいた要素とイベントを、後から実行する*/
           NAIBU._buff = setInterval(function(){
             if (DOMImplementation._buffer_.length === 0) {
@@ -4117,13 +4123,16 @@
               if (!DOMImplementation._buffer_[1]) {
                 clearInterval(NAIBU._buff);
                 DOMImplementation._buffer_ = null;
+                NAIBU.Time.start();
                 return;
               }
             }
           }, 1);
+          s = null;
+        } else {
+          s = null;
+          NAIBU.Time.start();
         }
-        s = null;
-        NAIBU.Time.start();
         delete NAIBU.doc;
       }
     }
@@ -4170,7 +4179,6 @@
 };
 
 function SVGPointList() { 
-  /*readonly unsigned long*/ this.numberOfItems = 0;
   this._list = [];
   return this;
 };
@@ -4311,9 +4319,7 @@
 };
 
 function SVGTransform() { 
-  /*readonly unsigned short*/ this.type = SVGTransform.SVG_TRANSFORM_UNKNOWN;
   /*readonly SVGMatrix*/ this.matrix = new SVGMatrix();
-  /*readonly float*/ this.angle = 0;
   return this;
 };
     // Transform Types
@@ -4325,39 +4331,42 @@
   /*unsigned short*/ SVGTransform.SVG_TRANSFORM_SKEWX     = 5;
   /*unsigned short*/ SVGTransform.SVG_TRANSFORM_SKEWY     = 6;
 SVGTransform.prototype = {
+  /*ダミーの単位行列。各メソッドで使う*/
+  _matrix : (new SVGMatrix()),
+  /*readonly unsigned short*/ type : SVGTransform.SVG_TRANSFORM_UNKNOWN,
+  /*readonly float*/ angle : 0,
   /*void*/ setMatrix : function(/*SVGMatrix*/ matrix ) {
     this.type = SVGTransform.SVG_TRANSFORM_MATRIX;
-    this.matrix = this.matrix.multiply(matrix);
+    this.matrix = this._matrix.multiply(matrix);
   },
   /*void*/ setTranslate : function(/*float*/ tx, /*float*/ ty ) {
     this.type = SVGTransform.SVG_TRANSFORM_TRANSLATE;
-    this.matrix = this.matrix.translate(tx, ty);
+    this.matrix = this._matrix.translate(tx, ty);
   },
   /*void*/ setScale : function(/*float*/ sx, /*float*/ sy ) {
     this.type = SVGTransform.SVG_TRANSFORM_SCALE;
-    this.matrix = this.matrix.scaleNonUniform(sx, sy);
+    this.matrix = this._matrix.scaleNonUniform(sx, sy);
   },
   /*void*/ setRotate : function(/*float*/ angle, /*float*/ cx, /*float*/ cy ) {
     this.angle = angle;
     this.type = SVGTransform.SVG_TRANSFORM_ROTATE;
-    this.matrix = this.matrix.rotate(angle);
+    this.matrix = this._matrix.rotate(angle);
     this.matrix.e = (1-this.matrix.a)*cx - this.matrix.c*cy;
     this.matrix.f = -this.matrix.b*cx + (1-this.matrix.d)*cy;
   },
   /*void*/ setSkewX : function(/*float*/ angle ) {
     this.angle = angle;
     this.type = SVGTransform.SVG_TRANSFORM_SKEWX;
-    this.matrix = this.matrix.skewX(angle);
+    this.matrix = this._matrix.skewX(angle);
   },
   /*void*/ setSkewY : function(/*float*/ angle ) {
     this.angle = angle;
     this.type = SVGTransform.SVG_TRANSFORM_SKEWY;
-    this.matrix = this.matrix.skewY(angle);
+    this.matrix = this._matrix.skewY(angle);
   }
 };
 
 function SVGTransformList() { 
-  /*readonly unsigned long*/ this.numberOfItems = 0;
   this._list = [];
   return this;
 };
@@ -4373,10 +4382,11 @@
   if(this.numberOfItems === 0) {
     return null;
   } else {
-    var s = this.getItem(0);
+    var s = this.getItem(0), m = s.matrix;
     for (var i=1,nli=this.numberOfItems;i<nli;++i) {
-      s.setMatrix(this.getItem(i).matrix)
+      m = m.multiply(this.getItem(i).matrix);
     }
+    s.setMatrix(m);
     this.initialize(s);
     return s;
   }
@@ -4615,7 +4625,6 @@
   return this;
 };
 function SVGPathSegList() {
-  /*readonly unsigned long*/ this.numberOfItems = 0;
   this._list = []; //リストの本体
   return this;
 };
@@ -4780,7 +4789,7 @@
        * 
        *SVG1.1 「8.3.9 The grammar for path data」の項目にある最後の文章を参照
        */
-      var tnl = tar.normalizedPathSegList, tlist = tar.pathSegList, D = [], _parseFloat = parseFloat;
+      var tnl = tar.normalizedPathSegList, tlist = tar.pathSegList, D = [];
       if (tnl.numberOfItems > 0) {
         tnl.clear();
         tlist.clear();
@@ -4800,7 +4809,7 @@
       for (var i=0, dli=dd.length;i<dli;++i) {
         D[i] = dd[i].match(sgs);
         for (var j=1, dili=D[i].length;j<dili;++j) {
-          D[i][j] = _parseFloat(D[i][j]); //_parseFloatは高速化のためのAlias
+          D[i][j] = (D[i][j]) | 0;
         }
       }
       sgs = dd = null;
@@ -4870,14 +4879,14 @@
       /*以下の処理は、pathSegListからnormalizedPathSegListへの
        *変換をする処理。相対座標を絶対座標に変換して、M、L、Cコマンドに正規化していく
        */
-      var cx = 0, cy = 0; //現在セグメントの終了点の絶対座標を示す (相対座標を絶対座標に変換するときに使用)
-      var xn = 0, yn = 0; //T,tコマンドで仮想的な座標を算出するのに用いる。第一コントロール点
+      var cx = 0, cy = 0;         //現在セグメントの終了点の絶対座標を示す (相対座標を絶対座標に変換するときに使用)
+      var xn = 0, yn = 0;         //T,tコマンドで仮想的な座標を算出するのに用いる。第一コントロール点
       var startx = 0, starty = 0; //M,mコマンドにおける始点座標(Z,zコマンドで用いる)
       for (var j=0, tli=tlist.numberOfItems;j<tli;++j) {
         var ti = tlist.getItem(j), ts = ti.pathSegType, dii = ti.pathSegTypeAsLetter;
         if (ts === SVGPathSeg.PATHSEG_UNKNOWN) {
         } else {
-          var rx = cx, ry = cy; //rx, ryは前のセグメントの終了点
+          var rx = cx, ry = cy;   //rx, ryは前のセグメントの終了点
           if (ts % 2 === 1) {     //相対座標ならば
             cx += ti.x;
             cy += ti.y;
@@ -4935,7 +4944,7 @@
             tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*x1) / 3, (ry + 2*y1) / 3, (2*x1 + cx) / 3, (2*y1 + cy) / 3));
             x1 = y1 = null;
           } else if (dii === "A" || dii === "a") {
-            (function(ti, cx, cy, rx, ry, tar, tnl) {            //変数を隠蔽するためのfunction
+            (function(ti, cx, cy, rx, ry, tar, tnl) { //変数を隠蔽するためのfunction
               /*以下は、Arctoを複数のCuvetoに変換する処理
                *SVG 1.1 「F.6 Elliptical arc implementation notes」の章を参照
                *http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
@@ -5688,33 +5697,26 @@
     tnext = tpar = null;
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
       var tar = evt.target;
-      var list = ["m", tar.x1.baseVal.value, tar.y1.baseVal.value, "l", tar.x2.baseVal.value, tar.y2.baseVal.value];
       //以下は、配列listそのものをCTMで座標変換していく処理
-      var par = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
-      for (var i=0, lili=list.length;i<lili;) {
-        if (isNaN(list[i])) { //コマンド文字は読み飛ばす
-          ++i;
-          continue;
-        }
-        var p = par.createSVGPoint();
-        p.x = list[i];
-        p.y = list[i+1];
-        var pmt = p.matrixTransform(ctm);
-        list[i] = pmt.x;
-        ++i;
-        list[i] = pmt.y;
-        ++i;
-        p = pmt = null;
-      }
-      var dat = list.join(" ");
+      var vi = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
+      var dat = "m ";
+      var p = vi.createSVGPoint();
+      p.x = tar.x1.baseVal.value;
+      p.y = tar.y1.baseVal.value;
+      var pmt = p.matrixTransform(ctm);
+      dat += pmt.x+ " " +pmt.y+ " l ";
+      p.x = tar.x2.baseVal.value;
+      p.y = tar.y2.baseVal.value;
+      pmt = p.matrixTransform(ctm);
+      dat += pmt.x+ " " +pmt.y;
+      p = pmt = null;
       //VMLに結び付けていく
-      var ele = tar._tar, vi = tar.ownerDocument.documentElement;
-      var w = vi.width.baseVal.value, h = vi.height.baseVal.value;
+      var ele = tar._tar, w = vi.width.baseVal.value, h = vi.height.baseVal.value;
       ele.path = dat;
       ele.coordsize = w + " " + h;
       NAIBU._setPaint(tar, ctm);
       delete tar._cacheMatrix, tar._currentStyle;
-      evt = ele = tar = dat = list = ctm = w = h = null;
+      evt = ele = tar = dat = list = ctm = vi = w = h = null;
     }, false);
     evt = tar = null;
   }, false);
@@ -6309,7 +6311,7 @@
           } else if ((ti.localName === "a") && (ti.namespaceURI === "http://www.w3.org/2000/svg") && ti.firstChild) {
             ttp = ti._tar;
             ti = ti.firstChild;
-            --i;
+            i-=2;
           }
         }
       }
@@ -8242,4 +8244,4 @@
 };
 NAIBU.addEvent("unload", unsvgtovml);
 //IEならばtrue
-NAIBU.isMSIE = /*@cc_on!@*/false;
+NAIBU.isMSIE = /*@cc_on!@*/false;
\ No newline at end of file




Sie-announce メーリングリストの案内
アーカイブの一覧に戻る