svnno****@sourc*****
svnno****@sourc*****
2010年 6月 30日 (水) 22:36:11 JST
Revision: 1914 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1914 Author: dhrname Date: 2010-06-30 22:36:11 +0900 (Wed, 30 Jun 2010) Log Message: ----------- SMIL言語に関する修正を施した Modified Paths: -------------- branches/06x/061/org/w3c/dom/events.js branches/06x/061/org/w3c/dom/smil.js branches/06x/061/org/w3c/dom/svg.js Modified: branches/06x/061/org/w3c/dom/events.js =================================================================== --- branches/06x/061/org/w3c/dom/events.js 2010-06-30 13:35:25 UTC (rev 1913) +++ branches/06x/061/org/w3c/dom/events.js 2010-06-30 13:36:11 UTC (rev 1914) @@ -151,21 +151,22 @@ /*最初に捕獲フェーズでDOMツリーを下っていき、イベントのターゲットについたら、 *そこで、浮上フェーズとして折り返すように、反復処理をおこなう */ - for (var i=0, n=1, sli = s.length, slii = sli*2-1;i<slii;++i){ - var d = sli - i; + for (var i=0, n=1, d=0, tce = null, sli = s.length, slii = sli*2-1;i<slii;++i){ + d = sli - i; if (d === 0){ //イベントのターゲットに到着(折り返し地点) n = -1; - evt.eventPhase = Event.AT_TARGET; + evt.eventPhase = 2;//Event.AT_TARGET; evt.currentTarget = evt.target; } else { evt.currentTarget = s[d*n-1]; } - var tce = evt.currentTarget._capter; //tceは登録しておいたリスナーのリスト + tce = evt.currentTarget._capter; //tceは登録しておいたリスナーのリスト for (var j=0,tcli=tce.length;j<tcli;++j){ if (tce[j]) { tce[j].handleEvent(evt); } } + j = tcli = null; if (evt._stop) { break; //stopPropagationメソッドが呼ばれたら、停止する } @@ -173,12 +174,12 @@ if (!evt.bubbles) { break; //浮上フェーズに移行せず、停止する } - evt.eventPhase = Event.BUBBLING_PHASE; + evt.eventPhase = 3;//Event.BUBBLING_PHASE; } } - var d = evt._default - evt = te = s = null; - return d; + var ed = evt._default + evt = te = s = d = tce = n = sli = slii = null; + return ed; }; function EventListener(cap,type,listener) { @@ -255,6 +256,8 @@ evt = new UIEvent(); } else if (eventType === "SVGEvents") { evt = new SVGEvent(); + } else if (eventType === "TimeEvents") { + evt = new TimeEvent(); } else { evt = new Event(); } Modified: branches/06x/061/org/w3c/dom/smil.js =================================================================== --- branches/06x/061/org/w3c/dom/smil.js 2010-06-30 13:35:25 UTC (rev 1913) +++ branches/06x/061/org/w3c/dom/smil.js 2010-06-30 13:36:11 UTC (rev 1914) @@ -67,17 +67,38 @@ typedef dom::DOMString DOMString; */ function ElementTimeControl(ele) { - this.tar = ele; + this._tar = ele; + /*_beginと_endプロパティはミリ秒数を収納する。リピート時に書き換えられることがある。 + *_beginはアニメ開始時の秒数。_endはアニメ終了時の秒数。 + *なお、文書読み込み終了時(アニメ開始時刻)の秒数を0とする。 + */ + this._begin = null; + this._end = null; return this; }; ElementTimeControl.prototype = { - /*void*/ beginElement : function() {}, - /*void*/ endElement : function() {}, - /*void*/ beginElementAt : function(/*float*/ offset) {}, - /*void*/ endElementAt : function(/*float*/ offset) {} + /*void*/ beginElement : function() { + var ttd = this._tar.ownerDocument, evt = ttd.createEvent("TimeEvents"); + evt.initTimeEvent("beginEvent", ttd.defaultView, 0); + this._tar.dispatchEvent(evt); + }, + /*void*/ endElement : function() { + var ttd = this._tar.ownerDocument, evt = ttd.createEvent("TimeEvents"); + evt.initTimeEvent("endEvent", ttd.defaultView, 0); + this._tar.dispatchEvent(evt); + }, + /*void*/ beginElementAt : function(/*float*/ offset) { + var ntc = this._tar.ownerDocument.rootElement.getCurrentTime(); + this._begin = offset + ntc; + }, + /*void*/ endElementAt : function(/*float*/ offset) { + var ntc = this._tar.ownerDocument.rootElement.getCurrentTime(); + this._end = offset + ntc; + } }; function TimeEvent() { + Event.apply(this); /*readonly attribute views::AbstractView*/ this.view; /*readonly attribute long*/ this.detail; return this; Modified: branches/06x/061/org/w3c/dom/svg.js =================================================================== --- branches/06x/061/org/w3c/dom/svg.js 2010-06-30 13:35:25 UTC (rev 1913) +++ branches/06x/061/org/w3c/dom/svg.js 2010-06-30 13:36:11 UTC (rev 1914) @@ -184,7 +184,7 @@ } else if (com === "scale") { s.setScale(degz, _parseFloat(deg[1] || deg[0])); } else if (com === "rotate") { - s.setRotate(degz); + s.setRotate(degz, 0, 0); } else if (com === "skewX") { s.setSkewX(degz); } else if (com === "skewY") { @@ -3750,7 +3750,11 @@ SVGElement.apply(this, arguments); /*readonly SVGElement*/ this.targetElement; this._currentTime = 0; - //smil::ElementTimeControl; + /*_simpleDurationプロパティは + *dur属性の値を収納しておく。属性がなければnullのまま + */ + this._simpleDuration = null; + //別モジュールであるsmil::ElementTimeControlを参照のこと var s = new ElementTimeControl(this); /*以下は関数のコピー *これによって、ElementTimeControlの多重継承を模擬する @@ -3765,13 +3769,61 @@ SVGAnimationElement.prototype = new SVGElement(); /*float*/ SVGAnimationElement.prototype.getStartTime = function(){ + if (!!this._begin) { + return (this._begin); + } else { + throw new DOMException(DOMException.INVALID_STATE_ERR); + } }; /*float*/ SVGAnimationElement.prototype.getCurrentTime = function(){ return (this._currentTime); }; /*float*/ SVGAnimationElement.prototype.getSimpleDuration = function(){ + if (!!!this._simpleDuration && !!!this._end) { + throw new DOMException(DOMException.NOT_SUPPORTED_ERR); + } else if (!!this._simpleDuration && !!this._end) { + var s = (this._simpleDuration > this._end - this._begin) ? this._end - this._begin : this._simpleDuration; + } else { + var s = !!this._end ? this._end - this._begin : this._simpleDuration; + } + return s; }; //raises( DOMException ); +NAIBU.Time = { + currentFrame : 0, + start : function() { + if (NAIBU.Clip.length > 0) { + NAIBU.stop = setInterval( (function() { + var ntc = NAIBU.Time.currentFrame++; + var nc = NAIBU.Clip; + var s = ntc * 41; + for (var i=0,ncli=nc.length;i<ncli;++i) { + var nci = nc[i]; + if (nci.getStartTime() <= s) { + if (nci.getCurrentTime() === 0) { + nci.beginElement(); + } + nci._currentTime += 41; + } + if (nci._end) { + if (nci._end <= s && nci.getCurrentTime() !== 0) { + nci.endElement(); + nci._currentTime = 0; + nci._begin = nci._end = null; + } + } + } + if (ntc > 7000) { + clearInterval(NAIBU.stop); + } + }), + 125 + ); + } + } +}; +NAIBU.Clip = []; + function SVGAnimateElement(){ SVGAnimationElement.apply(this, arguments); return this;