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