[Sie-announce] SIEコード [1747] CSSPrimitiveValueオブジェクトのメソッドなどを修正

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 3月 22日 (月) 20:27:03 JST


Revision: 1747
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1747
Author:   dhrname
Date:     2010-03-22 20:27:03 +0900 (Mon, 22 Mar 2010)

Log Message:
-----------
CSSPrimitiveValueオブジェクトのメソッドなどを修正

Modified Paths:
--------------
    branches/ufltima/dom/css.js

Modified: branches/ufltima/dom/css.js
===================================================================
--- branches/ufltima/dom/css.js	2010-03-22 11:26:28 UTC (rev 1746)
+++ branches/ufltima/dom/css.js	2010-03-22 11:27:03 UTC (rev 1747)
@@ -287,6 +287,7 @@
   CSSValue.call(this, arguments);
   this.cssValueType = CSSValue.CSS_PRIMITIVE_VALUE;
   this.primitiveType = CSSPrimitiveValue.CSS_UNKNOWN;
+  this._value = 1;
   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に統一)
   return this;
 };
@@ -324,7 +325,7 @@
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
   this.primitiveType = unitType;
-  this.value = floatValue * this._n[unitType-1];  //値はあらかじめ、利用しやすいように変換しておく
+  this._value = floatValue * this._n[unitType-1];  //値はあらかじめ、利用しやすいように変換しておく
 };
 /*getFloatValueメソッド
  *別の単位に変換可能。
@@ -333,37 +334,57 @@
   if (CSSPrimitiveValue.CSS_UNKNOWN >= unitType && unitType >= CSSPrimitiveValue.CSS_STRING) { //浮動小数点数単位型をサポートしないCSS単位である場合
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
-  return (this.value / this._n[unitType-1]);
+  return (this._value / this._n[unitType-1]);
 };
 /*void*/ CSSPrimitiveValue.prototype.setStringValue = function(/*short*/ stringType, /*string*/ stringValue) {
   if (CSSPrimitiveValue.CSS_DIMENSION >= stringType && stringType >= CSSPrimitiveValue.CSS_COUNTER) { //文字列型をサポートしないCSS単位である場合
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
-  this.value = stringValue;
+  this.cssText = stringValue;
 };
 /*string*/ CSSPrimitiveValue.prototype.getStringValue = function() {
   if (CSSPrimitiveValue.CSS_DIMENSION >= stringType && stringType >= CSSPrimitiveValue.CSS_COUNTER) { //文字列型をサポートしないCSS単位である場合
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
-  return (this.value);
+  return (this.cssText);
 };
 /*Counter*/ CSSPrimitiveValue.prototype.getCounterValue = function() {
   if (this.primitiveType !== CSSPrimitiveValue.CSS_COUNTER) { //Counter型ではないとき
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
-  return (this.value);
+  return (new Counter());
 };
 /*Rect*/ CSSPrimitiveValue.prototype.getRectValue = function() {
   if (this.primitiveType !== CSSPrimitiveValue.CSS_RECT) { //Rect型ではないとき
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
-  return (this.value);
+  return (new Rect());
 };
 /*RGBColor*/ CSSPrimitiveValue.prototype.getRGBColorValue = function() {
   if (this.primitiveType !== CSSPrimitiveValue.CSS_RGBCOLOR) { //RGBColor型ではないとき
     throw new DOMException(DOMException.INVALID_ACCESS_ERR);
   }
-  return (this.value);
+  var s = new RGBColor();
+  var rgbColor = this.cssText;
+  var tkr = SVGColor.prototype._keywords[rgbColor];
+  if (tkr !== void 0) {
+    rgbColor = tkr;
+  }
+  if (rgbColor.indexOf("%", 5) > 0) {      // %を含むrgb形式の場合
+    rgbColor = rgbColor.replace(/[\d.]+%/g, function(t) {
+      return Math.round((2.55 * parseFloat(t)));
+    });
+  } else if (rgbColor.indexOf("#") > 0) {  //#を含む場合
+    rgbColor = rgbColor.replace(/[\dA-F][\dA-F]/g, function(t) {
+      return parseInt(t, 16);
+    });
+  }
+  var n = rgbColor.match(/\d+/g);
+  s.red.setFloatValue(CSSPrimitiveValue.CSS_NUMBER, parseFloat(n[0]));
+  s.green.setFloatValue(CSSPrimitiveValue.CSS_NUMBER, parseFloat(n[1]));
+  s.blue.setFloatValue(CSSPrimitiveValue.CSS_NUMBER, parseFloat(n[2]));
+  n = rgbColor = null;
+  return (s);
 };
 
 /*CSSValueList




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