svnno****@sourc*****
svnno****@sourc*****
2010年 11月 11日 (木) 23:46:59 JST
Revision: 2136
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2136
Author: dhrname
Date: 2010-11-11 23:46:59 +0900 (Thu, 11 Nov 2010)
Log Message:
-----------
animate要素の実装開始
Modified Paths:
--------------
branches/06x/063/org/w3c/dom/svg.js
Modified: branches/06x/063/org/w3c/dom/svg.js
===================================================================
--- branches/06x/063/org/w3c/dom/svg.js 2010-11-11 14:30:42 UTC (rev 2135)
+++ branches/06x/063/org/w3c/dom/svg.js 2010-11-11 14:46:59 UTC (rev 2136)
@@ -4746,45 +4746,36 @@
*この_valueListプロパティはアニメの際に使うので、_valuesプロパティはアニメ中に使わない
*/
if (!!tta) {
- var base = tta.baseVal;
for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {
- if (base instanceof SVGLength) {
- tta.baseVal = tar.ownerDocument.documentElement.createSVGLength();
- } else if (base instanceof SVGRect) {
- tta.baseVal = tar.ownerDocument.documentElement.createSVGRect();
- } else {
- return;
- }
- ttr.setAttributeNS(null, attrName, tav[i]);
- tar._valueList[tar._valueList.length] = tta.baseVal;
+ var vir = ttr.cloneNode(false); //仮の要素
+ vir.setAttributeNS(null, attrName, tav[i]);
+ tar._valueList[tar._valueList.length] = vir.baseVal;
}
- tta.baseVal = base;
+ } else if (!!CSS2Properties[attrName] || attrName.indexOf("-") > -1) { //スタイルシートのプロパティならば
+ tar._valueList = tar._value;
} else if ("animatedPoints" in ttr) {
- var base = ttr.points;
for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {
- ttr.points = new SVGPointList();
- ttr.setAttributeNS(null, "points", tav[i]);
- tar._valueList[tar._valueList.length] = ttr.points;
+ var vir = ttr.cloneNode(false); //仮の要素
+ vir.setAttributeNS(null, "points", tav[i]);
+ tar._valueList[tar._valueList.length] = vir.points;
}
- ttr.points = base;
} else if ("normalizedPathSegList" in ttr) {
- var base = ttr.normalizedPathSegList;
for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {
- ttr.normalizedPathSegList = new PathSegList();
- ttr.setAttributeNS(null, "d", tav[i]);
- tar._valueList[tar._valueList.length] = ttr.normalizedPathSegList;
+ var vir = ttr.cloneNode(false); //仮の要素
+ vir.setAttributeNS(null, "d", tav[i]);
+ tar._valueList[tar._valueList.length] = vir.normalizedPathSegList;
}
- ttr.normalizedPathSegList = base;
} else {
return;
}
- tta = null;
+ evt = tta = vir = null;
}, false);
}, false);
this.addEventListener("beginEvent", function(evt) {
var tar = evt.target;
var attrName = tar.getAttributeNS(null, "attributeName"), newAttr = tar.targetElement.attributes.getNamedItemNS(null, attrName);
- var tta = tar.targetElement[attrName];
+ var ttr = tar.targetElement, tta = ttr[attrName];
+ var vir = ttr.cloneNode(false), vta = vir[attrName];
tar._frame = function() {
var d = tar.getSimpleDuration(), n = tar._values.length - 1;
if ((n !== -1) && (d !== 0)) {
@@ -4792,29 +4783,52 @@
} else {
return;
}
+ var ii = Math.floor(tar.getCurrentTime() * ntd);
if (!!tta) {
var base = tta.baseVal;
- var ii = Math.floor(tar.getCurrentTime() * ntd);
- /*setAttrbute(NS)メソッドはDOM属性を書き換えるため利用しない。
- *
- * 参照:アニメーションサンドイッチモデル
- * >アニメーションが起動している時,それは実際,DOMの中の属性値は変化しない。
- *http://www.jsa.or.jp/stdz/instac/syoukai/H13/H13annual_report/12/ngc-wg3/offline/smil_20_20020131/animation.html#animationNS-AnimationSandwichModel
- */
- var evt = tar.ownerDocument.createEvent("MutationEvents");
- evt.initMutationEvent("DOMAttrModified", true, false, newAttr, newAttr, tar._to, attrName, MutationEvent.MODIFICATION);
- tar.targetElement.dispatchEvent(evt);
- evt = null;
- /*変化値はanimValプロパティに収納しておき、
- *変化する前の、元の値はbaseValプロパティに再び収納しておく
- */
- tta.animVal = tta.baseVal;
- tta.baseVal = base;
+ tta.baseVal = vta;
+ } else if (!!CSS2Properties[attrName] || attrName.indexOf("-") > -1) { //スタイルシートのプロパティならば
+ var base = null;
+ } else if ("animatedPoints" in ttr) {
+ var base = tta.points;
+ tta.points = vta;
+ } else if ("normalizedPathSegList" in ttr) {
+ var base = tta.normalizedPathSegList;
+ tta.normalizedPathSegList = vta;
}
+ /*setAttrbute(NS)メソッドはDOM属性を書き換えるため利用しない。
+ *
+ * 参照:アニメーションサンドイッチモデル
+ * >アニメーションが起動している時,それは実際,DOMの中の属性値は変化しない。
+ *http://www.jsa.or.jp/stdz/instac/syoukai/H13/H13annual_report/12/ngc-wg3/offline/smil_20_20020131/animation.html#animationNS-AnimationSandwichModel
+ */
+ var evt = tar.ownerDocument.createEvent("MutationEvents");
+ evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
+ ttr.dispatchEvent(evt);
+ evt = null;
+ if (!!tta) {
+ /*変化値はanimValプロパティに収納しておき、
+ *変化する前の、元の値はbaseValプロパティに再び収納しておく
+ */
+ tta.animVal = tta.baseVal;
+ tta.baseVal = base;
+ } else if (!base) { //スタイルシートのプロパティならば
+ } else if ("animatedPoints" in ttr) {
+ tta.animatedPoints = tta.points;
+ tta.points = base;
+ } else if ("normalizedPathSegList" in ttr) {
+ tta.animatednormalizedPathSegList = tta.normalizedPathSegList;
+ tta.normalizedPathSegList = base;
+ }
};
+ evt = vir = null;
}, false);
this.addEventListener("endEvent", function(evt) {
var tar = evt.target;
+ var evt = tar.ownerDocument.createEvent("MutationEvents");
+ evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
+ tar.targetElement.dispatchEvent(evt);
+ evt = null;
}, false);
this.addEventListener("repeatEvent", function(evt) {
var tar = evt.target;