[Sie-announce] SIEコード [1567]

Back to archive index

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属性、関連プロパティを処理する




Sie-announce メーリングリストの案内
Back to archive index