X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F20_ui%2F20_PageRoot.js;h=e4d2ab4dd7dd960b455e9230b0ba7b6e4eca435c;hb=20c3a948b20e52efc28fd103fc075d787c6d65d2;hp=16521e37e719b33a6515c006f624e735b1704ae0;hpb=42e0982b02a99c71702ce8cd8740645aefdc8097;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/20_ui/20_PageRoot.js b/0.6.x/js/20_ui/20_PageRoot.js index 16521e3..e4d2ab4 100644 --- a/0.6.x/js/20_ui/20_PageRoot.js +++ b/0.6.x/js/20_ui/20_PageRoot.js @@ -2,10 +2,10 @@ var X_UI_rootData = null, X_UI_eventBusy = false; function X_UI_eventRellay( e ){ - var font = X.ViewPort.getBaseFontSize(), - x = e.clientX / font, - y = e.clientY / font, - type = X.UI.Event.NameToID[ e.type ], + var font = X_ViewPort_baseFontSize, + x = e.pageX / font, // clientX は iOS4- で通らない? + y = e.pageY / font, + type = XUI_Event.NameToID[ e.type ], i = 0, data = X_UI_rootData, sysOnly = false, @@ -16,13 +16,13 @@ function X_UI_eventRellay( e ){ if( !data || X_UI_eventBusy ) return ret; data._eventBusy = true; - if( type !== '' + X.UI.Event._POINTER_MOVE ){ + if( type !== '' + XUI_Event._POINTER_MOVE ){ //console.log( e.type + ' ' + type + ' x:' + x + ', y:' + y ); }; e.type = type; - if( data && ( data = data.monopolyNodeData ) && ( ret = data[ 'dispatch' ]( e ) ) & X_Callback_MONOPOLY ){ + if( data && ( data = data.monopolyNodeData ) && ( ret = data[ 'dispatch' ]( e ) ) & X_Callback_CAPTURE_POINTER ){ X_UI_eventBusy = false; return ret | X_Callback_PREVENT_DEFAULT; }; @@ -36,7 +36,7 @@ function X_UI_eventRellay( e ){ while( data ){ _ret = data[ 'dispatch' ]( e, sysOnly ); ret |= _ret; - if( _ret & X_Callback_MONOPOLY || _ret & X_Callback_STOP_PROPAGATION || _ret & X_Callback_STOP_NOW ) break; // sysOnly = true; + if( _ret & X_Callback_CAPTURE_POINTER || _ret & X_Callback_STOP_PROPAGATION || _ret & X_Callback_STOP_NOW ) break; // sysOnly = true; data = data.parentData; }; @@ -47,14 +47,14 @@ function X_UI_eventRellay( e ){ }; if( parent !== X_UI_rootData ){ data.hoverClassName && data.xnode[ 'removeClass' ]( data.hoverClassName ); - data._listeners && data._listeners[ X.UI.Event.POINTER_OUT ] && data[ 'dispatch' ]( e, X.UI.Event.POINTER_OUT, false ); // new Event + data[ '_listeners' ] && data[ '_listeners' ][ XUI_Event.POINTER_OUT ] && data[ 'dispatch' ]( e, XUI_Event.POINTER_OUT, false ); // new Event delete data.hovering; list.splice( i, 1 ); continue; }; if( !data.hovering ){ data.hoverClassName && data.xnode.addClassName( data.hoverClassName ); - data._listeners && data._listeners[ X.UI.Event.POINTER_IN ] && data[ 'dispatch' ]( e, X.UI.Event.POINTER_IN, true ); // new Event + data[ '_listeners' ] && data[ '_listeners' ][ XUI_Event.POINTER_IN ] && data[ 'dispatch' ]( e, XUI_Event.POINTER_IN, true ); // new Event data.hovering = true; }; }; @@ -67,11 +67,11 @@ function X_UI_eventRellay( e ){ * 背景画像を読み終える onload で活動開始 */ -X.UI._PageRoot = X.UI._Box.inherits( +var XUI_PageRoot = XUI_Box.inherits( '_PageRoot', - X.Class.FINAL | X.Class.PRIVATE_DATA | X.Class.SUPER_ACCESS, + X_Class.FINAL, { - layout : X.UI.Layout.Canvas, + layout : XUI_Layout_Canvas, calcReserved : false, hoverList : null, @@ -82,8 +82,8 @@ X.UI._PageRoot = X.UI._Box.inherits( eventCounter : null, cursorStyle : null, - Constructor : function( layout, args ){ - this[ 'Super' ]( layout, args ); + Constructor : function( user, layout, args ){ + this[ 'Super' ]( user, layout, args ); if( X_ViewPort_readyState === X_EVENT_XDOM_READY ){ X_Timer_once( 0, this, this.start ); @@ -114,11 +114,11 @@ X.UI._PageRoot = X.UI._Box.inherits( } ); // hover や rollover rollout のための move イベントの追加 - this.xnodeInteractiveLayer[ 'listen' ]( X.UI.Event.IdToName[ X.UI.Event._POINTER_MOVE ], X_UI_eventRellay ); - if( counter[ X.UI.Event._POINTER_MOVE ] ){ - ++counter[ X.UI.Event._POINTER_MOVE ]; + ( X_UA[ 'IE' ] < 9 ? X_ViewPort_document : X_UA[ 'Opera' ] < 8 ? X_Node_body : X_ViewPort )[ 'listen' ]( 'pointermove', X_UI_eventRellay ); + if( counter[ XUI_Event._POINTER_MOVE ] ){ + ++counter[ XUI_Event._POINTER_MOVE ]; } else { - counter[ X.UI.Event._POINTER_MOVE ] = 1; + counter[ XUI_Event._POINTER_MOVE ] = 1; }; X_Timer_once( 0, this, this.afterAddToView ); @@ -127,15 +127,7 @@ X.UI._PageRoot = X.UI._Box.inherits( this.xnode[ 'className' ]( 'PageRoot' ); this.creationComplete(); - X_Timer_once( 0, this, this.doFirstCalc ); - }, - - doFirstCalc : function(){ - this.calculate(); - this.phase = 4; - X.ViewPort - [ 'listen' ]( X_EVENT_VIEW_RESIZED, this, this.calculate ) - [ 'listen' ]( X_EVENT_BASE_FONT_RESIZED, this, this.calculate ); + X_Timer_once( 0, this, XUI_PageRoot_do1stCalculate ); }, reserveCalc : function(){ @@ -145,12 +137,23 @@ X.UI._PageRoot = X.UI._Box.inherits( }; }, calculate : function( e ){ - var size = X.ViewPort.getSize(), - font = X.ViewPort.getBaseFontSize(), - w = size[ 0 ], - h = size[ 1 ]; - this.layout.calculate( this, false, 0, 0, w / font, h / font ); + var cancelable = !e || ( e.type !== X_EVENT_VIEW_RESIZED && e.type !== X_EVENT_BASE_FONT_RESIZED ), + size, font, w, h; + + if( this[ 'dispatch' ]( { type : XUI_Event.LAYOUT_BEFORE, 'cancelable' : cancelable } ) & X_Callback_PREVENT_DEFAULT && cancelable ){ + return X_Callback_NONE; + }; + + size = X[ 'ViewPort' ][ 'getSize' ](); + font = X[ 'ViewPort' ][ 'getBaseFontSize' ](); + this.layout.calculate( this, false, 0, 0, size[ 0 ] / font, size[ 1 ] / font ); + this.updateLayout(); + this.calcReserved = false; + + X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, XUI_PageRoot_onViewUpdate ); + + return X_Callback_NONE; }, updateCoursor : function( cursor ){ @@ -158,18 +161,53 @@ X.UI._PageRoot = X.UI._Box.inherits( }, _remove : function(){ - this.xnodeInteractiveLayer[ 'unlisten' ](); + X_EventDispatcher_unlistenAll( this.xnodeInteractiveLayer ); _Box.prototype._remove.call( this ); } } ); +function XUI_PageRoot_do1stCalculate(){ + this.calculate(); + this.phase = 4; + X.ViewPort + [ 'listen' ]( X_EVENT_VIEW_RESIZED, this, this.calculate ) + [ 'listen' ]( X_EVENT_BASE_FONT_RESIZED, this, this.calculate ); +}; + +function XUI_PageRoot_onViewUpdate( e ){ + this[ 'dispatch' ]( XUI_Event.LAYOUT_COMPLETE ); +}; + +//var XUI_PageRoot; +// TODO singleton +X.UI.PageRoot = X.UI.Box.inherits( + 'PageRoot', + X_Class.NONE, + { + Constructor : function(){ + var supports; + + //if( !XUI_PageRoot ){ + supports = XUI_Attr_createAttrDef( XUI_Box.prototype.usableAttrs, XUI_Layout_Canvas.overrideAttrsForSelf ); + + XUI_PageRoot.prototype.layout = XUI_Layout_Canvas; + XUI_PageRoot.prototype.usableAttrs = supports; + XUI_PageRoot.prototype.attrClass = XUI_Attr_preset( XUI_Box.prototype.attrClass, supports, { + width : '100%', + height : '100%' + } ); + //}; + X_Pair_create( this, XUI_PageRoot( this, XUI_Layout_Canvas, arguments ) ); + } + }); +/* X.UI.PageRoot = X.UI.Box.presets( 'PageRoot', - X.UI._PageRoot, + XUI_PageRoot, { width : '100%', height : '100%' } -); +);*/