3 * redraw 再描画はパラメータ変更後に setTimeout で
\r
4 * reflow 再計算は値が get された場合 invalidate が サイズだったら
\r
5 * または再描画前に invalidate がサイズなフラグが足っていたら
\r
8 var BasicLayoutManager = X.Class.create(
\r
9 'BasicLayoutManager',
\r
10 X.Class.POOL_OBJECT,
\r
12 Constructor : function(){
\r
15 redraw : function( nodeData ){
\r
16 var root = nodeData.__root;
\r
17 root.dirty === X.Css.Dirty.REFLOW && this.reflow( root );
\r
21 reflow : function( nodeData, allowW, allowH ){
\r
22 nodeData.preMesure( allowW, allowH );
\r
24 var children = nodeData.children,
\r
25 contentW = nodeData.contentWidth,
\r
26 contentH = nodeData.contentHeight,
\r
27 autoW = contentW === AUTO,
\r
28 autoH = contentH === AUTO,
\r
29 auto, calc, childW, childH, child, i, style, data,
\r
32 auto = autoW && autoH;
\r
35 calc = BasicLayoutManager.calcValue;
\r
36 for( i = children.length; i; ){
\r
37 child = children[ --i ];
\r
38 style = child.__style;
\r
41 t = calc( data[ X.Css.AttrNo.top ], contentH );
\r
42 r = calc( data[ X.Css.AttrNo.right ], contentW );
\r
43 b = calc( data[ X.Css.AttrNo.bottom ], contentH );
\r
44 l = calc( data[ X.Css.AttrNo.left ], contentW );
\r
48 if( child instanceof LayoutBoxPrivate ){
\r
49 child.layoutManager.reflow( child, contentW - r - l, contentH - t - b );
\r
51 child.preMesure( contentW - r - l, contentH - t - b );
\r
55 if( !auto ) continue;
\r
56 if( autoW && childW < child.boxWidth + r + l ) childW = child.boxWidth + r + l;
\r
57 if( autoH && childH < child.boxHeight + t + b ) childH = child.boxHeight + t + b;
\r
59 if( autoW ) nodeData.contentWidth = childW;
\r
60 if( autoH ) nodeData.contentHeight = childH;
\r
62 ( autoW || autoH ) && nodeData.postMesure();
\r
64 delete nodeData.dirty;
\r
68 BasicLayoutManager.finalValue = function( styleValue, styleMin, styleMax, srcValue ){
\r
69 var calc = BasicLayoutManager.calcValue,
\r
70 v = calc( styleValue, srcValue ),
\r
71 min = calc( styleMin, srcValue ),
\r
72 max = calc( styleMax, srcValue );
\r
73 if( v < min ) return min;
\r
74 if( max < v ) return max;
\r
77 BasicLayoutManager.calcValue = function( styleValue, srcValue ){
\r
78 switch( styleValue ){
\r
84 return srcValue; // 100%
\r
86 if( 1 <= styleValue ) return styleValue; // legth
\r
87 if( -1 < styleValue ) return FLOOR( srcValue * styleValue ); // %
\r
89 return styleValue; // - length
\r
91 BasicLayoutManager.advancedCalcValue = function( styleValue, srcValue ){
\r
92 switch( styleValue ){
\r
98 throw new Error( 'advancedCalcValue FULL' );
\r
101 if( 1 <= styleValue ) return styleValue;
\r
102 if( -1 < styleValue ) return FLOOR( ( srcValue / ( 1 - styleValue ) ) * styleValue ); // %
\r
104 return styleValue; // - length
\r