[Sie-announce] SIEコード [2870] CSSPrimitiveValueインターフェースのsetFloatvalueメソッドを実装して、それを使用しながら軽量化

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2011年 8月 13日 (土) 20:59:22 JST


Revision: 2870
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2870
Author:   dhrname
Date:     2011-08-13 20:59:22 +0900 (Sat, 13 Aug 2011)

Log Message:
-----------
CSSPrimitiveValueインターフェースのsetFloatvalueメソッドを実装して、それを使用しながら軽量化
(備考:Stringのmatchメソッドの使用回数を減らせることができたので、軽量化した)

Modified Paths:
--------------
    branches/08x/083/org/w3c/dom/css.js
    branches/08x/083/org/w3c/dom/svg.js

Modified: branches/08x/083/org/w3c/dom/css.js
===================================================================
--- branches/08x/083/org/w3c/dom/css.js	2011-08-13 11:28:39 UTC (rev 2869)
+++ branches/08x/083/org/w3c/dom/css.js	2011-08-13 11:59:22 UTC (rev 2870)
@@ -426,7 +426,7 @@
   this._n = [1, 0.01, 1, 1, 1, 35.43307, 3.543307, 90, 1.25, 15, 1, 180 / Math.PI, 90/100, 1, 1000, 1, 1000, 1]; //CSS_PX単位への変換値(なお、CSS_SはCSS_MSに、CSS_RADとCSS_GRADはCSS_DEGに、CSS_KHZはCSS_HZに統一)
   this.cssValueType = CSSValue.CSS_PRIMITIVE_VALUE;
   this.primitiveType = CSSPrimitiveValue.CSS_UNKNOWN;
