svnno****@sourc*****
svnno****@sourc*****
2010年 7月 11日 (日) 22:00:37 JST
Revision: 1935
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1935
Author: dhrname
Date: 2010-07-11 22:00:37 +0900 (Sun, 11 Jul 2010)
Log Message:
-----------
path要素のアルゴリズムを高速化できるように改良
Modified Paths:
--------------
branches/06x/061/org/w3c/dom/svg.js
Modified: branches/06x/061/org/w3c/dom/svg.js
===================================================================
--- branches/06x/061/org/w3c/dom/svg.js 2010-07-09 14:26:52 UTC (rev 1934)
+++ branches/06x/061/org/w3c/dom/svg.js 2010-07-11 13:00:37 UTC (rev 1935)
@@ -2276,47 +2276,40 @@
*SVGのd属性をVMLに変換していく処理である。
*/
var tar = evt.target, matrix = tar.getScreenCTM(), tlist = tar.normalizedPathSegList, _parseInt = parseInt;
- var dat = "", ma = matrix.a, mb = matrix.b, mc = matrix.c, md = matrix.d, me = matrix.e, mf = matrix.f;
+ var dat = [], ma = matrix.a, mb = matrix.b, mc = matrix.c, md = matrix.d, me = matrix.e, mf = matrix.f;
for (var i=0, tli=tlist.numberOfItems;i<tli;++i) {
var ti = tlist.getItem(i), tps = ti.pathSegTypeAsLetter;
+ /*IE6の高速化のために、以下では、x += "";のような文字連結ではなくて、
+ *x[data.length] = "";という形をとった
+ */
if (tps === "z" || tps === "Z") {
- dat += " x ";
+ dat[dat.length] = " x ";
} else {
if (tps === "M") {
- dat += "m";
+ dat[dat.length] = "m";
} else if (tps === "L") {
- dat += "l";
+ dat[dat.length] = "l";
} else if (tps === "C") {
- dat += "c";
+ dat[dat.length] = "c";
/*CTM(mx)の行列と座標(x, y)の積を算出する。数学における表現は以下のとおり
*[ma mc me] [x]
*[mb md mf] * [y]
*[0 0 1 ] [1]
*/
- var x = _parseInt(ma*ti.x1 + mc*ti.y1 + me, 10);
- var y = _parseInt(mb*ti.x1 + md*ti.y1 + mf, 10);
- x += " ";
- y += " ";
- dat += x;
- dat += y;
- x = _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10);
- y = _parseInt(mb*ti.x2 + md*ti.y2 + mf, 10);
- x += " ";
- y += " ";
- dat += x;
- dat += y;
+
+ dat[dat.length] = _parseInt(ma*ti.x1 + mc*ti.y1 + me, 10);
+ dat[dat.length] = _parseInt(mb*ti.x1 + md*ti.y1 + mf, 10);
+ dat[dat.length] = _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10);
+ dat[dat.length] = _parseInt(mb*ti.x2 + md*ti.y2 + mf, 10);
}
- var x = _parseInt(ma*ti.x + mc*ti.y + me, 10); //_parseIntはparseIntのエイリアスであり、値を丸めるのに使う
- var y = _parseInt(mb*ti.x + md*ti.y + mf, 10);
- x += " "; //文字列型に変換しておき、空白で区切りを付ける
- y += " ";
- dat += x;
- dat += y;
+ dat[dat.length] = _parseInt(ma*ti.x + mc*ti.y + me, 10);
+ dat[dat.length] = _parseInt(mb*ti.x + md*ti.y + mf, 10);
}
}
var vi = tar.ownerDocument.documentElement;
var w = vi.width.baseVal.value, h = vi.height.baseVal.value;
- tar._tar.path = dat + " e";
+ dat[dat.length] = " e";
+ tar._tar.path = dat.join(" ");
tar._tar.coordsize = w + " " + h;
NAIBU._setPaint(tar, matrix);
evt = tar = w = h = matrix = dat = x = y = null;