From bdb1fe837e9b299677531cda163d4cf03a990ad8 Mon Sep 17 00:00:00 2001 From: dhrname Date: Tue, 8 Oct 2013 23:30:04 +0900 Subject: [PATCH] =?utf8?q?polyline,=20polygon=E8=A6=81=E7=B4=A0=E3=81=AE?= =?utf8?q?=E5=A4=89=E6=95=B0=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- org/sie-uncompressed.js | 140 ++++++++++++++++++++++++------------------------ org/w3c/dom/svg.js | 2 +- 2 files changed, 70 insertions(+), 72 deletions(-) diff --git a/org/sie-uncompressed.js b/org/sie-uncompressed.js index 21b2528..bc76eb0 100644 --- a/org/sie-uncompressed.js +++ b/org/sie-uncompressed.js @@ -2318,6 +2318,9 @@ module smil { typedef dom::DOMString DOMString; */ +/*ElementTimeControlはSVGAnimationElementに統合させる。 + *というのは、多重継承が難しいため + */ function TimeEvent() { Event.apply(this); @@ -2573,6 +2576,33 @@ function SVGElement() { }; SVGElement.prototype = Object._create(Element); +/*_inserted__メソッド + * VMLの挿入をするための、内部処理のメソッド + */ +SVGElement.prototype._inserted__ = function(tar) { + var tnext = tar.nextSibling, + sar = tar._tar, + spar = tar.parentNode._tar, + snext = null; + if (sar && spar) { + if (!tnext) { + spar.appendChild(sar); + } else { + while(tnext) { + if (tnext._tar && tnext._tar.parentNode) { + /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/ + snext = tnext._tar; + break; + } + tnext = tnext.nextSibling; + } + snext && (spar = snext.parentNode); + spar.insertBefore(sar, snext); + } + } + tnext = sar = spar = snext = void 0; +}; + /*関数スコープを避けるため、グローバルスコープでevalさせる関数*/ NAIBU.eval = function(code) { var doc = document, @@ -2655,7 +2685,7 @@ NAIBU.eval = function(code) { */ /*SVGMatrix*/ this.getCTM = function() { var s, m; - if (!!this._cacheMatrix) { //キャッシュがあれば + if (this._cacheMatrix) { //キャッシュがあれば s = this._cacheMatrix; } else { m = this.transform.baseVal.consolidate(); @@ -2679,10 +2709,8 @@ NAIBU.eval = function(code) { if (!this.parentNode) { return null; } - var view = this.nearestViewportElement || this.ownerDocument.documentElement; - var s = view.getScreenCTM().multiply(this.getCTM()); - view = null; - return s; + return ((this.nearestViewportElement || this.ownerDocument.documentElement) + .getScreenCTM().multiply(this.getCTM())); }; /*getTransformToElementメソッド @@ -3443,7 +3471,6 @@ function SVGSVGElement(_doc) { css::DocumentCSS {*/ /*以下のx,y,width,heightプロパティは *それぞれ、svg要素の同名属性に対応。たとえば、xならば、x属性に対応している - *1000というのは、W3Cで触れていないため、独自の初期値を採用 */ var slen = SVGAnimatedLength; /*readonly SVGAnimatedLength*/ this.x = new slen(); @@ -3540,6 +3567,35 @@ function SVGSVGElement(_doc) { } evt = name = tv = ovb = par = tp = sa = mos = void 0; }, false); + this.addEventListener("DOMNodeInserted", function(evt){ + if (evt.eventPhase === /*Event.AT_TARGET*/ 2) { + var tar = evt.target; + tar.addEventListener("DOMNodeInserted", function(evt){ + if (evt.eventPhase === 1) { + evt.target.nearestViewportElement = tar; + } + }, true); + /*getCTMメソッドの再定義で、viewBox属性やx,y属性などに対応*/ + tar._getCTM = tar.getCTM; + tar.getCTM = function() { + if (!this._cacheMatrix) { + var m = this.getScreenCTM(), + style = this.ownerDocument.defaultView.getComputedStyle(this, ""), + fontSize = parseFloat(style.getPropertyValue("font-size")); + this.x.baseVal._emToUnit(fontSize); + this.y.baseVal._emToUnit(fontSize); + m = m.translate(this.x.baseVal.value, this.y.baseVal.value); + this._cacheMatrix = this._getCTM().multiply(m); + } + return (this._cacheMatrix); + }; + tar._inserted__(tar); + evt = tar.ownerDocument.createEvent("SVGEvents"); + evt.initEvent("SVGLoad", false, false); + tar.dispatchEvent(evt); + evt = void 0; + } + }, false); this.addEventListener("SVGLoad", function(evt){ /*以下のDOMAttrModifiedは浮上フェーズのときに、再描画をするように *処理を書いたもの。属性が書き換わるたびに、再描画される @@ -3942,27 +3998,8 @@ function SVGSwitchElement(_doc) { if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) { return; //強制終了させる } - var tnext = tar.nextSibling, - sar = tar._tar, - spar = tar.parentNode._tar, - snext = null; - if (sar && spar) { - if (!tnext) { - spar.appendChild(sar); - } else { - while(tnext) { - if (tnext._tar && tnext._tar.parentNode) { - /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/ - snext = tnext._tar; - break; - } - tnext = tnext.nextSibling; - } - snext && (spar = snext.parentNode); - spar.insertBefore(sar, snext); - } - } - tnext = sar = spar = snext = evt = tar = void 0; + tar._inserted__(tar); + evt = tar = void 0; }, false); }; SVGSwitchElement.prototype = Object._create(SVGElement); @@ -6041,28 +6078,8 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) { if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) { return; //強制終了させる } - var tar = evt.target, - tnext = tar.nextSibling, - sar = tar._tar, - spar = tar.parentNode._tar, - snext = null; - if (sar && spar) { - if (!tnext) { - spar.appendChild(sar); - } else { - while(tnext) { - if (tnext._tar && tnext._tar.parentNode) { - /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/ - snext = tnext._tar; - break; - } - tnext = tnext.nextSibling; - } - snext && (spar = snext.parentNode); - spar.insertBefore(sar, snext); - } - } - tnext = sar = spar = snext = void 0; + var tar = evt.target; + tar._inserted__(tar); tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target, tp = tar.points, @@ -6079,7 +6096,7 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) { list.splice(2, 0, "l"); var dat = "m" + list.join(" ") + xclose, ele = tar._tar, - vi = tar.ownerDocument.documentElement; + vi = tar.ownerDocument.documentElement, w = vi.width.baseVal.value, h = vi.height.baseVal.value; //VMLに結び付けていく @@ -8678,28 +8695,9 @@ function SVGForeignObjectElement(_doc) /*: if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) { return; //強制終了させる } - var tnext = tar.nextSibling, - sar = tar._tar, - spar = tar.parentNode._tar, - snext = null; - if (sar && spar) { - if (!tnext) { - spar.appendChild(sar); - } else { - while(tnext) { - if (tnext._tar && tnext._tar.parentNode) { - /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/ - snext = tnext._tar; - break; - } - tnext = tnext.nextSibling; - } - snext && (spar = snext.parentNode); - spar.insertBefore(sar, snext); - } - } + tar._inserted__(tar); tar.addEventListener("DOMNodeInsertedIntoDocument", SVGImageElement.prototype._imageo, false); - tnext = sar = spar = snext = evt = tar = void 0; + evt = tar = void 0; }, false); this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){ if(evt.eventPhase === /*Event.CAPTURING_PHASE*/ 1) { diff --git a/org/w3c/dom/svg.js b/org/w3c/dom/svg.js index 3fcac8d..b13b935 100644 --- a/org/w3c/dom/svg.js +++ b/org/w3c/dom/svg.js @@ -3811,7 +3811,7 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) { list.splice(2, 0, "l"); var dat = "m" + list.join(" ") + xclose, ele = tar._tar, - vi = tar.ownerDocument.documentElement; + vi = tar.ownerDocument.documentElement, w = vi.width.baseVal.value, h = vi.height.baseVal.value; //VMLに結び付けていく -- 2.11.0