2 function eventRellay( e ){
5 type = X.UI.Event.NameToID[ e.type ],
7 data = X.UI.currentRootData,
10 if( type !== X.UI.Event._POINTER_MOVE && type !== X.UI.Event._MOUSE_MOVE ){
11 //console.log( type + ' x:' + x + ', y:' + y )
16 if( data && ( data = data.monopolyNodeData ) && ( ret = data.dispatch( e ) ) & X.Callback.MONOPOLY ) return ret;
17 if( X.UI.currentRootData === null ) return;
18 list = X.UI.currentRootData.hoverList;
19 data = X.UI.currentRootData.targetNodeData = X.UI.currentRootData;
21 data = X.UI.currentRootData.targetNodeData;
22 //console.log( 'absX: ' + data.absoluteX + ', absY:' + data.absoluteY )
23 // data.apiuser.updateCoursor( data.targetNodeData._cursor );
25 ret = data.dispatch( e, sysOnly );
26 if( ret & X.Callback.MONOPOLY || ret & X.Callback.STOP_PROPAGATION || ret & X.Callback.STOP_NOW ) break; // sysOnly = true;
27 data = data.parentData;
30 for( i = list.length; i; ){
31 parent = data = list[ --i ];
32 while( parent.parentData && parent === parent.parentData.hitChildData ){
33 parent = parent.parentData;
35 if( parent !== X.UI.currentRootData ){
36 data.hoverClassName && data.xnode.removeClass( data.hoverClassName );
37 data._listeners && data._listeners[ X.UI.Event.POINTER_OUT ] && data.dispatch( e, X.UI.Event.POINTER_OUT, false ); // new Event
43 data.hoverClassName && data.xnode.addClassName( data.hoverClassName );
44 data._listeners && data._listeners[ X.UI.Event.POINTER_IN ] && data.dispatch( e, X.UI.Event.POINTER_IN, true ); // new Event
52 * body が存在したら要素を作成、css も指定
53 * 背景画像を読み終える onload で活動開始
56 var _PageRoot = _Box.inherits(
58 X.Class.FINAL | X.Class.PRIVATE_DATA | X.Class.SUPER_ACCESS,
60 layout : X.UI.Layout.Canvas,
64 targetNodeData : null,
65 monopolyNodeData : null,
67 xnodeInteractiveLayer : null,
71 Constructor : function( layout, args ){
72 this.SuperConstructor( layout, args );
74 if( X.Dom.readyState === X.Dom.Event.XDOM_READY ){
75 X.Timer.once( 0, this, this.start );
77 X.Dom.listenOnce( X.Dom.Event.XDOM_READY, this, this.start );
81 this.eventCounter = {};
83 X.UI.currentRootData = this;
87 this.initialize( this.User, this, null, null );
88 X.Timer.once( 0, this, this.addToView );
90 addToView : function(){
91 var counter = this.eventCounter, flg;
93 // this.xnodeInteractiveLayer の前に追加する!
95 this.addToParent( X.Dom.Node.root );
97 this.xnodeInteractiveLayer = X.Dom.Node.root.create( 'div', {
98 'class' : 'mouse-operation-catcher',
102 // hover や rollover rollout のための move イベントの追加
103 // X.Dom.Event.activate, X.Dom.Event.deactivate ?
104 // mouseout, mouseover
105 if( navigator.msPointerEnabled || navigator.pointerEnabled ){
106 this.xnodeInteractiveLayer.listen( X.UI.Event.IdToName[ X.UI.Event._POINTER_MOVE ], eventRellay );
107 if( counter[ X.UI.Event._POINTER_MOVE ] ){
108 ++counter[ X.UI.Event._POINTER_MOVE ];
110 counter[ X.UI.Event._POINTER_MOVE ] = 1;
113 this.xnodeInteractiveLayer.listen( X.UI.Event.IdToName[ X.UI.Event._MOUSE_MOVE ], eventRellay );
114 if( counter[ X.UI.Event._MOUSE_MOVE ] ){
115 ++counter[ X.UI.Event._MOUSE_MOVE ];
117 counter[ X.UI.Event._MOUSE_MOVE ] = 1;
120 X.Timer.once( 0, this, this.afterAddToView );
122 afterAddToView : function(){
123 //this.afterAddition();
124 this.xnode.className( 'PageRoot' );
126 this.creationComplete();
127 X.Timer.once( 0, this, this.doFirstCalc );
130 doFirstCalc : function(){
134 .listen( X.Dom.Event.VIEW_RESIZED, this, this.calculate )
135 .listen( X.Dom.Event.BASE_FONT_RESIZED, this, this.calculate );
138 reserveCalc : function(){
139 if( this.calcReserved === false ){
140 this.calcReserved = true;
141 X.Timer.once( 0, this, this.calculate );
144 calculate : function( e ){
145 var font = X.Dom.baseFontSize,
148 size = X.Dom.getSize();
155 this.layout.calculate( this, false, 0, 0, w / font, h / font );
156 this.calcReserved = false;
159 updateCoursor : function( cursor ){
163 _remove : function(){
164 this.xnodeInteractiveLayer.unlisten();
165 _Box.prototype._remove.call( this );
170 var PageRoot = Box.presets(