svnno****@sourc*****
svnno****@sourc*****
2010年 1月 10日 (日) 22:55:09 JST
Revision: 1567
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1567
Author: dhrname
Date: 2010-01-10 22:55:09 +0900 (Sun, 10 Jan 2010)
Log Message:
-----------
Modified Paths:
--------------
branches/05x/058/sie.js
Modified: branches/05x/058/sie.js
===================================================================
--- branches/05x/058/sie.js 2010-01-10 13:46:31 UTC (rev 1566)
+++ branches/05x/058/sie.js 2010-01-10 13:55:09 UTC (rev 1567)
@@ -1383,109 +1383,109 @@
}
//linearGradient、radialGradient要素を処理
NAIBU.PaintColor.prototype.gradient = function( /*element*/ ele, /*string*/ id, /*Matrix*/ matrix) {
- var grad = document.getElementById(id);
+ var grad = document.getElementById(id), _s = false;
if (grad) {
- var grad2 = grad;
- while (grad2 && !grad2.hasChildNodes()) { //stopを子要素に持つgradient要素を探す
- grad2.getAttribute("xlink:href").match(/#(.+)/);
- grad2 = document.getElementById(RegExp.$1);
- }
- var stops = grad2.getElementsByTagName("stop");
- if (!stops) {
- grad = grad2 = stops = null;
- return false;
- }
- var length = stops.length;
- var color = [], colors = [], opacity = [];
- for (var i = 0; i < length; ++i) {
- var stop = stops[i];
- color[i] = this.color(stop.style.stopcolor || stop.getAttribute("stopcolor")) || "black";
- colors[i] = stop.getAttribute("offset") + " " + color[i];
- opacity[i] = (stop.style.stopopacity || stop.getAttribute("stopopacity") || 1) * this.fillopacity * this.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]);
- var type = grad.getAttribute("type"), toNumber = this.toNumber;
- if (type === "gradient") {
- try {
- var angle;
- var x1 = toNumber((grad.getAttribute("x1") || "0"));
- var y1 = toNumber((grad.getAttribute("y1") || "0"));
- var x2 = toNumber((grad.getAttribute("x2") || "100"));
- var y2 = toNumber((grad.getAttribute("y2") || "0"));
- angle = 270 - Math.atan2(y2-y1, x2-x1) * 180 / Math.PI;
- if (angle >= 360) {
- angle -= 360;
+ var grad2 = grad;
+ while (grad2 && !grad2.hasChildNodes()) { //stopを子要素に持つgradient要素を探す
+ grad2.getAttribute("xlink:href").match(/#(.+)/);
+ grad2 = document.getElementById(RegExp.$1);
}
- } catch(e) {stlog.add(e,749); angle = 270;}
- ele.setAttribute("type", "gradient");
- ele.setAttribute("angle", angle + "");
- x1 = y1 = x2 = y2 = angle = null;
- } else if (type === "gradientRadial") {
- try{
- ele.setAttribute("type", "gradientTitle");
- ele.setAttribute("focus", "100%");
- ele.setAttribute("focusposition", "0.5 0.5");
- if (this.tar.getAttribute("tag") === "rect") {
- var cx = toNumber((grad.getAttribute("cx") || "0.5"));
- var cy = toNumber((grad.getAttribute("cy") || "0.5"));
- var r = rx = ry = toNumber((grad.getAttribute("r") || "0.5"));
- var el = this.w, et = this.h, er = 0, eb = 0;
- var data = this.tar.path.value;
- var units = grad.getAttribute("gradientUnits");
- if (!units || units === "objectBoundingBox") {
- //%の場合は小数点に変換(10% -> 0.1)
- cx = cx > 1 ? cx/100 : cx; cy = cy > 1 ? cy/100 : cy; r = r > 1 ? r/100 : r;
- //要素の境界領域を求める(四隅の座標を求める)
- var degis = data.match(/[0-9\-]+/g);
- for (var i=0,degisli=degis.length;i<degisli;i+=2) {
- var nx = parseInt(degis[i]), ny = parseInt(degis[i+1]);
- el = el > nx ? nx : el;
- et = et > ny ? ny : et;
- er = er > nx ? er : nx;
- eb = eb > ny ? eb : ny; nx = ny = null;
+ var stops = grad2.getElementsByTagName("stop");
+ if (!stops) {
+ grad = grad2 = stops = null;
+ return false;
+ }
+ var length = stops.length;
+ var color = [], colors = [], opacity = [];
+ for (var i = 0; i < length; ++i) {
+ var stop = stops[i];
+ color[i] = this.color(stop.style.stopcolor || stop.getAttribute("stopcolor")) || "black";
+ colors[i] = stop.getAttribute("offset") + " " + color[i];
+ opacity[i] = (stop.style.stopopacity || stop.getAttribute("stopopacity") || 1) * this.fillopacity * this.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]);
+ var type = grad.getAttribute("type"), toNumber = this.toNumber;
+ if (type === "gradient") {
+ try {
+ var angle;
+ var x1 = toNumber((grad.getAttribute("x1") || "0"));
+ var y1 = toNumber((grad.getAttribute("y1") || "0"));
+ var x2 = toNumber((grad.getAttribute("x2") || "100"));
+ var y2 = toNumber((grad.getAttribute("y2") || "0"));
+ angle = 270 - Math.atan2(y2-y1, x2-x1) * 180 / Math.PI;
+ if (angle >= 360) {
+ angle -= 360;
}
- degis = null;
- cx = cx*(er - el) + el; cy = cy*(eb - et) + et; rx = r*(er - el); ry = r*(eb - et);
- }
- var gt = grad.getAttribute("gradientTransform");
- if (gt) {
- grad.setAttribute("transform",gt);
- matrix = NAIBU.transformToCTM(grad, matrix);
- }
- el = cx - rx; et = cy - ry; er = cx + rx; eb = cy + ry;
- var rrx = rx * 0.55228, rry = ry * 0.55228;
- var list = ["m", cx,et, "c", cx-rrx,et, el,cy-rry, el,cy, el,cy+rry, cx-rrx,eb, cx,eb, cx+rrx,eb, er,cy+rry, er,cy, er,cy-rry, cx+rrx,et, cx,et, "x e"];
- var pl = new PList(list);
- var plm = pl.matrixTransform(matrix);
- var ellipse = plm.list.join(" ");
- var outline = document.getElementById("_NAIBU_outline");
- var background = document.createElement("div"), bstyle = background.style;
- bstyle.position = "absolute";
- bstyle.textAlign = "left"; bstyle.top = "0px"; bstyle.left = "0px"; bstyle.width = this.w+ "px"; bstyle.height = this.h+ "px";
- outline.appendChild(background);
- bstyle.filter = "progid:DXImageTransform.Microsoft.Compositor";
- background.filters.item('DXImageTransform.Microsoft.Compositor').Function = 23;
- var circle = '<v:shape style="position:relative; antialias:false; top:0px; left:0px;" coordsize="' +this.w+ ' ' +this.h+ '" path="' +ellipse+ '" stroked="f">' +ele.outerHTML+ '</v:shape>';
- background.innerHTML = '<v:shape style="position:relative; top:0px; left:0px;" coordsize="' +this.w+ ' ' +this.h+ '" path="' +data+ '" stroked="f" fillcolor="' +color[color.length-1]+ '" ></v:shape>';
- background.filters[0].apply();
- background.innerHTML = circle;
- background.filters[0].play();
- this.tar.parentNode.insertBefore(background, this.tar);
- this.tar.filled = "false";
- ellipse = circle = data = list = pl = plm = gt = cx = cy = r = null;
- return true;
+ } catch(e) {stlog.add(e,749); angle = 270;}
+ ele.setAttribute("type", "gradient");
+ ele.setAttribute("angle", angle + "");
+ x1 = y1 = x2 = y2 = angle = null;
+ } else if (type === "gradientRadial") {
+ try{
+ ele.setAttribute("type", "gradientTitle");
+ ele.setAttribute("focus", "100%");
+ ele.setAttribute("focusposition", "0.5 0.5");
+ if (this.tar.getAttribute("tag") === "rect") {
+ var cx = toNumber((grad.getAttribute("cx") || "0.5"));
+ var cy = toNumber((grad.getAttribute("cy") || "0.5"));
+ var r = rx = ry = toNumber((grad.getAttribute("r") || "0.5"));
+ var el = this.w, et = this.h, er = 0, eb = 0;
+ var data = this.tar.path.value;
+ var units = grad.getAttribute("gradientUnits");
+ if (!units || units === "objectBoundingBox") {
+ //%の場合は小数点に変換(10% -> 0.1)
+ cx = cx > 1 ? cx/100 : cx; cy = cy > 1 ? cy/100 : cy; r = r > 1 ? r/100 : r;
+ //要素の境界領域を求める(四隅の座標を求める)
+ var degis = data.match(/[0-9\-]+/g);
+ for (var i=0,degisli=degis.length;i<degisli;i+=2) {
+ var nx = parseInt(degis[i]), ny = parseInt(degis[i+1]);
+ el = el > nx ? nx : el;
+ et = et > ny ? ny : et;
+ er = er > nx ? er : nx;
+ eb = eb > ny ? eb : ny; nx = ny = null;
+ }
+ degis = null;
+ cx = cx*(er - el) + el; cy = cy*(eb - et) + et; rx = r*(er - el); ry = r*(eb - et);
+ }
+ var gt = grad.getAttribute("gradientTransform");
+ if (gt) {
+ grad.setAttribute("transform",gt);
+ matrix = NAIBU.transformToCTM(grad, matrix);
+ }
+ el = cx - rx; et = cy - ry; er = cx + rx; eb = cy + ry;
+ var rrx = rx * 0.55228, rry = ry * 0.55228;
+ var list = ["m", cx,et, "c", cx-rrx,et, el,cy-rry, el,cy, el,cy+rry, cx-rrx,eb, cx,eb, cx+rrx,eb, er,cy+rry, er,cy, er,cy-rry, cx+rrx,et, cx,et, "x e"];
+ var pl = new PList(list);
+ var plm = pl.matrixTransform(matrix);
+ var ellipse = plm.list.join(" ");
+ var outline = document.getElementById("_NAIBU_outline");
+ var background = document.createElement("div"), bstyle = background.style;
+ bstyle.position = "absolute";
+ bstyle.textAlign = "left"; bstyle.top = "0px"; bstyle.left = "0px"; bstyle.width = this.w+ "px"; bstyle.height = this.h+ "px";
+ outline.appendChild(background);
+ bstyle.filter = "progid:DXImageTransform.Microsoft.Compositor";
+ background.filters.item('DXImageTransform.Microsoft.Compositor').Function = 23;
+ var circle = '<v:shape style="position:relative; antialias:false; top:0px; left:0px;" coordsize="' +this.w+ ' ' +this.h+ '" path="' +ellipse+ '" stroked="f">' +ele.outerHTML+ '</v:shape>';
+ background.innerHTML = '<v:shape style="position:relative; top:0px; left:0px;" coordsize="' +this.w+ ' ' +this.h+ '" path="' +data+ '" stroked="f" fillcolor="' +color[color.length-1]+ '" ></v:shape>';
+ background.filters[0].apply();
+ background.innerHTML = circle;
+ background.filters[0].play();
+ this.tar.parentNode.insertBefore(background, this.tar);
+ this.tar.filled = "false";
+ ellipse = circle = data = list = pl = plm = gt = cx = cy = r = null;
+ _s = true;
+ }
+ } catch(e) {stlog.add(e,1175);}
}
- } catch(e) {stlog.add(e,1175);}
+ stops = type = lengh = color = colors = opacity = null;
}
- }
- stops = type = lengh = color = colors = opacity = null;
- return false;
+ return _s;
};
//font属性、関連プロパティを処理する