X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F02_dom%2F20_XNode.js;fp=0.6.x%2Fjs%2F02_dom%2F20_XNode.js;h=e40f8325f5bd7cc1c11a8a64d4a72e3989b79709;hb=fef2e81d242a7ebd86dcb1089338303ef28659d5;hp=b0c37239c6a58a10a46fba0d4930f2e42729299e;hpb=a720658bd6302a1bd5efae47333b6df793370f3d;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/02_dom/20_XNode.js b/0.6.x/js/02_dom/20_XNode.js index b0c3723..e40f832 100644 --- a/0.6.x/js/02_dom/20_XNode.js +++ b/0.6.x/js/02_dom/20_XNode.js @@ -560,7 +560,8 @@ function X_Node_append( v ){ return X_Node_append.apply( this, X_HtmlParser_parse( v, true ) ); case X_NodeType_XNODE : // 親の xnodes から v を消す - v.parent && v[ 'remove' ](); + if( v.parent === this && xnodes[ xnodes.length - 1 ] === v ) return this; + v[ 'remove' ](); // IE4 でテキストノードの追加、FIXED 済でない場合、親に要素の追加を通知 if( X_UA[ 'IE4' ] && !v[ '_tag' ] && ( ( this[ '_flags' ] & X_NodeFlags_IE4_FIXED ) === 0 ) ) this[ '_flags' ] |= X_NodeFlags_IE4_DIRTY_CHILDREN; break; @@ -780,6 +781,13 @@ function X_Node_remove(){ if( !parent ) return this; + // TODO anime + // stop() -> + if( this[ '_anime' ] && this[ '_anime' ].phase ){ + console.log( 'Animation 中の REMOVE' ); + this[ 'stop' ](); + }; + delete this.parent; parent[ '_xnodes' ].splice( parent[ '_xnodes' ].indexOf( this ), 1 ); @@ -852,7 +860,13 @@ function X_Node_onKill( that ){ }; X_Node_CHASHE[ that[ '_uid' ] ] = null; // array に対して delete X_Node_CHASHE[ uid ] はまずい! - + +// TODO anime + if( that[ '_anime' ] && that[ '_anime' ].phase ){ + console.log( 'Animation 中の KILL' ); + that[ 'stop' ](); + }; + // remove _xnodes if( X_UA_DOM.IE4 ){ if( elm ){ @@ -882,17 +896,22 @@ function X_Node_onKill( that ){ */ function X_Node_contains( v ){ var elm, type, xnodes, i; + if( !v || !this[ '_tag' ] || this === v ) return false; + // contains ie4+ + /* if( ( elm = this[ '_rawObject' ] || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this ) ) && document.contains && ( type = X_Node_getType( v ) ) && ( type === X_NodeType_RAW_HTML || type === X_NodeType_RAW_TEXT ) ){ return elm.contains( v ); - }; + }; */ //if( document.compareDocumentPosition ){ // //}; + xnodes = this[ '_xnodes' ]; if( !xnodes || !xnodes.length ) return false; + if( this === v[ 'parent' ] ) return true; // fast if( xnodes.indexOf( v ) !== -1 ) return true; // fast for( i = xnodes.length; i; ){ if( xnodes[ --i ][ 'contains' ]( v ) ) return true; @@ -1218,6 +1237,12 @@ function X_Node_call( name /*, opt_args... */ ){ return this.parent ? X_Node_CSS_getCharSize( this ) : 0; case 'inGPU' : return !!( this[ '_flags' ] & ( X_NodeFlags_GPU_NOW | X_NodeFlags_GPU_RELEASE_RESERVED ) ); + case 'canAnimateNow' : + return ( this[ '_flags' ] & X_NodeFlags_IN_TREE ) && X_NodeAnime_detectWaitAnimation( this, true, true ) === 6; + case 'animeState' : + return this[ '_anime' ] ? this[ '_anime' ].phase : 0; + case 'animeProgress' : + return this[ '_anime' ] && this[ '_anime' ].phase === 7 ? this[ '_anime' ].progress : 0; }; X_Node_updateTimerID && X_Node_startUpdate(); @@ -1362,6 +1387,7 @@ function X_Node_startUpdate( time ){ for( ; i; ){ xnodeOrElm = removal[ --i ]; // TODO GPU レイヤーの子の場合、remove をスキップする。 非GPU レイヤーへ apppend される場合、clone する? + // GPU レイヤーを削除する場合、cssText = '' して GPU レイヤーを解除する if( !xnodeOrElm[ 'instanceOf' ] ){ if( X_UA_DOM.IE4 ){ xnodeOrElm.removeAttribute( 'id' ); // ? @@ -1424,14 +1450,14 @@ var X_Node__commitUpdate = // 1. GPU 一切の更新をスキップ if( that[ '_flags' ] & X_NodeFlags_GPU_NOW ){ - //console.log( '更新のskip ' + !!( that[ '_flags' ] & X_Node_BitMask_IS_DIRTY ) ); + console.log( '更新のskip ' + !!( that[ '_flags' ] & X_Node_BitMask_IS_DIRTY ) ); that[ '_flags' ] & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm ); return elm; }; // 2. GPU解放予約 if( that[ '_flags' ] & X_NodeFlags_GPU_RELEASE_RESERVED ){ - // console.log( 'GPU 解放 ' ); + console.log( 'GPU 解放 ' ); //X_Node_updateReservedByReleaseGPU = true; that[ '_flags' ] &= X_Node_BitMask_RESET_GPU; //return elm;// TODO もしかしたらこのタイミングで更新できるかも。 @@ -1439,6 +1465,7 @@ var X_Node__commitUpdate = // 3. GPU予約 -> GPU if( that[ '_flags' ] & X_NodeFlags_GPU_RESERVED ){ + // TODO size 取得のための update の場合、GPU化を待つ that[ '_flags' ] &= X_Node_BitMask_RESET_GPU; that[ '_flags' ] |= X_NodeFlags_GPU_NOW; };