svnno****@sourc*****
svnno****@sourc*****
2009年 9月 25日 (金) 23:19:42 JST
Revision: 1285
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1285
Author: dhrname
Date: 2009-09-25 23:19:42 +0900 (Fri, 25 Sep 2009)
Log Message:
-----------
getCTMメソッドなどを実装
Modified Paths:
--------------
branches/DOM/org/w3c/dom/svg.js
Modified: branches/DOM/org/w3c/dom/svg.js
===================================================================
--- branches/DOM/org/w3c/dom/svg.js 2009-09-25 14:19:10 UTC (rev 1284)
+++ branches/DOM/org/w3c/dom/svg.js 2009-09-25 14:19:42 UTC (rev 1285)
@@ -1593,6 +1593,7 @@
*TransformListはtransform属性を行列で表現したあとのリスト構造
*/
/*readonly attribute SVGAnimatedTransformList*/ this.transform = new SVGAnimatedTransformList();
+ this.transform._matrix = null; //SVGMatrixのキャッシュ
return this;
};
SVGElement.constructor = Element;
@@ -1601,33 +1602,50 @@
*プレゼンテーション属性の値を得る。これはCSSのスタイルの設定値を定めるときや、内部の動的処理に役立つ
*/
/*css::CSSValue*/ SVGElement.prototype.getPresentationAttribute = function(/*DOMString*/ name ) {
-
+ var s = new CSSValue(), tgn = this.attributes.getNamedItemNS(null, name);
+ if (!tgn) {
+ s.cssText = tgn.nodeValue;
+ return s;
+ } else {
+ return null;
+ }
}
/*interface SVGLocatable*/
/*SVGRect*/ SVGElement.prototype.getBBox = function(){};
-/*SVGMatrix*/ SVGElement.prototype.getCTM = function(){};
-/*SVGMatrix*/ SVGElement.prototype.getScreenCTM = function(){};
+/*getCTMメソッド
+ *CTMとは現在の利用座標系に対する変換行列
+ */
+/*SVGMatrix*/ SVGElement.prototype.getCTM = function(){
+ if (!this.transform._matrix) { //キャッシュがなければ、
+ var n = this.transform.baseVal.consolidate();
+ n = n ? n.matrix : this.documentElement.createSVGMatrix();
+ this.transform._matrix = this.parentNode.getCTM().multiply(n);
+ }
+ return (this.transform._matrix);
+};
+/*SVGMatrix*/ SVGElement.prototype.getScreenCTM = function(){
+ return (this.viewportElement.getCTM());
+};
/*SVGMatrix*/ SVGElement.prototype.getTransformToElement = function(/*SVGElement*/ element ){
-
+ var s = this.getCTM().inverse().multiply(element.getCTM());
}
function SVGAnimatedBoolean() {
- /*boolean*/ this.baseVal = true;
- /*readonly boolean*/ this.animVal;
+ /*boolean*/ this.animVal = this.baseVal = true;
return this;
};
function SVGAnimatedString() {
- /*String*/ this.baseVal = "";
- /*readonly String*/ this.animVal = "";
+ /*String*/ this.animVal = this.baseVal = "";
return this;
};
function SVGStringList() {
/*readonly unsigned long*/ this.numberOfItems = 0;
+ this._list = []; //リストの本体
return this;
};
SVGStringList.prototype = {
/*void*/ clear : function(){
-
+ this._list = [];
},
//raises( DOMException );
/*DOMString*/ initialize : function(/*DOMString*/ newItem ) {
@@ -2071,6 +2089,8 @@
/*readonly SVGAnimatedRect*/ this.viewBox = this.currentView.viewBox;
/*readonly SVGAnimatedPreserveAspectRatio*/ this.preserveAspectRatio = this.currentView.preserveAspectRatio;
/*unsigned short*/ this.zoomAndPan = SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE;
+ //あらかじめ、transformのキャッシュを作っておく
+ this.transform._matrix = this.createSVGMatrix();
return this;
};
SVGSVGElement.constructor = SVGElement;
@@ -2956,10 +2976,7 @@
SVGLineElement.constructor = SVGElement;
SVGLineElement.prototype = new SVGElement();
-function SVGAnimatedPoints {
- /*readonly SVGPointList points;
- /*readonly SVGPointList animatedPoints;
- };
+
function SVGPolylineElement :
SVGElement,
SVGTests,
@@ -2968,7 +2985,10 @@
SVGStylable,
SVGTransformable,
events::EventTarget,
- SVGAnimatedPoints {};
+ SVGAnimatedPoints {
+ //interface SVGAnimatedPoints
+ /*readonly SVGPointList*/ this.animatedPoints = this.points = new SVGPointList();
+};
function SVGPolygonElement :
SVGElement,
SVGTests,