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