svnno****@sourc*****
svnno****@sourc*****
2010年 2月 28日 (日) 23:27:42 JST
Revision: 1688 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1688 Author: dhrname Date: 2010-02-28 23:27:42 +0900 (Sun, 28 Feb 2010) Log Message: ----------- SVGPathElementのd属性をVMLに変換する処理を追加 Modified Paths: -------------- branches/ufltima/dom/svg.js Modified: branches/ufltima/dom/svg.js =================================================================== --- branches/ufltima/dom/svg.js 2010-02-28 11:12:02 UTC (rev 1687) +++ branches/ufltima/dom/svg.js 2010-02-28 14:27:42 UTC (rev 1688) @@ -1303,7 +1303,15 @@ /*readonly SVGPathSegList*/ this.animatedPathSegList = this.pathSegList = new SVGPathSegList(); /*readonly SVGPathSegList*/ this.animatedNormalizedPathSegList = this.normalizedPathSegList = new SVGPathSegList(); /*readonly SVGAnimatedNumber*/ this.pathLength = new SVGAnimatedNumber(); - this.addEventListener("DOMAttrModified", function(evt){}); + this.addEventListener("DOMAttrModified", function(evt){ + var tar = evt.target; + if (evt.attrName === "d") { + var tnlist = tar.normalizedPathSegList, tlist = tar.pathSegList; + for (var i=0, tli=tlist.numberOfItems;i<tli;++i) { + } + evt.stopPropagation(); + } + }); /*以下の処理は、このpath要素ノードがDOMツリーに追加されて初めて、 *描画が開始されることを示す。つまり、appendChildで挿入されない限り、描画をしない。 */ @@ -1312,9 +1320,45 @@ return; //強制終了させる } evt.target.addEventListener("DOMNodeInsertedIntoDocument", function(evt){ - var tar = evt.target, matrix = tar.getScreenCTM(), tlist = this.normalizedPathSegList; - for (var i=0, tli=tlist.length;i<tli;++i) { + /*以下の処理は、normalizedpathSegListとCTMに基づいて、 + *SVGのd属性をVMLに変換していく処理である。 + */ + var tar = evt.target, matrix = tar.getScreenCTM(), tlist = tar.normalizedPathSegList; + 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); + if (ti.pathSegTypeAsLetter === "z") { + dat += "x e"; + } else { + var x = ma * ti.x + mc * ti.y + me; + var y = mb * ti.x * md * ti.y + mf; + x += " "; //文字列型に変換しておき、空白で区切りを付ける + y += " "; + dat += x; + dat += y; + if (ti.pathSegTypeAsLetter === "M") { + dat = "m" + dat; + } else if (ti.pathSegTypeAsLetter === "L") { + dat = "l" + dat; + } else if (ti.pathSegTypeAsLetter === "C") { + dat = "c" + dat; + x = ma * ti.x1 + mc * ti.y1 + me; + y = mb * ti.x1 * md * ti.y1 + mf; + x += " "; + y += " "; + dat += x; + dat += y; + x = ma * ti.x2 + mc * ti.y2 + me; + y = mb * ti.x2 * md * ti.y2 + mf; + x += " "; + y += " "; + dat += x; + dat += y; + } + } } + tar._tar.path = dat; + matrix = dat = x = y = null; }); }); return this;