-  this._value = 1;
+  this._value = null;
   this._percent = 0; //単位に%が使われていた場合、このプロパティの数値を1%として使う
   this._empercent = 0;
   /*void*/ this.setFloatValue = function(/*short*/ unitType, /*float*/ floatValue) {
@@ -444,41 +444,45 @@
     if ((/*CSSPrimitiveValue.CSS_UNKNOWN*/ 0 >= unitType) && (unitType >= /*CSSPrimitiveValue.CSS_STRING*/ 19)) { //浮動小数点数単位型をサポートしないCSS単位である場合
       throw new DOMException(DOMException.INVALID_ACCESS_ERR);
     }
-    var tc = this.cssText,
-        n = tc.charAt(tc.length-1),
-        type = 0,
-        s = +(tc.match(this._regd));
-    s = isNaN(s) ? 0 : s;
-    if (n >= "0" && n <= "9") {
-      type = /*CSSPrimitiveValue.CSS_NUMBER*/ 1;
-      if (unitType === 1) {
-        unitType = tc = n = type = null;
-        return s;
+    if (this._value || (this._value === 0)) { //すでに、setFloatValueメソッドによって_valueプロパティが設定されていた場合
+      return (this._value / this._n[unitType-1]);
+    } else {
+      var tc = this.cssText,
+          n = tc.charAt(tc.length-1),
+          type = 0,
+          s = +(tc.match(this._regd));
+      s = isNaN(s) ? 0 : s;
+      if (n >= "0" && n <= "9") {
+        type = /*CSSPrimitiveValue.CSS_NUMBER*/ 1;
+        if (unitType === 1) {
+          unitType = tc = n = type = null;
+          return s;
+        }
+      } else if (n === "%") {
+        s *= this._percent;
+        type = /*CSSPrimitiveValue.CSS_PERCENTAGE*/ 2;
+      } else if ((n === "m") && (tc.charAt(tc.length-2) === "e")) {
+        s *= this._empercent;
+        type = /*CSSPrimitiveValue.CSS_EMS*/ 3;
+      } else if ((n === "x") && (tc.charAt(tc.length-2) === "e")) {
+        type = /*CSSPrimitiveValue.CSS_EXS*/ 4;
+      } else if ((n === "x") && (tc.charAt(tc.length-2) === "p")) {
+        type = /*CSSPrimitiveValue.CSS_PX*/ 5;
+      } else if ((n === "m") && (tc.charAt(tc.length-2) === "c")) {
+        type = /*CSSPrimitiveValue.CSS_CM*/ 6;
+      } else if ((n === "m") && (tc.charAt(tc.length-2) === "m")) {
+        type = /*CSSPrimitiveValue.CSS_MM*/ 7;
+      } else if (n === "n") {
+        type = /*CSSPrimitiveValue.CSS_IN*/ 8;
+      } else if (n === "t") {
+        type = /*CSSPrimitiveValue.CSS_PT*/ 9;
+      } else if (n === "c") {
+        type = /*CSSPrimitiveValue.CSS_PC*/ 10;
       }
-    } else if (n === "%") {
-      s *= this._percent;
-      type = /*CSSPrimitiveValue.CSS_PERCENTAGE*/ 2;
-    } else if ((n === "m") && (tc.charAt(tc.length-2) === "e")) {
-      s *= this._empercent;
-      type = /*CSSPrimitiveValue.CSS_EMS*/ 3;
-    } else if ((n === "x") && (tc.charAt(tc.length-2) === "e")) {
-      type = /*CSSPrimitiveValue.CSS_EXS*/ 4;
-    } else if ((n === "x") && (tc.charAt(tc.length-2) === "p")) {
-      type = /*CSSPrimitiveValue.CSS_PX*/ 5;
-    } else if ((n === "m") && (tc.charAt(tc.length-2) === "c")) {
-      type = /*CSSPrimitiveValue.CSS_CM*/ 6;
-    } else if ((n === "m") && (tc.charAt(tc.length-2) === "m")) {
-      type = /*CSSPrimitiveValue.CSS_MM*/ 7;
-    } else if (n === "n") {
-      type = /*CSSPrimitiveValue.CSS_IN*/ 8;
-    } else if (n === "t") {
-      type = /*CSSPrimitiveValue.CSS_PT*/ 9;
-    } else if (n === "c") {
-      type = /*CSSPrimitiveValue.CSS_PC*/ 10;
+      s = s * this._n[type-1] / this._n[unitType-1];
+      tc = n = type = unitType = null;
+      return s;
     }
-    this._value = s * this._n[type-1];  //値はあらかじめ、利用しやすいように変換しておく
-    tc = n = type = s = null;
-    return (this._value / this._n[unitType-1]);
   };
   /*void*/ this.setStringValue = function(/*short*/ stringType, /*string*/ stringValue) {
     if (CSSPrimitiveValue.CSS_DIMENSION >= stringType && stringType >= CSSPrimitiveValue.CSS_COUNTER) { //文字列型をサポートしないCSS単位である場合

Modified: branches/08x/083/org/w3c/dom/svg.js
===================================================================
--- branches/08x/083/org/w3c/dom/svg.js	2011-08-13 11:28:39 UTC (rev 2869)
+++ branches/08x/083/org/w3c/dom/svg.js	2011-08-13 11:59:22 UTC (rev 2870)
@@ -751,9 +751,9 @@
       throw new SVGException(SVGException.SVG_INVALID_VALUE_ERR);
     }
   }
-  this.rgbColor.red.cssText = s[0];
-  this.rgbColor.green.cssText = s[1];
-  this.rgbColor.blue.cssText = s[2];
+  this.rgbColor.red.setFloatValue(/*CSSPrimitiveValue.CSS_NUMBER*/ 1, s[0]);
+  this.rgbColor.green.setFloatValue(1, s[1]);
+  this.rgbColor.blue.setFloatValue(1, s[2]);
   rgbColor = s = _parseInt = null;
 };
 
@@ -4495,7 +4495,7 @@
         /*再度、設定。css.jsのsetPropertyを参照*/
         sstyle.setProperty("color", sstyle.getPropertyValue("color"));
       }
-      color[i] =  "rgb(" +ci.rgbColor.red.cssText+ "," +ci.rgbColor.green.cssText+ "," +ci.rgbColor.blue.cssText+ ")";
+      color[i] =  "rgb(" +ci.rgbColor.red.getFloatValue(1)+ "," +ci.rgbColor.green.getFloatValue(1)+ "," +ci.rgbColor.blue.getFloatValue(1)+ ")";
       colors[i] = stop.offset.baseVal + " " + color[i];
       opacity[i] = (sstyle.getPropertyValue("stop-opacity") || 1) * t.getPropertyValue("fill-opacity") * t.getPropertyValue("opacity");
     }




Sie-announce メーリングリストの案内
アーカイブの一覧に戻る