svnno****@sourc*****
svnno****@sourc*****
2011年 1月 30日 (日) 23:22:40 JST
Revision: 2346 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2346 Author: dhrname Date: 2011-01-30 23:22:40 +0900 (Sun, 30 Jan 2011) Log Message: ----------- SVGPathElementのマトリックス処理に関して、大幅な軽量化 Modified Paths: -------------- branches/06x/069/org/w3c/dom/svg.js Modified: branches/06x/069/org/w3c/dom/svg.js =================================================================== --- branches/06x/069/org/w3c/dom/svg.js 2011-01-30 13:16:50 UTC (rev 2345) +++ branches/06x/069/org/w3c/dom/svg.js 2011-01-30 14:22:40 UTC (rev 2346) @@ -2650,42 +2650,32 @@ *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 isZ = tar._com._isZ, isM = tar._com._isM, isL = tar._com._isL, isC = tar._com._isC; + var t = "", ma = matrix.a, mb = matrix.b, mc = matrix.c, md = matrix.d, me = matrix.e, mf = matrix.f; + var cname = tar._com._nameCom, isZ = tar._com._isZ, isC = tar._com._isC; for (var i=0, tli=tlist.numberOfItems;i<tli;++i) { var ti = tlist.getItem(i), tps = ti.pathSegTypeAsLetter; - /*IE6の高速化のために、以下では、x += "";のような文字連結ではなくて、 - *x[data.length] = "";という形をとった - */ - if (isZ[tps]) { - dat[dat.length] = " x "; - } else { - if (isM[tps]) { - dat[dat.length] = "m"; - } else if (isL[tps]) { - dat[dat.length] = "l"; - } else if (isC[tps]) { - dat[dat.length] = "c"; - /*CTM(mx)の行列と座標(x, y)の積を算出する。数学における表現は以下のとおり - *[ma mc me] [x] - *[mb md mf] * [y] - *[0 0 1 ] [1] - */ - - dat[dat.length] = _parseInt(ma*ti.x1 + mc*ti.y1 + me, 10)+ " " +_parseInt(mb*ti.x1 + md*ti.y1 + mf, 10); - dat[dat.length] = _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10)+ " " +_parseInt(mb*ti.x2 + md*ti.y2 + mf, 10); - } - dat[dat.length] = _parseInt(ma*ti.x + mc*ti.y + me, 10)+ " " +_parseInt(mb*ti.x + md*ti.y + mf, 10); + t += cname[tps]; + if (isC[tps]) { + /*CTM(mx)の行列と座標(x, y)の積を算出する。数学における表現は以下のとおり + *[ma mc me] [x] + *[mb md mf] * [y] + *[0 0 1 ] [1] + */ + t += _parseInt(ma*ti.x1 + mc*ti.y1 + me, 10)+ " " +_parseInt(mb*ti.x1 + md*ti.y1 + mf, 10)+ " "; + t += _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10)+ " " +_parseInt(mb*ti.x2 + md*ti.y2 + mf, 10)+ " "; + t += _parseInt(ma*ti.x + mc*ti.y + me, 10)+ " " +_parseInt(mb*ti.x + md*ti.y + mf, 10)+ " "; + } else if (!isZ[tps]) { + t += _parseInt(ma*ti.x + mc*ti.y + me, 10)+ " " +_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; - dat[dat.length] = " e"; - tar._tar.path = dat.join(" "); + t += " e"; + tar._tar.path = t; tar._tar.coordsize = w + " " + h; NAIBU._setPaint(tar, matrix); delete tar._cacheMatrix, tar._currentStyle; - evt = tar = dat = w = h = matrix = tlist = x = y = _parseInt = ma = mb = mc = md = me = mf = vi = isZ = isM = isL = isC = i = tli = tps = ti = null; + evt = tar = t = w = h = matrix = tlist = x = y = _parseInt = ma = mb = mc = md = me = mf = vi = isZ = isC = i = tli = tps = ti = cname = null; }, false); evt = tar = null; }, false); @@ -2694,6 +2684,13 @@ SVGPathElement.constructor = SVGElement; SVGPathElement.prototype = new SVGElement(); SVGPathElement.prototype._com = { + _nameCom : { + z : " x ", + Z : " x ", + C : "c", + L : "l", + M : "m" + }, _isZ : { z : 1, Z : 1