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;