svnno****@sourc*****
svnno****@sourc*****
2010年 4月 5日 (月) 23:36:07 JST
Revision: 1779 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1779 Author: dhrname Date: 2010-04-05 23:36:07 +0900 (Mon, 05 Apr 2010) Log Message: ----------- Modified Paths: -------------- branches/ufltima/dom/svg.js Modified: branches/ufltima/dom/svg.js =================================================================== --- branches/ufltima/dom/svg.js 2010-04-04 15:12:46 UTC (rev 1778) +++ branches/ufltima/dom/svg.js 2010-04-05 14:36:07 UTC (rev 1779) @@ -1161,7 +1161,7 @@ var obje = document.getElementsByTagName("object"); for (var i=0, objli=1;i<objli;++i) { var objei = {style:{}};//obje[i]; - xmlhttp.open("GET", "tiger.svg", true);//objei.getAttribute("data"), true); + xmlhttp.open("GET", "4wd.svg", true);//objei.getAttribute("data"), true); xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { @@ -2029,7 +2029,7 @@ var evtt = tar.ownerDocument.createEvent("MutationEvents"); evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null); evtt._tar = !!tar._fillElement ? tar._fillElement : document.createElement("v:fill"); - evtt._style = style; + evtt._style = style, evtt._ttar = tar; t.dispatchEvent(evtt); if (t.localName !== "radialGradient" && !!!tar._fillElement) { el.appendChild(evtt._tar); @@ -2607,44 +2607,39 @@ /*readonly SVGAnimatedEnumeration*/ this.gradientUnits = new SVGAnimatedEnumeration(); /*readonly SVGAnimatedTransformList*/ this.gradientTransform = new SVGAnimatedTransformList(); /*readonly SVGAnimatedEnumeration*/ this.spreadMethod = new SVGAnimatedEnumeration(); - this.addEventListener("DOMNodeInserted", function(evt) { - if (evt.eventPhase === Event.BUBBLING_PHASE) { + this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { + var grad = evt.target, ele = evt._tar, t = evt._style; //eleはv:fill要素やv:stroke要素のノード、tはラップした要素ノードのスタイルを収納 + if (!!!ele) { //まだ、path要素などが設定されていない場合 return; } - evt.target.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { - var grad = evt.target, ele = evt._tar, t = evt._style; //eleはv:fill要素やv:stroke要素のノード、tはラップした要素ノードのスタイルを収納 - if (!!!ele) { //まだ、path要素などが設定されていない場合 + if (grad) { + var grad2 = grad; + while (grad2 && !grad2.hasChildNodes()) { //stopを子要素に持つgradient要素を探す + grad2.getAttributeNS("http://www.w3.org/1999/xlink", "href").match(/#(.+)/); + grad2 = evt.target.ownerDocument.getElementById(RegExp.$1); + } + var stops = grad2.getElementsByTagNameNS("http://www.w3.org/2000/svg", "stop"); + if (!stops) { + grad = grad2 = stops = null; return; } - if (grad) { - var grad2 = grad; - while (grad2 && !grad2.hasChildNodes()) { //stopを子要素に持つgradient要素を探す - grad2.getAttributeNS("http://www.w3.org/1999/xlink", "href").match(/#(.+)/); - grad2 = evt.target.ownerDocument.getElementById(RegExp.$1); - } - var stops = grad2.getElementsByTagNameNS("http://www.w3.org/2000/svg", "stop"); - if (!stops) { - grad = grad2 = stops = null; - return; - } - var length = stops.length; - var color = [], colors = [], opacity = []; - for (var i = 0; i < length; ++i) { - var stop = stops[i]; - color[i] = stop.style.getPropertyValue("stop-color"); - colors[i] = stop.offset.baseVal + " " + color[i]; - opacity[i] = (parseFloat(stop.style.getPropertyValue("stop-opacity")) || 1) * parseFloat(t.getPropertyValue("fill-opacity")) * parseFloat(t.getPropertyValue("opacity")); - } - ele.setAttribute("method", "none"); - ele.setAttribute("color", color[0]); - ele.setAttribute("color2", color[length-1]); - ele.setAttribute("colors", colors.join(",")); - // When colors attribute is used, the meanings of opacity and o:opacity2 are reversed. - ele.setAttribute("opacity", opacity[length-1]+ ""); - ele.setAttribute("o:opacity2", opacity[0]+ ""); - grad = ele = stops = lengh = color = colors = opacity = null; + var length = stops.length; + var color = [], colors = [], opacity = []; + for (var i = 0; i < length; ++i) { + var stop = stops[i]; + color[i] = stop.style.getPropertyValue("stop-color"); + colors[i] = stop.offset.baseVal + " " + color[i]; + opacity[i] = (parseFloat(stop.style.getPropertyValue("stop-opacity")) || 1) * parseFloat(t.getPropertyValue("fill-opacity")) * parseFloat(t.getPropertyValue("opacity")); } - }, false); + ele.setAttribute("method", "none"); + ele.setAttribute("color", color[0]); + ele.setAttribute("color2", color[length-1]); + ele.setAttribute("colors", colors.join(",")); + // When colors attribute is used, the meanings of opacity and o:opacity2 are reversed. + ele.setAttribute("opacity", opacity[length-1]+ ""); + ele.setAttribute("o:opacity2", opacity[0]+ ""); + grad = ele = stops = lengh = color = colors = opacity = null; + } }, false); return this; }; @@ -2688,14 +2683,17 @@ /*readonly SVGAnimatedLength*/ this.fx = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.fy = new SVGAnimatedLength(); this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { - var grad = evt.target, ele = evt._tar; + var grad = evt.target, ele = evt._tar, tar = evt._ttar; //eleはv:fill要素。tarはターゲットとになる要素 if (!!!ele) { //まだ、path要素などが設定されていない場合 return; } ele.setAttribute("type", "gradientTitle"); ele.setAttribute("focus", "100%"); ele.setAttribute("focusposition", "0.5 0.5"); - if (ele.localName === "rect") { + if (tar.localName === "rect") { + /*VMLでは、図の形状に沿って、円状のグラデーションを処理するようになっているため、 + *四角だとおかしな模様が出てしまう。以下はそれを避ける処理 + */ var cx = parseFloat((grad.getAttributeNS(null, "cx") || "0.5")); var cy = parseFloat((grad.getAttributeNS(null, "cy") || "0.5")); var r = rx = ry = parseFloat((grad.getAttributeNS(null, "r") || "0.5")); @@ -2741,9 +2739,11 @@ background.filters[0].apply(); background.innerHTML = circle; background.filters[0].play(); - ele._tar.parentNode.insertBefore(background, ele.tar); - ele._tar.filled = "false"; + ele.parentNode.insertBefore(background, ele); + ele.parentNode.filled = "false"; ellipse = circle = data = list = pl = plm = gt = cx = cy = r = null; + } else if (!ele.parentNode){ + tar._tar.appendChild(ele); } }, false); return this;