[Sie-announce] SIEコード [1374] NAIBU. _ie_createFont処理を追加

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 10月 26日 (月) 23:31:00 JST


Revision: 1374
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1374
Author:   dhrname
Date:     2009-10-26 23:31:00 +0900 (Mon, 26 Oct 2009)

Log Message:
-----------
NAIBU._ie_createFont処理を追加

Modified Paths:
--------------
    branches/05x/053/sie.js

Modified: branches/05x/053/sie.js
===================================================================
--- branches/05x/053/sie.js	2009-10-26 11:37:24 UTC (rev 1373)
+++ branches/05x/053/sie.js	2009-10-26 14:31:00 UTC (rev 1374)
@@ -1832,9 +1832,40 @@
   }
   } catch(e) {stlog.add(e,17155);}
 };
-function pathData() {
-  
+NAIBU._ie_createFont = function(/*Element*/ ti, /*Element*/ font) {
+  var node = ti.firstChild, data, glyphs = font.getElementsByTagName("GLYPH");
+  var dx = parseFloat(ti.style.left), dy = parseFloat(ti.style.top), fontSize = parseFloat(ti.style.fontSize);
+  while(node) {
+    data = node.data;
+    if (data !== void 0) { //dataがある場合
+      for (var i=0,gli=glyphs.length;i<gli;++i) {
+        var index = data.indexOf(glyphs[i].getAttribute("unicode")), path = document.createElement("v:shape");
+        /*カーニング処理について(To DO)
+         *カーニングに該当する文字を検索して、ずらしたい長さだけ、以降のxとyから引く必要がある
+         */
+        var x = dx * fontSize * index, y = dy * fontSize * index;
+        ti.inserBefore(path);
+        NAIBU.pathData(glyphs[i].getAttribute("d"), path, true, x, y);
+      }
+    } else {
+      NAIBU._ie_createFont(node, font);
+    }
+    node = node.nextSibling;
+  }
 }
+NAIBU.pathData = function(/*string*/ data, /*Element*/ p, /*boolean*/ t, /*float*/x, y, w, h, fontSize, em) {
+  //CTMでフォントを移動させておく
+  var fe = fontSize / em, matrix = new STMatrix(fe, 0, 0, -fe, x*fe, -y*fe);
+  if (t) { //IEならば
+    var s = new STPath(p, matrix);
+    s.d = data;
+    s.set(w,h);
+  } else {
+    p.setAttributeNS(null, "transform", "matrix(" +matrix.a+ "," +matrix.b+ "," +matrix.c+ "," +matrix.d+ "," +matrix.e+ "," +matrix.f+ ")");
+   }
+  fe = matrix = null;
+};
+
 function utf16( /*string*/ s)  {
   return unescape(s);
 }




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