width : 100%;\r
height : 100%;\r
overflow : hidden;\r
- margin : 0;\r
- padding : 0;/* opera 8 */\r
- border : 0;\r
+ margin : 0;\r
+ padding : 0;/* opera 8 */\r
+ border : 0;\r
}\r
\r
- body {\r
+ .IE5x body,\r
+ .IE6 body,\r
+ .IE7 body,\r
+ .IE8 body {\r
font-size : 16px; /* px 指定しないと ie8- で要素のサイズが狂う */\r
}\r
\r
+ /*\r
+ * http://loconet.web2.jp/blog/archives/2007/02/cssfontfamily.html\r
+ */\r
+ body, textarea {\r
+ font-family:'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro','メイリオ',Meiryo,'MS Pゴシック',sans-serif;\r
+ }\r
+ .IE5x body, .IE5x textarea,\r
+ .IE6 body, .IE6 textarea, {\r
+ font-family: 'MS Pゴシック',sans-serif;\r
+ }\r
+\r
.PageRoot {\r
height : 100%;\r
}\r
-khtml-box-sizing : border-box;\r
-webkit-box-sizing : border-box;*/\r
/* browser bug fix */\r
- -moz-opacity : 0.99;\r
+\r
zoom : 1;\r
- \r
- *word-break : break-all; /* ie5+ */\r
+\r
word-wrap : break-word; /* IE5.5?5?, Firefox3.5, Chrome1 Opera10.5 Safari1 */\r
white-space : pre; /* CSS 2.0 */\r
white-space : pre-wrap; /* CSS 2.1 */\r
/* white-space : -pre-wrap; Opera 4-6 */\r
white-space : -o-pre-wrap; /* Opera 7 */\r
white-space : -moz-pre-wrap; /* Mozilla */\r
- /* white-space : -hp-pre-wrap; HP Printers */\r
- white-space : normal\9; /* ie系では、 float要素へ回り込みする、 white-space の効いているテキストの位置が狂う */\r
+ /* white-space : -hp-pre-wrap; HP Printers */ \r
+}\r
+.IE5x .PageRoot, .IE5x .PageRoot div,\r
+.IE6 .PageRoot, .IE6 .PageRoot div,\r
+.IE7 .PageRoot, .IE7 .PageRoot div, {\r
+ word-break : break-all; /* ie5+ */\r
+}\r
+.IE .PageRoot, .IE .PageRoot div {\r
+ white-space : normal/* ie系では、 float要素へ回り込みする、 white-space の効いているテキストの位置が狂う */\r
}\r
\r
* {zoom:1}\r
tap-highlight-color : rgba(0,0,0,0);\r
-webkit-tap-highlight-color : rgba(0,0,0,0);\r
}\r
- .ActiveX-enabled .mouse-operation-catcher {\r
+ .ActiveX .mouse-operation-catcher {\r
background-color : #fff;\r
filter : alpha( opacity=0 );\r
}\r
* see http://qiita.com/sou/items/5688d4e7d3a37b4e2ff1\r
--------------------------------------------------------------------------------------*/\r
#fps-slowdown-make-sound-noisy {\r
- width: 0px;\r
- height: 0px;\r
- position: absolute;\r
- -webkit-animation-name: anim-void;\r
- -webkit-animation-duration: 1s;\r
- -webkit-animation-iteration-count: infinite;\r
+ width : 0px;\r
+ height : 0px;\r
+ position : absolute;\r
+ -webkit-animation-name : anim-void;\r
+ -webkit-animation-duration : 1s;\r
+ -webkit-animation-iteration-count : infinite;\r
}\r
@-webkit-keyframes anim-void {\r
from {\r
\r
\r
<script type="text/javascript" src="js/20_ui/00_XUI.js"></script>\r
+<script type="text/javascript" src="js/20_ui/01_XUI_LayoutBase.js"></script>\r
<script type="text/javascript" src="js/20_ui/02_XUI_Attr.js"></script>\r
<script type="text/javascript" src="js/20_ui/04_XUI_Event.js"></script>\r
<script type="text/javascript" src="js/20_ui/05_XUI_Gesture.js"></script>\r
* @alias X.UA\r
* @type {object}\r
*/\r
-var X_UA = X[ 'UA' ] = {};\r
+var X_UA = X[ 'UA' ] = {},\r
+ X_UA_classNameForHTML = 'js-enabled ';\r
\r
(function(){\r
var dua = navigator.userAgent,\r
* @alias X.UA.IECompat\r
* @type {number}\r
*/\r
- X_UA[ 'IECompat' ] = /* v !== X_UA[ '_IE' ] || */ tridentToVer !== X_UA[ '_IE' ] && tridentToVer;\r
+ if( v = tridentToVer !== X_UA[ '_IE' ] && tridentToVer ) X_UA[ 'IECompat' ] = v;\r
/**\r
* @alias X.UA.IE4\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE4' ] = v && v < 5;\r
+ if( v && v < 4.5 ) X_UA[ 'IE4' ] = true;\r
+ /**\r
+ * @alias X.UA.IE45\r
+ * @type {boolean}\r
+ */\r
+ if( v && 4.5 <= v && v < 5 ) X_UA[ 'IE45' ] = true;\r
+ /**\r
+ * @alias X.UA.IE4x\r
+ * @type {boolean}\r
+ */\r
+ if( X_UA[ 'IE4' ] || X_UA[ 'IE45' ] ) X_UA[ 'IE4x' ] = true;\r
/**\r
* @alias X.UA.IE5\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE5' ] = 5 <= v && v < 5.5;\r
+ if( 5 <= v && v < 5.5 ) X_UA[ 'IE5' ] = true;\r
/**\r
* @alias X.UA.IE55\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE55' ] = 5.5 <= v && v < 6;\r
+ if( 5.5 <= v && v < 6 ) X_UA[ 'IE55' ] = true;\r
/**\r
* @alias X.UA.IE5x\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE5x' ] = X_UA[ 'IE5' ] || X_UA[ 'IE55' ];\r
+ if( X_UA[ 'IE5' ] || X_UA[ 'IE55' ] ) X_UA[ 'IE5x' ] = true;\r
/**\r
* @alias X.UA.IE6\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE6' ] = 6 <= v && v < 7;\r
+ if( 6 <= v && v < 7 ) X_UA[ 'IE6' ] = true;\r
/**\r
* @alias X.UA.IE7\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE7' ] = 7 <= v && v < 8;\r
+ if( 7 <= v && v < 8 ) X_UA[ 'IE7' ] = true;\r
/**\r
* @alias X.UA.IE8\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE8' ] = 8 <= v && v < 9;\r
+ if( 8 <= v && v < 9 ) X_UA[ 'IE8' ] = true;\r
/**\r
* @alias X.UA.IE9\r
* @type {boolean}\r
*/\r
- X_UA[ 'IE9' ] = 9 <= v && v < 10;\r
+ if( 9 <= v && v < 10 ) X_UA[ 'IE9' ] = true;\r
/**\r
* @alias X.UA.MacIE\r
* @type {boolean}\r
*/\r
- X_UA[ 'MacIE' ] = X_UA[ 'Mac' ];\r
+ if( X_UA[ 'Mac' ] ) X_UA[ 'MacIE' ] = true;\r
/**\r
* @alias X.UA.IEMobile\r
* @type {boolean}\r
*/\r
- X_UA[ 'IEMobile' ] = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 || X_UA[ 'WinCE' ];\r
+ if( dua.toLowerCase().indexOf( 'iemobile' ) !== -1 || X_UA[ 'WinCE' ] ) X_UA[ 'IEMobile' ] = true;\r
/**\r
* @alias X.UA.WinPhone\r
* @type {boolean}\r
*/\r
- X_UA[ 'WinPhone' ] = dua.toLowerCase().indexOf( 'windows phone' ) !== -1 || 0 < dav.indexOf( 'ZuneWP' ); // ZuneWP は IEM のデスクトップモードで登場する\r
+ if( dua.toLowerCase().indexOf( 'windows phone' ) !== -1 || 0 < dav.indexOf( 'ZuneWP' ) ) X_UA[ 'WinPhone' ] = true; // ZuneWP は IEM のデスクトップモードで登場する\r
+ \r
console.log( '>> IE : ' + v + ' ActiveX : ' + X_UA[ 'ActiveX' ] );\r
// TODO XBox360, XBox1, Modern or Desktop, Standalone\r
return;\r
};\r
})();\r
\r
+(function(){\r
+ var k, v;\r
+ if( X_UA[ 'IE45' ] || X_UA[ 'IE4' ] ){\r
+ if( X_UA[ 'Mac' ] ){\r
+ X_UA_classNameForHTML = 'Mac';\r
+ } else\r
+ if( X_UA[ 'WinCE' ] ){\r
+ // TODO CE3 の ie4 と WM の ie4 の分岐\r
+ X_UA_classNameForHTML = 'WinCE';\r
+ } else\r
+ if( X_UA[ 'Win' ] ){\r
+ X_UA_classNameForHTML = 'Win';\r
+ } else {\r
+ X_UA_classNameForHTML = 'Other';\r
+ }; \r
+ \r
+ X_UA_classNameForHTML += 'IE4';\r
+ \r
+ if( X_UA[ 'IE45' ] ){\r
+ X_UA_classNameForHTML += '5';\r
+ };\r
+\r
+ if( X_UA[ 'ActiveX' ] ){\r
+ X_UA_classNameForHTML += 'ActiveX';\r
+ };\r
+ \r
+ } else {\r
+ for( k in X_UA ){\r
+ v = X_UA[ k ];\r
+ if( v ){\r
+ X_UA_classNameForHTML += k + ' ';\r
+ if( v !== true ){\r
+ X_UA_classNameForHTML += k + v + ' ';\r
+ };\r
+ };\r
+ }; \r
+ };\r
+})();\r
+\r
var X_UA_DOM = {},\r
X_UA_EVENT = {},\r
X_UA_HID = {};\r
* またフレームワーク内で定義されたデフォルト動作の回避にも使用される。\r
*/\r
'PREVENT_DEFAULT' : X_Callback_PREVENT_DEFAULT,\r
+ \r
/**\r
* X.UI に於いて、ポインターイベントの戻り値に指定すると、以降のポインターベントを独占する。\r
*/\r
- 'MONOPOLY' : X_Callback_MONOPOLY,\r
- \r
'CAPTURE_POINTER' : X_Callback_CAPTURE_POINTER,\r
\r
'RELEASE_POINTER' : X_Callback_RELEASE_POINTER\r
X_ViewPort_vScrollbarSize,
X_ViewPort_hScrollbarSize,
- X_Dom_detectFontSize = !( X_UA[ 'IE' ] < 9 || X_UA[ 'iOS' ] ) && function(){
+ X_ViewPort_useDetectionLoop = X_UA[ 'IE' ] < 9 || X_UA[ 'iOS' ],
+ X_ViewPort_detectFontSize = !X_ViewPort_useDetectionLoop && function(){
var size = X_Node_fontSizeNode[ '_rawObject' ].offsetHeight;
if( X_ViewPort_baseFontSize !== size ){
X_ViewPort_baseFontSize = size;
},
X_ViewPort_orientationFlag,
- X_Dom_orientationchange = window[ 'orientation' ] !== undefined && function( e ){
+ X_ViewPort_orientationchange = window[ 'orientation' ] !== undefined && function( e ){
X_ViewPort_orientationFlag = true;
!X_UA[ 'Android' ] && X_ViewPort_resize();
//console.log( '-- orientationchange : ' + X[ 'ViewPort' ][ 'getSize' ][ 0 ] + ' ' + X[ 'ViewPort' ][ 'getSize' ][ 1 ] );
*/
var X_ViewPort_resize =
// iOS もループで回す,,,iOS3.1.3, iOS6 で確認
- X_UA[ 'IE' ] < 9 || X_UA[ 'iOS' ] ?
+ X_ViewPort_useDetectionLoop ?
(function(){
var size;
if( !X_ViewPort_lock ){
if( X_ViewPort_width !== size[ 0 ] || X_ViewPort_height !== size[ 1 ] ){
X_ViewPort_width = size[ 0 ];
X_ViewPort_height = size[ 1 ];
- X_Timer_once( 100, X_Dom_detectFinishResizing );
+ X_Timer_once( 100, X_ViewPort_detectFinishResizing );
X_ViewPort_lock = true;
};
};
(function( e ){
console.log( '-- resize : ' + X_Timer_now() );
- !X_ViewPort_lock && ( X_ViewPort_lock = true ) && X_Timer_once( 100, X_Dom_detectFinishResizing );
+ !X_ViewPort_lock && ( X_ViewPort_lock = true ) && X_Timer_once( 100, X_ViewPort_detectFinishResizing );
return X_Callback_PREVENT_DEFAULT | X_Callback_STOP_PROPAGATION;
});
- function X_Dom_detectFinishResizing(){
+ function X_ViewPort_detectFinishResizing(){
var size = X_ViewPort_getWindowSize();
if( X_ViewPort_width !== size[ 0 ] || X_ViewPort_height !== size[ 1 ] ){
X_ViewPort_width = size[ 0 ];
X_ViewPort_height = size[ 1 ];
- X_Timer_once( 100, X_Dom_detectFinishResizing );
+ X_Timer_once( 100, X_ViewPort_detectFinishResizing );
} else {
console.log( '-- detectFinishResizing : ' + X_Timer_now() );
X_ViewPort_rootElement = document.compatMode !== 'CSS1Compat' ? elmBody : elmHtml || elmBody;
- html = X[ 'Doc' ][ 'html' ] = X_Node_html = elmHtml && new Node( elmHtml );
+ html = X[ 'Doc' ][ 'html' ] = X_Node_html = elmHtml && new Node( elmHtml ).removeClass( 'js-disabled' ).addClass( X_UA_classNameForHTML );
html[ '_flags' ] |= X_Node_State.IN_TREE;
head = X[ 'Doc' ][ 'head' ] = X_Node_head = elmHead && new Node( elmHead );
};
//
- if( X_Dom_orientationchange ){
- X_EventDispatcher_systemListen( X_ViewPort, 'orientationchange', X_Dom_orientationchange );
+ if( X_ViewPort_orientationchange ){
+ X_EventDispatcher_systemListen( X_ViewPort, 'orientationchange', X_ViewPort_orientationchange );
};
- if( X_Dom_detectFontSize ){
+ if( X_ViewPort_detectFontSize ){
X_EventDispatcher_systemListen( X_ViewPort, 'resize', X_ViewPort_resize );
- X_Timer_add( 333, X_Dom_detectFontSize );
+ X_Timer_add( 333, X_ViewPort_detectFontSize );
} else {
X_Timer_add( 333, X_ViewPort_resize );
};
};
function X_ViewPort_getWindowSize(){
- return X_UA[ 'IE' ] ?
+ return X_UA[ 'IE' ] ? // Opera10.1 では ズーム時に表示領域のサイズが取れない!
[ X_ViewPort_rootElement.clientWidth, X_ViewPort_rootElement.clientHeight ] :
+ X_UA[ 'Opera' ] < 12 ? // Opera10.1 では ズーム + resize 時に表示領域のサイズが取れない!
+ [ X_ViewPort_rootElement.offsetWidth, X_ViewPort_rootElement.offsetHeight ] :
[ window.innerWidth, window.innerHeight ];
};
/* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox, 手当てが済むまでここは常に false */\r
X_Node_Anime_translateZ = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ? ' translateZ(0)' : '',\r
/* Opera12(XP,8.1) 切った方がスムース, win Safari3 で、たまに動作が止まってしまう、、、 */\r
- X_Node_Anime_hasTransition = !!X_Node_CSS_VENDER_PREFIX[ 'transitionDelay' ] && !X_UA[ 'Opera' ] && !( X_UA[ 'Webkit' ] <= 528.16 ),\r
+ X_Node_Anime_hasTransition = !!X_Node_CSS_VENDER_PREFIX[ 'transitionDelay' ] && !X_UA[ 'Opera' ], // && !( X_UA[ 'Webkit' ] <= 528.16 ),\r
X_Node_Anime_transitionProps = X_Node_Anime_hasTransform ? X_Node_CSS_VENDER_PREFIX[ 'transform' ] : 'left,top',\r
// transitionEnd イベント中に要素の更新( X_Node_startUpdate() )ができるか?\r
// iOS3+4 では可能、iOS6.1.5 で不可。TODO iOS5 及び他の環境で調査。ダメな場合、anime.html が正しく描画されない。\r
/*\r
* http://msdn.microsoft.com/ja-jp/library/ie/hh180174%28v=vs.85%29.aspx\r
* 孤立するとウィンドウ オブジェクトのプロパティが消去される\r
+ * \r
+ * http://qiita.com/sou/items/3380d4fa9b08b27bb387\r
+ * モバイルブラウザでの iframe の挙動(Mobile Safari, Chrome for Android)\r
*/\r
\r
// TODO Node.inherits\r
var // Opera7.6+, Safari1.2+, khtml3.?+, Gecko0.9.7+\r
// ie7 ではローカルリソースには ActiveX の XHR を使う\r
X_Net_XHR_W3C = ( !X_UA[ 'IE7' ] || !X_URL_IS_LOCAL ) && window[ 'XMLHttpRequest' ] && new XMLHttpRequest(),\r
- X_Net_XHR_progress = false && X_Net_XHR_W3C && X_Net_XHR_W3C.onprogress !== undefined,\r
- X_Net_XHR_upload = false && X_Net_XHR_W3C && !!X_Net_XHR_W3C.upload,\r
+ X_Net_XHR_progress = X_Net_XHR_W3C && X_Net_XHR_W3C.onprogress !== undefined,\r
+ X_Net_XHR_upload = X_Net_XHR_W3C && !!X_Net_XHR_W3C.upload,\r
\r
X_Net_XHR_X_DOMAIN = window[ 'XDomainRequest' ] && new XDomainRequest(),\r
X_Net_XHR_VERSION = 0,\r
*/\r
\r
X.UI = {\r
- State : {\r
- DEFAULT : 0,\r
- HOVER : 1,\r
- FOCUSED : 2,\r
- DISABLED : 4,\r
- CHECKED : 8,\r
- FIRST_CHILD : 16,\r
- LAST_CHILD : 32\r
- },\r
\r
- Dirty : {\r
- CLEAN : 0,\r
- PAINT : 1, // 再描画のみ必要\r
- LAYOUT : 2, // レイアウト(ボックスサイズ)の再計算が必要\r
- FONT : 3, // フォントサイズが変更された\r
- CONTENT : 4 // コンテンツが変更された\r
- },\r
- \r
- currentRootData : null,\r
- \r
- Layout : {\r
- Base : X_Class_create(\r
- 'X.UI.Layout.Base',\r
- {\r
- overrideAttrsForSelf : null,\r
- overrideAttrsForChild : null,\r
- calculate : X_emptyFunction //function( data, isNeedsDetection, x, y, w, h )\r
- }\r
- ),\r
- create : function( props ){\r
- return X_Class_override( new X.UI.Layout.Base, props, true );\r
- }\r
- }\r
+ currentRootData : null\r
};\r
\r
/*\r
-X.UI.Attr = {\r
- AUTO : 1/0,//Number.POSITIVE_INFINITY,\r
- FLOOR : new Function( 'v', 'return 0 <= v ? v | 0 : -( -v | 0 )' ),\r
- \r
- USER : {\r
- XNODE : 0,\r
+var XUI_Attr_AUTO = 1/0,//Number.POSITIVE_INFINITY,\r
+ XUI_Attr_FLOOR = new Function( 'v', 'return 0 <= v ? v | 0 : -( -v | 0 )' ),\r
+ XUI_Attr_USER = {\r
+ XNODE : 0, // 値は xnode.css にコピーされます。\r
UINODE : 1, // 値は _uinode にコピーされます。\r
- LAYOUT : 2\r
+ LAYOUT : 2 // \r
},\r
- \r
- Type : {\r
+ XUI_Attr_Type = {\r
LIST : 16384,\r
LENGTH : 1, // '1.5em'\r
MINUS_LENGTH : 2,\r
DEFAULT_ONLY : 4096,\r
INIT_ONLY : 8192\r
},\r
- \r
- Option : {\r
+ XUI_Attr_Option = {\r
BORDER_STYLE : 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset',\r
ALIGN : 'left,center,right,justify',\r
TEXT_DECORATION : 'none,underline,overline,line-through,blink',\r
BOX_SIZING : 'content,padding,border',\r
CURSOR : 'pointer,wait'\r
},\r
- \r
- CSS3 : {\r
+ XUI_Attr_CSS3 = {\r
opacity : true,\r
bgColorAlpha : true,\r
bgGradient : true,\r
textShadowBlur : true,\r
textShadowAlpha : true\r
},\r
- \r
- Rename : {\r
+ XUI_Attr_Rename = {\r
bgColor : 'background-color',\r
fontColor : 'color',\r
fontBold : 'fontWeight',\r
fontItalic : 'fontStyle',\r
fontSmallCaps : 'fontVariant'\r
- }\r
-};\r
+ },\r
+\r
+/*\r
+ * 0: 初期値 : undefined は不可!\r
+ * 1: dirty\r
+ * 2: この attr を処理する人\r
+ * 3: 受け付けるデータ型\r
+ * 4: 選択方式の場合、その候補\r
+ */\r
+ XUI_Attr_Support = XUI_Attr_createAttrDef( 0,\r
+{\r
+ className : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],\r
+ pointerHoverClass : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],\r
+ pointerDownClass : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],\r
+ invalidLayoutColor: [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.COLOR ],\r
+ \r
+ role : [ 1, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome' ],\r
+ selectable : [ false, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.BOOLEAN ],\r
+ \r
+ visible : [ true, XUI_Dirty.LAYOUT, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ pointerEnabled : [ false, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ pointerChildren : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ cursor : [ 1, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.LIST, XUI_Attr_Option.CURSOR ],\r
+ tooltip : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.STRING ],\r
+ \r
+ borderWidth : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ], // em [ top, right, bottom, left ]\r
+ padding : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ \r
+ width : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ minWidth : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ maxWidth : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ height : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ minHeight : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ maxHeight : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ sizing : [ 1, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LIST, XUI_Attr_Option.BOX_SIZING ],\r
+ left : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ],\r
+ top : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ],\r
+ bottom : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ],\r
+ right : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ], \r
+\r
+ borderColor : [ 0x0, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.QUARTET | XUI_Attr_Type.COLOR ], // color [ top, right, bottom, left ]\r
+ borderStyle : [ 1, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LIST, XUI_Attr_Option.BORDER_STYLE ], // string [ top, right, bottom, left ]\r
+ bgColor : [ 0xFFFFFF, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.COLOR ], // color, none\r
+\r
+ fontColor : [ 0x0, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.COLOR ],\r
+ fontFamily : [ null, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.FONT_NAME ],\r
+ fontSize : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ fontBold : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'bold' ],\r
+ fontItalic : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'italic' ],\r
+ fontSmallCaps : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'small-caps' ],\r
+ lineHeight : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.NUMERICAL ], // percent\r
+ letterSpacing : [ 0, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH ],\r
+ wordSpacing : [ 0, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH ],\r
+ textAlign : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.ALIGN ],\r
+ textDecoration : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_DECORATION ],\r
+ textTransform : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_TRANSFORM ]\r
+}\r
+),\r
+\r
+/*\r
+ * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス\r
+ */\r
+\r
+XUI_attrClassProto = null,\r
+\r
+XUI_AttrClass = X_Class_create( 'XUI_AttrClass', X_Class.POOL_OBJECT );\r
+\r
\r
function XUI_Attr_createAttrDef( base, defs ){\r
var F = base ? X_Object_clone( base ) : {},\r
if( !base || !X_Type_isArray( base[ p ] ) ){\r
def.No = z += n;\r
// add\r
- n = def[ 3 ] & X.UI.Attr.Type.QUARTET ? 4 :\r
- def[ 3 ] & X.UI.Attr.Type.COMBI ? 2 : 1;\r
+ n = def[ 3 ] & XUI_Attr_Type.QUARTET ? 4 :\r
+ def[ 3 ] & XUI_Attr_Type.COMBI ? 2 : 1;\r
} else {\r
def.No = base[ p ].No;\r
};\r
- if( def[ 3 ] & X.UI.Attr.Type.LIST && X_Type_isString( def[ 4 ] ) ){\r
+ if( def[ 3 ] & XUI_Attr_Type.LIST && X_Type_isString( def[ 4 ] ) ){\r
def[ 4 ] = XUI_createChecker( def[ 4 ] );\r
};\r
};\r
return F;\r
};\r
\r
-/*\r
- * 0: 初期値 : undefined は不可!\r
- * 1: dirty\r
- * 2: この attr を処理する人\r
- * 3: 受け付けるデータ型\r
- * 4: 選択方式の場合、その候補\r
- */\r
-X.UI.Attr.Support = XUI_Attr_createAttrDef( 0,\r
-{\r
- className : [ null, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
- pointerHoverClass : [ null, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
- pointerDownClass : [ null, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
- invalidLayoutColor: [ null, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.COLOR ],\r
- \r
- role : [ 1, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.LIST, 'none,chrome' ],\r
- selectable : [ false, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.BOOLEAN ],\r
- \r
- visible : [ true, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- pointerEnabled : [ false, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- pointerChildren : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- cursor : [ 1, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.CURSOR ],\r
- tooltip : [ null, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.STRING ],\r
- \r
- borderWidth : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ], // em [ top, right, bottom, left ]\r
- padding : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- \r
- width : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- minWidth : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- maxWidth : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- height : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- minHeight : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- maxHeight : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- sizing : [ 1, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LIST, X.UI.Attr.Option.BOX_SIZING ],\r
- left : [ null, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ],\r
- top : [ null, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ],\r
- bottom : [ null, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ],\r
- right : [ null, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ], \r
-\r
- borderColor : [ 0x0, X.UI.Dirty.PAINT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.COLOR ], // color [ top, right, bottom, left ]\r
- borderStyle : [ 1, X.UI.Dirty.PAINT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.LIST, X.UI.Attr.Option.BORDER_STYLE ], // string [ top, right, bottom, left ]\r
- bgColor : [ 0xFFFFFF, X.UI.Dirty.PAINT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.COLOR ], // color, none\r
-\r
- fontColor : [ 0x0, X.UI.Dirty.PAINT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.COLOR ],\r
- fontFamily : [ null, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.FONT_NAME ],\r
- fontSize : [ 1, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- fontBold : [ false, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'bold' ],\r
- fontItalic : [ false, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'italic' ],\r
- fontSmallCaps : [ false, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'small-caps' ],\r
- lineHeight : [ 1, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.NUMERICAL ], // percent\r
- letterSpacing : [ 0, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH ],\r
- wordSpacing : [ 0, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH ],\r
- textAlign : [ 1, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.ALIGN ],\r
- textDecoration : [ 1, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_DECORATION ],\r
- textTransform : [ 1, X.UI.Dirty.FONT, X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_TRANSFORM ]\r
-}\r
-);\r
-\r
-/*\r
- * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス\r
- */\r
-\r
-X.UI.attrClassProto = null;\r
-\r
-X.UI.AttrClass = X_Class_create( 'X.UI.AttrClass', X_Class.POOL_OBJECT );\r
-\r
-\r
-X.UI.Attr.copy = function( proto, supports ){\r
+function XUI_Attr_copy( proto, supports ){\r
var support, p;\r
\r
for( p in supports ){\r
if( p === '_last' ) continue;\r
support = supports[ p ];\r
proto[ support.No ] = support[ 0 ];\r
- if( support[ 3 ] & X.UI.Attr.Type.QUARTET ){\r
+ if( support[ 3 ] & XUI_Attr_Type.QUARTET ){\r
proto[ support.No + 1 ] = support[ 0 ];\r
proto[ support.No + 2 ] = support[ 0 ];\r
proto[ support.No + 3 ] = support[ 0 ];\r
} else\r
- if( support[ 3 ] & X.UI.Attr.Type.COMBI ){\r
+ if( support[ 3 ] & XUI_Attr_Type.COMBI ){\r
proto[ support.No + 1 ] = support[ 0 ];\r
};\r
};\r
};\r
\r
-X.UI.Attr.copy( X.UI.AttrClass.prototype, X.UI.Attr.Support );\r
+XUI_Attr_copy( XUI_AttrClass.prototype, XUI_Attr_Support );\r
\r
-X.UI.Attr.preset = function( baseKlass, opt_supports, opt_attrs ){\r
+function XUI_Attr_preset( baseKlass, opt_supports, opt_attrs ){\r
var klass = baseKlass.inherits(),\r
proto = klass.prototype,\r
p;\r
\r
// 属性プリセット\r
- X.UI.Attr.copy( proto, opt_supports );\r
+ XUI_Attr_copy( proto, opt_supports );\r
\r
// setAttr に書き換え\r
- X.UI.attrClassProto = proto;\r
+ XUI_attrClassProto = proto;\r
for( p in opt_attrs ){\r
if( X_EMPTY_OBJECT[ p ] ) continue;\r
- opt_supports[ p ] && X.UI._AbstractUINode.prototype.setAttr( p, opt_supports[ p ], opt_attrs[ p ] );\r
+ opt_supports[ p ] && XUI_AbstractUINode.prototype.setAttr( p, opt_supports[ p ], opt_attrs[ p ] );\r
};\r
- X.UI.attrClassProto = null;\r
+ XUI_attrClassProto = null;\r
return klass;\r
};\r
\r
-X.UI.Event = {\r
+var XUI_Event = X[ 'UI' ][ 'Event' ] = {\r
\r
INIT : ++X_Event_last,\r
ADDED : ++X_Event_last,\r
NameToID : {}\r
};\r
\r
- X.UI.Event.IdToName[ X.UI.Event._POINTER_DOWN ] = 'pointerdown';\r
- X.UI.Event.IdToName[ X.UI.Event._POINTER_UP ] = 'pointerup';\r
- X.UI.Event.IdToName[ X.UI.Event._POINTER_MOVE ] = 'pointermove';\r
- X.UI.Event.IdToName[ X.UI.Event._POINTER_CANCEL ] = 'pointercancel';\r
+ XUI_Event.IdToName[ XUI_Event._POINTER_DOWN ] = 'pointerdown';\r
+ XUI_Event.IdToName[ XUI_Event._POINTER_UP ] = 'pointerup';\r
+ XUI_Event.IdToName[ XUI_Event._POINTER_MOVE ] = 'pointermove';\r
+ XUI_Event.IdToName[ XUI_Event._POINTER_CANCEL ] = 'pointercancel';\r
\r
\r
\r
if( X_EMPTY_OBJECT[ p ] ) continue;\r
NameToID[ IdToName[ p ] ] = p;\r
};\r
-})( X.UI.Event.IdToName, X.UI.Event.NameToID );\r
+})( XUI_Event.IdToName, XUI_Event.NameToID );\r
\r
* Jorik Tangelder <j.tangelder@gmail.com>, MIT license\r
**/\r
\r
-( function( Math, window, document, undefined ){\r
\r
var ELEENT_LIST = [],\r
HAMMER_LIST = [],\r
POINTERS = [],\r
ABS = new Function( 'v', 'return v<0?-v:v' );\r
\r
- X.UI.Gesture = Hammer;\r
- \r
function Hammer( uinodeRoot, uinode, type ){\r
this.uinode = uinode;\r
this.enabled = true;\r
pointerType, i, l, touches, ret, active, gesture, startEv,\r
hammer, deltaTime, deltaX, deltaY, velocity, center;\r
\r
- //console.log( 'Hammer@handleEvent ' + X.UI.Event.IdToName[ e.type ] + ' ' + e.pointerType + ' ' + type );\r
+ //console.log( 'Hammer@handleEvent ' + XUI_Event.IdToName[ e.type ] + ' ' + e.pointerType + ' ' + type );\r
if( !type ) return;\r
\r
- //console.log( e.type + ' dw:' + X.UI.Event._POINTER_DOWN + ' up:' + X.UI.Event._POINTER_UP + ' mv:' + X.UI.Event._POINTER_MOVE );\r
+ //console.log( e.type + ' dw:' + XUI_Event._POINTER_DOWN + ' up:' + XUI_Event._POINTER_UP + ' mv:' + XUI_Event._POINTER_MOVE );\r
\r
if( e.pointerType ){\r
type |= POINTER;\r
enable_detect = true;\r
};\r
\r
- //console.log( 'Hammer@handleEvent ' + IdToGestureID[ e.type ] + ' ' + e.type + ' ' + X.UI.Event._POINTER_DOWN + ' ' + enable_detect );\r
+ //console.log( 'Hammer@handleEvent ' + IdToGestureID[ e.type ] + ' ' + e.type + ' ' + XUI_Event._POINTER_DOWN + ' ' + enable_detect );\r
\r
// we are in a touch event, set the touch triggered bool to true,\r
// this for the conflicts that may occur on ios and android\r
Detection.register( Gestures[ name ] );\r
};\r
\r
- Hammer.EVENT_TYPES_START = [ X.UI.Event._POINTER_DOWN ];\r
- types = [ X.UI.Event._POINTER_MOVE, X.UI.Event._POINTER_UP, X.UI.Event._POINTER_CANCEL ];\r
+ Hammer.EVENT_TYPES_START = [ XUI_Event._POINTER_DOWN ];\r
+ types = [ XUI_Event._POINTER_MOVE, XUI_Event._POINTER_UP, XUI_Event._POINTER_CANCEL ];\r
\r
// Add touch events on the document\r
Utils.addEvents( uinodeRoot, types, Hammer.prototype.handleEvent );\r
EVENT_TYPE_MASK = START | MOVE | END,\r
POINTER_TYPE_MASK = POINTER | TOUCH | MOUSE | PEN,\r
IdToGestureID = {};\r
- IdToGestureID[ X.UI.Event._POINTER_DOWN ] = START;\r
- IdToGestureID[ X.UI.Event._POINTER_MOVE ] = MOVE;\r
- IdToGestureID[ X.UI.Event._POINTER_UP ] = END;\r
- IdToGestureID[ X.UI.Event._POINTER_CANCEL ] = END;\r
+ IdToGestureID[ XUI_Event._POINTER_DOWN ] = START;\r
+ IdToGestureID[ XUI_Event._POINTER_MOVE ] = MOVE;\r
+ IdToGestureID[ XUI_Event._POINTER_UP ] = END;\r
+ IdToGestureID[ XUI_Event._POINTER_CANCEL ] = END;\r
\r
- Utils = {\r
+ var Utils = {\r
\r
/**\r
* touch events with mouse fallback\r
*/\r
var touch_triggered = false;\r
\r
- Detection = {\r
+ var Detection = {\r
// contains all registred Gestures in the correct order\r
gestures : [],\r
\r
Gestures.Hold = {\r
name : 'hold',\r
index : 10,\r
- startID : X.UI.Event.HOLD,\r
- endID : X.UI.Event.HOLD_END,\r
+ startID : XUI_Event.HOLD,\r
+ endID : XUI_Event.HOLD_END,\r
defaults : {\r
hold_timeout : 500,\r
hold_threshold : 1\r
this.timerID && X_Timer_remove( this.timerID );\r
if( Gestures.Hold.holding === true ){\r
Gestures.Hold.holding = false;\r
- return hammer.trigger( X.UI.Event.HOLD_END, e );\r
+ return hammer.trigger( XUI_Event.HOLD_END, e );\r
};\r
break;\r
};\r
},\r
_onTimer : function( e, hammer ){\r
if( Detection.current.name === 'hold' ){\r
- hammer.trigger( X.UI.Event.HOLD, e );\r
+ hammer.trigger( XUI_Event.HOLD, e );\r
Gestures.Hold.holding = true;\r
};\r
}\r
Gestures.Tap = {\r
name : 'tap',\r
index : 100,\r
- startID : X.UI.Event.TAP,\r
- endID : X.UI.Event.DOUBLE_TAP,\r
+ startID : XUI_Event.TAP,\r
+ endID : XUI_Event.DOUBLE_TAP,\r
defaults : {\r
tap_max_touchtime : 250,\r
tap_max_distance : 10,\r
\r
// check if double tap\r
if( prev && prev.name === 'tap' && ( e.timeStamp - prev.lastEvent.timeStamp ) < hammer.options.doubletap_interval && e.distance < hammer.options.doubletap_distance ){\r
- return hammer.trigger( X.UI.Event.DOUBLE_TAP, e );\r
+ return hammer.trigger( XUI_Event.DOUBLE_TAP, e );\r
} else\r
// do a single tap\r
if( hammer.options.tap_always && Detection.current.name !== 'tap' ){ // EventFire中にalert すると mouseleave で再び呼ばれるのを防ぐ\r
Detection.current.name = 'tap';\r
- return hammer.trigger( X.UI.Event.TAP, e );\r
+ return hammer.trigger( XUI_Event.TAP, e );\r
};\r
};\r
}\r
Gestures.Swipe = {\r
name : 'swipe',\r
index : 40,\r
- startID : X.UI.Event.SWIP,\r
- endID : X.UI.Event.SWIP_DOWN,\r
+ startID : XUI_Event.SWIP,\r
+ endID : XUI_Event.SWIP_DOWN,\r
defaults : {\r
// set 0 for unlimited, but this can conflict with transform\r
swipe_max_touches : 1,\r
// or we can be already in dragging\r
if( hammer.options.swipe_velocity < e.velocityX || hammer.options.swipe_velocity < e.velocityY ){\r
// trigger swipe events\r
- hammer.trigger( X.UI.Event.SWIP, e );\r
+ hammer.trigger( XUI_Event.SWIP, e );\r
hammer.trigger(\r
e.direction === Hammer.DIRECTION_UP ?\r
- X.UI.Event.SWIP_UP :\r
+ XUI_Event.SWIP_UP :\r
e.direction === Hammer.DIRECTION_DOWN ?\r
- X.UI.Event.SWIP_DOWN :\r
+ XUI_Event.SWIP_DOWN :\r
e.direction === Hammer.DIRECTION_LEFT ?\r
- X.UI.Event.SWIP_LEFT :\r
- X.UI.Event.SWIP_RIGHT,\r
+ XUI_Event.SWIP_LEFT :\r
+ XUI_Event.SWIP_RIGHT,\r
e\r
);\r
};\r
Gestures.Drag = {\r
name : 'drag',\r
index : 50,\r
- startID : X.UI.Event.DRAG,\r
- endID : X.UI.Event.DRAG_DOWN,\r
+ startID : XUI_Event.DRAG,\r
+ endID : XUI_Event.DRAG_DOWN,\r
defaults : {\r
drag_min_distance : 10,\r
// set 0 for unlimited, but this can conflict with transform\r
// current gesture isnt drag, but dragged is true\r
// this means an other gesture is busy. now call dragend\r
if( Detection.current.name !== this.name && this.triggered ){\r
- hammer.trigger( X.UI.Event.DRAG_END, e );\r
+ hammer.trigger( XUI_Event.DRAG_END, e );\r
this.triggered = false;\r
return;\r
};\r
\r
// first time, trigger dragstart event\r
if( !this.triggered ){\r
- hammer.trigger( X.UI.Event.DRAG_START, e );\r
+ hammer.trigger( XUI_Event.DRAG_START, e );\r
this.triggered = true;\r
};\r
\r
// trigger normal event\r
- hammer.trigger( X.UI.Event.DRAG, e );\r
+ hammer.trigger( XUI_Event.DRAG, e );\r
\r
// direction event, like dragdown\r
hammer.trigger(\r
e.direction === Hammer.DIRECTION_UP ?\r
- X.UI.Event.DRAG_UP :\r
+ XUI_Event.DRAG_UP :\r
e.direction === Hammer.DIRECTION_DOWN ?\r
- X.UI.Event.DRAG_DOWN :\r
+ XUI_Event.DRAG_DOWN :\r
e.direction === Hammer.DIRECTION_LEFT ?\r
- X.UI.Event.DRAG_LEFT :\r
- X.UI.Event.DRAG_RIGHT,\r
+ XUI_Event.DRAG_LEFT :\r
+ XUI_Event.DRAG_RIGHT,\r
e\r
);\r
\r
\r
case END:\r
// trigger dragend\r
- this.triggered && hammer.trigger( X.UI.Event.DRAG_END, e );\r
+ this.triggered && hammer.trigger( XUI_Event.DRAG_END, e );\r
this.triggered = false;\r
break;\r
}\r
Gestures.Transform = {\r
name : 'transform',\r
index : 45,\r
- startID : X.UI.Event.TRANSFORM,\r
- endID : X.UI.Event.ROTATE,\r
+ startID : XUI_Event.TRANSFORM,\r
+ endID : XUI_Event.ROTATE,\r
defaults : {\r
// factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1\r
transform_min_scale : 0.01,\r
// current gesture isnt drag, but dragged is true\r
// this means an other gesture is busy. now call dragend\r
if( Detection.current.name !== this.name && this.triggered ){\r
- hammer.trigger( X.UI.Event.TRANSFORM_END, e );\r
+ hammer.trigger( XUI_Event.TRANSFORM_END, e );\r
this.triggered = false;\r
return;\r
};\r
\r
// first time, trigger dragstart event\r
if( !this.triggered ){\r
- hammer.trigger( X.UI.Event.TRANSFORM_START, e );\r
+ hammer.trigger( XUI_Event.TRANSFORM_START, e );\r
this.triggered = true;\r
};\r
\r
- hammer.trigger( X.UI.Event.TRANSFORM, e );\r
+ hammer.trigger( XUI_Event.TRANSFORM, e );\r
// basic transform event\r
\r
// trigger rotate event\r
- hammer.options.transform_min_rotation < rotation_threshold && hammer.trigger( X.UI.Event.ROTATE, e );\r
+ hammer.options.transform_min_rotation < rotation_threshold && hammer.trigger( XUI_Event.ROTATE, e );\r
\r
// trigger pinch event\r
if( scale_threshold > hammer.options.transform_min_scale ){\r
- hammer.trigger( X.UI.Event.PINCH, e );\r
- hammer.trigger( e.scale < 1 ? X.UI.Event.PINCH_IN : X.UI.Event.PINCH_OUT, e );\r
+ hammer.trigger( XUI_Event.PINCH, e );\r
+ hammer.trigger( e.scale < 1 ? XUI_Event.PINCH_IN : XUI_Event.PINCH_OUT, e );\r
};\r
break;\r
\r
case END:\r
// trigger dragend\r
- this.triggered && hammer.trigger( X.UI.Event.TRANSFORM_END, e );\r
+ this.triggered && hammer.trigger( XUI_Event.TRANSFORM_END, e );\r
this.triggered = false;\r
break;\r
};\r
e.eventType === END && hammer.trigger( this.name, e );\r
}\r
};\r
- \r
-})( Math, window, document );
\ No newline at end of file
-X.UI._AbstractUINode = X_EventDispatcher[ 'inherits' ](\r
+var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ](\r
'X.UI._AbstractUINode',\r
X_Class.ABSTRACT | X_Class.PRIVATE_DATA,\r
{\r
phase : 0,\r
- dirty : X.UI.Dirty.CLEAN,\r
+ dirty : XUI_Dirty.CLEAN,\r
\r
root : null,\r
rootData : null,\r
parentData : null,\r
xnode : null,\r
\r
- supportAttrs : X.UI.Attr.Support,\r
- attrClass : X.UI.AttrClass,\r
+ supportAttrs : XUI_Attr_Support,\r
+ attrClass : XUI_AttrClass,\r
attrObject : null,\r
unverifiedAttrs : null,\r
\r
boxY : 0,\r
scrollWidth : 0, // remove?\r
scrollHeight : 0, // remove?\r
- boxWidth : X.UI.Attr.AUTO,\r
+ boxWidth : XUI_Attr_AUTO,\r
minBoxWidth : 0,\r
- maxBoxWidth : X.UI.Attr.AUTO, \r
- boxHeight : X.UI.Attr.AUTO,\r
+ maxBoxWidth : XUI_Attr_AUTO, \r
+ boxHeight : XUI_Attr_AUTO,\r
minBoxHeight : 0,\r
- maxBoxHeight : X.UI.Attr.AUTO,\r
+ maxBoxHeight : XUI_Attr_AUTO,\r
contentL : 0,\r
contentT : 0,\r
contentR : 0,\r
contentB : 0,\r
boxSizingOffsetLR : 0,\r
boxSizingOffsetTB : 0, \r
- contentWidth : X.UI.Attr.AUTO,\r
+ contentWidth : XUI_Attr_AUTO,\r
minContentWidth : 0,\r
- maxContentWidth : X.UI.Attr.AUTO,\r
+ maxContentWidth : XUI_Attr_AUTO,\r
lastContentWidth : -1,\r
- contentHeight : X.UI.Attr.AUTO,\r
+ contentHeight : XUI_Attr_AUTO,\r
minContentHeight : 0,\r
- maxContentHeight : X.UI.Attr.AUTO,\r
+ maxContentHeight : XUI_Attr_AUTO,\r
lastContentHeight : -1,\r
\r
constraintW : false,\r
constraintH : false,\r
autoWidth : false,\r
autoHeight : false,\r
+ noWidth : false,\r
+ noHeight : false,\r
percentWidth : false,\r
percentHeight : false,\r
// :hover, :focus, :disabled\r
//this.xnode = X_Doc_create( 'div' );\r
this.phase = 1;\r
\r
- this[ 'dispatch' ]( X.UI.Event.INIT );\r
+ this[ 'dispatch' ]( XUI_Event.INIT );\r
},\r
\r
addToParent : function( xnodeParent ){\r
xnodeParent && xnodeParent[ 'append' ]( this.xnode );\r
\r
this.phase = 2;\r
- this[ 'dispatch' ]( X.UI.Event.ADDED );\r
+ this[ 'dispatch' ]( XUI_Event.ADDED );\r
},\r
\r
creationComplete : function(){\r
l, i;\r
\r
this.phase = 3;\r
- this.User[ 'dispatch' ]( X.UI.Event.CREATION_COMPLETE );\r
+ this.User[ 'dispatch' ]( XUI_Event.CREATION_COMPLETE );\r
\r
// html 要素が親に追加されるまで控えていたイベントの登録\r
if( events && ( l = events.length ) ){\r
* 親要素が変化した場合、unverifiedAttrs を元に attrObject を再設定.\r
*/\r
setAttr : function( name, def, v ){\r
- var attrs = X.UI.attrClassProto || this.attrObject,\r
+ var attrs = XUI_attrClassProto || this.attrObject,\r
propID = def.No || def[ 5 ],\r
- defaultVal = X.UI.attrClassProto ? attrs[ propID ] : this.attrClass.prototype[ propID ], // def[ 0 ],\r
+ defaultVal = XUI_attrClassProto ? attrs[ propID ] : this.attrClass.prototype[ propID ], // def[ 0 ],\r
currentVal = attrs ? attrs[ propID ] : defaultVal,\r
dirty = def[ 1 ],\r
user = def[ 2 ],\r
type = def[ 3 ],\r
list = def[ 4 ],\r
- length = !!( type & X.UI.Attr.Type.LENGTH ),\r
- minusLen = !!( type & X.UI.Attr.Type.MINUS_LENGTH ),\r
- percent = !!( type & X.UI.Attr.Type.PERCENT ),\r
- minusPct = !!( type & X.UI.Attr.Type.MINUS_PERCENT ),\r
- numerical = !!( type & X.UI.Attr.Type.NUMERICAL ),\r
- auto = !!( type & X.UI.Attr.Type.AUTO ),\r
- color = !!( type & X.UI.Attr.Type.COLOR ),\r
- url = !!( type & X.UI.Attr.Type.URL ),\r
- fontName = !!( type & X.UI.Attr.Type.FONT_NAME ),\r
- flag = !!( type & X.UI.Attr.Type.BOOLEAN ),\r
- combi = !!( type & X.UI.Attr.Type.COMBI ),\r
- quartet = !!( type & X.UI.Attr.Type.QUARTET ),\r
+ length = !!( type & XUI_Attr_Type.LENGTH ),\r
+ minusLen = !!( type & XUI_Attr_Type.MINUS_LENGTH ),\r
+ percent = !!( type & XUI_Attr_Type.PERCENT ),\r
+ minusPct = !!( type & XUI_Attr_Type.MINUS_PERCENT ),\r
+ numerical = !!( type & XUI_Attr_Type.NUMERICAL ),\r
+ auto = !!( type & XUI_Attr_Type.AUTO ),\r
+ color = !!( type & XUI_Attr_Type.COLOR ),\r
+ url = !!( type & XUI_Attr_Type.URL ),\r
+ fontName = !!( type & XUI_Attr_Type.FONT_NAME ),\r
+ flag = !!( type & XUI_Attr_Type.BOOLEAN ),\r
+ combi = !!( type & XUI_Attr_Type.COMBI ),\r
+ quartet = !!( type & XUI_Attr_Type.QUARTET ),\r
_v, i, l, nodes, root, roots;\r
\r
if( X_Type_isString( v ) ){\r
// good\r
} else\r
if( auto && v === 'auto' ){\r
- v = X.UI.Attr.AUTO;\r
+ v = XUI_Attr_AUTO;\r
} else\r
if( list && ( _v = list[ v ] ) ){\r
// good\r
( percent && 0 <= v && v <= 1 ) ||\r
( minusPct && -1 <= v && v < 0 ) ||\r
( numerical && 0 <= v ) ||\r
- ( auto && v === X.UI.Attr.AUTO ) ||\r
+ ( auto && v === XUI_Attr_AUTO ) ||\r
( color && 0 <= v && v <= 0xFFFFFF ) ||\r
( list && list[ v ] )\r
){\r
} else\r
if( X_Type_isArray( v ) ){\r
if( v.length <= 4 && quartet ){\r
- type &= ~X.UI.Attr.Type.QUARTET;\r
+ type &= ~XUI_Attr_Type.QUARTET;\r
switch( v.length ){\r
case 1 :\r
this.setAttr( false, [ defaultVal, user, dirty, type, list, propID ], v[ 0 ] );\r
}; \r
} else\r
if( v.length === 2 && combi ){\r
- type &= ~X.UI.Attr.Type.COMBI;\r
+ type &= ~XUI_Attr_Type.COMBI;\r
this.setAttr( false, [ defaultVal, user, dirty, type, list, propID ], v[ 0 ] );\r
this.setAttr( false, [ defaultVal, user, dirty, type, list, ++propID ], v[ 1 ] );\r
} else {\r
return;\r
};\r
\r
- if( !X.UI.attrClassProto && user === X.UI.Attr.USER.XNODE && this.xnode ){\r
- this.xnode[ 'css' ]( X.UI.Attr.Rename[ name ] || name, XUI_AbstractUINode_createCssText( this, name ) );\r
- //console.log( ( X.UI.Attr.Rename[ name ] || name ) + ' ' + XUI_AbstractUINode_createCssText( this, name ) + ' ' + propID + ' ' + attrs[ propID ] );\r
+ if( !XUI_attrClassProto && user === XUI_Attr_USER.XNODE && this.xnode ){\r
+ this.xnode[ 'css' ]( XUI_Attr_Rename[ name ] || name, XUI_AbstractUINode_createCssText( this, name ) );\r
+ //console.log( ( XUI_Attr_Rename[ name ] || name ) + ' ' + XUI_AbstractUINode_createCssText( this, name ) + ' ' + propID + ' ' + attrs[ propID ] );\r
};\r
return;\r
};\r
\r
if( !v && v !== 0 ) v = defaultVal;\r
\r
- if( X.UI.attrClassProto ){\r
+ if( XUI_attrClassProto ){\r
attrs[ propID ] = v;\r
return; \r
}; \r
\r
if( currentVal !== v ){\r
switch( propID ){\r
- case X.UI.Attr.Support.left.No :\r
- this.constraintW = attrs[ X.UI.Attr.Support.right.No ] !== null;\r
+ case XUI_Attr_Support.left.No :\r
+ this.constraintW = attrs[ XUI_Attr_Support.right.No ] !== null;\r
break;\r
- case X.UI.Attr.Support.right.No :\r
- this.constraintW = attrs[ X.UI.Attr.Support.left.No ] !== null;\r
+ case XUI_Attr_Support.right.No :\r
+ this.constraintW = attrs[ XUI_Attr_Support.left.No ] !== null;\r
break;\r
- case X.UI.Attr.Support.top.No :\r
- this.constraintH = attrs[ X.UI.Attr.Support.bottom.No ] !== null;\r
+ case XUI_Attr_Support.top.No :\r
+ this.constraintH = attrs[ XUI_Attr_Support.bottom.No ] !== null;\r
break;\r
- case X.UI.Attr.Support.bottom.No :\r
- this.constraintH = attrs[ X.UI.Attr.Support.top.No ] !== null;\r
+ case XUI_Attr_Support.bottom.No :\r
+ this.constraintH = attrs[ XUI_Attr_Support.top.No ] !== null;\r
break;\r
- case X.UI.Attr.Support.width.No :\r
- this.autoWidth = v === X.UI.Attr.AUTO;\r
+ case XUI_Attr_Support.width.No :\r
+ this.autoWidth = v === XUI_Attr_AUTO;\r
this.percentWidth = X_Type_isString( v );\r
break;\r
- case X.UI.Attr.Support.height.No :\r
- this.autoHeight = v === X.UI.Attr.AUTO;\r
+ case XUI_Attr_Support.height.No :\r
+ this.autoHeight = v === XUI_Attr_AUTO;\r
this.percentHeight = X_Type_isString( v );\r
break;\r
};\r
attrs[ propID ] = v;\r
};\r
\r
- if( name && user === X.UI.Attr.USER.UINODE ){\r
+ if( name && user === XUI_Attr_USER.UINODE ){\r
this[ name ] = v;\r
};\r
\r
- if( name && user === X.UI.Attr.USER.XNODE && this.xnode ){\r
- this.xnode[ 'css' ]( X.UI.Attr.Rename[ name ] || name, XUI_AbstractUINode_createCssText( this, name ) );\r
- //console.log( ( X.UI.Attr.Rename[ name ] || name ) + ' ' + XUI_AbstractUINode_createCssText( this, name ) + ' ' + propID + ' ' + attrs[ propID ] );\r
+ if( name && user === XUI_Attr_USER.XNODE && this.xnode ){\r
+ this.xnode[ 'css' ]( XUI_Attr_Rename[ name ] || name, XUI_AbstractUINode_createCssText( this, name ) );\r
+ //console.log( ( XUI_Attr_Rename[ name ] || name ) + ' ' + XUI_AbstractUINode_createCssText( this, name ) + ' ' + propID + ' ' + attrs[ propID ] );\r
} else\r
if( this.dirty < dirty ) this.dirty = dirty;\r
};\r
},\r
\r
getAttr : function( name ){\r
- var attrs = this.attrObject || this.attrClass.prototype || X.UI.AttrClass,\r
+ var attrs = this.attrObject || this.attrClass.prototype || XUI_AttrClass,\r
support = this.supportAttrs[ name ],\r
v, type, list;\r
if( !support ) return;\r
\r
type = support[ 3 ];\r
// Unit\r
- if( type & X.UI.Attr.Type.QUARTET ){\r
+ if( type & XUI_Attr_Type.QUARTET ){\r
return [ this.getAttr( name + 'Top' ), this.getAttr( name + 'Right' ), this.getAttr( name + 'Bottom' ), this.getAttr( name + 'Left' ) ];\r
};\r
- if( type & X.UI.Attr.Type.COMBI ) return [ v, data[ ++propID ] ];\r
+ if( type & XUI_Attr_Type.COMBI ) return [ v, data[ ++propID ] ];\r
\r
v = attrs[ support.No ]; \r
- if( type & X.UI.Attr.Type.AUTO && v === X.UI.Attr.AUTO ) return 'auto'; \r
+ if( type & XUI_Attr_Type.AUTO && v === XUI_Attr_AUTO ) return 'auto'; \r
\r
list = support[ 4 ];\r
if( list ) return list[ v ];\r
\r
- if( type & X.UI.Attr.Type.COLOR && X_Type_isNumber( v ) ) return v;\r
- if( !( type & X.UI.Attr.Type.NUMERICAL ) && X_Type_isNumber( v ) ) return v + 'em';\r
+ if( type & XUI_Attr_Type.COLOR && X_Type_isNumber( v ) ) return v;\r
+ if( !( type & XUI_Attr_Type.NUMERICAL ) && X_Type_isNumber( v ) ) return v + 'em';\r
return v;\r
},\r
\r
calculate : function( isNeedsDetection, x, y, allowedW, allowedH ){\r
this.preMesure( allowedW, allowedH );\r
\r
- if( this.boxWidth === X.UI.Attr.AUTO || this.boxHeight === X.UI.Attr.AUTO ){\r
+ this.noWidth = this.boxWidth === XUI_Attr_AUTO;\r
+ this.noHeight = this.boxHeight === XUI_Attr_AUTO;\r
+ \r
+ if( this.noWidth || this.noHeight ){\r
this.mesure();\r
this.postMesure();\r
};\r
\r
- !isNeedsDetection && this.updateLayout( x, y );\r
+ if( !isNeedsDetection ){\r
+ this.boxX += x;\r
+ this.boxY += y; \r
+ };\r
},\r
\r
/**\r
* X_Node_BoxModel の情報を引きながら top,left,width,height,padding,border の設定\r
*/\r
- updateLayout : function( x, y ){\r
- this.boxX = x;\r
- this.boxY = y;\r
+ updateLayout : function(){\r
+ var x = this.boxX,\r
+ y = this.boxY;\r
+\r
this.xnode\r
[ 'css' ]( 'left', x ? x + 'em' : 0 )\r
[ 'css' ]( 'top', y ? y + 'em' : 0 )\r
- [ 'css' ]( 'width', this.contentWidth ? XUI_AbstractUINode_ceil( this.contentWidth ) + 'em' : 0 )\r
- [ 'css' ]( 'height', this.contentHeight ? XUI_AbstractUINode_ceil( this.contentHeight ) + 'em' : 0 )\r
+ [ 'css' ]( 'width', this.noWidth ? 'auto' : this.contentWidth ? this.contentWidth + 'em' : 0 )\r
+ [ 'css' ]( 'height', this.noHeight ? 'auto' : this.contentHeight ? this.contentHeight + 'em' : 0 )\r
[ 'css' ]( 'padding', XUI_AbstractUINode_createCssText( this, 'padding' ) )\r
[ 'css' ]( 'borderWidth', XUI_AbstractUINode_createCssText( this, 'borderWidth' ) );\r
},\r
* 親の サイズを元に自身のサイズを計算していく\r
*/\r
preMesure : function( allowedW, allowedH ){\r
- var attrs = this.attrObject || this.attrClass.prototype || X.UI.AttrClass,\r
- box = attrs[ X.UI.Attr.Support.sizing.No ],\r
+ var attrs = this.attrObject || this.attrClass.prototype || XUI_AttrClass,\r
+ box = attrs[ XUI_Attr_Support.sizing.No ],\r
min, max,\r
boxL, boxT, boxR, boxB,\r
contentW, contentH, boxMinus,\r
// 自身が constraintW の場合 親が AUTO ではない\r
// 自身が constraintW でない場合自身が AUTO はなくかつ親 が AUTO の場合 or 自身は % でない\r
\r
- paddingR = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 1 ], allowedW );\r
- paddingL = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 3 ], allowedW );\r
- borderR = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 1 ], allowedW );\r
- borderL = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 3 ], allowedW );\r
+ paddingR = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 1 ], allowedW );\r
+ paddingL = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 3 ], allowedW );\r
+ borderR = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 1 ], allowedW );\r
+ borderL = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 3 ], allowedW );\r
boxMinus = 0;\r
switch( box ){\r
case 3 : // border-box\r
this.contentL = borderL + paddingL;\r
this.contentR = borderR + paddingR;\r
\r
- if( this.constraintW ? allowedW !== X.UI.Attr.AUTO : !this.autoWidth && ( allowedW !== X.UI.Attr.AUTO || !this.percentWidth ) ){\r
+ if( this.constraintW ? allowedW !== XUI_Attr_AUTO : !this.autoWidth && ( allowedW !== XUI_Attr_AUTO || !this.percentWidth ) ){\r
if( this.constraintW ){ // 制約レイアウト\r
- contentW = allowedW - ( boxL = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.left.No ], allowedW ) ) - ( boxR = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.right.No ], allowedW ) );\r
+ contentW = allowedW - ( boxL = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.left.No ], allowedW ) ) - ( boxR = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.right.No ], allowedW ) );\r
} else {\r
- contentW = XUI_AbstractUINode_calcFinalValue( attrs[ X.UI.Attr.Support.width.No ], attrs[ X.UI.Attr.Support.minWidth.No ], attrs[ X.UI.Attr.Support.maxWidth.No ], allowedW ); \r
+ contentW = XUI_AbstractUINode_calcFinalValue( attrs[ XUI_Attr_Support.width.No ], attrs[ XUI_Attr_Support.minWidth.No ], attrs[ XUI_Attr_Support.maxWidth.No ], allowedW ); \r
};\r
this.contentWidth = contentW + boxMinus;\r
//this.scrollWidth = this.contentWidth + this.contentL + this.contentR;\r
delete this.minBoxWidth;\r
delete this.maxBoxWidth;\r
} else { \r
- this.minContentWidth = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.minWidth.No ], allowedW ) + boxMinus );\r
- this.maxContentWidth = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.maxWidth.No ], allowedW ) + boxMinus );\r
+ this.minContentWidth = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.minWidth.No ], allowedW ) + boxMinus );\r
+ this.maxContentWidth = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.maxWidth.No ], allowedW ) + boxMinus );\r
//this.scrollWidth = this.contentWidth + this.contentL + this.contentR;\r
this.minBoxWidth = this.minContentWidth - boxMinus + this.contentL + this.contentR;\r
this.maxBoxWidth = this.maxContentWidth - boxMinus + this.contentL + this.contentR;\r
//delete this.boxSizingOffsetLR;\r
};\r
\r
- paddingT = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 0 ], allowedH );// paddingTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
- paddingB = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 2 ], allowedH );\r
- borderT = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 0 ], allowedH );\r
- borderB = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 2 ], allowedH );\r
+ paddingT = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 0 ], allowedH );// paddingTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
+ paddingB = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 2 ], allowedH );\r
+ borderT = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 0 ], allowedH );\r
+ borderB = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 2 ], allowedH );\r
boxMinus = 0;\r
switch( box ){\r
case 3 : // border-box\r
this.contentB = borderB + paddingB;\r
\r
// Height\r
- if( this.constraintH ? allowedH !== X.UI.Attr.AUTO : !this.autoHeight && ( allowedH !== X.UI.Attr.AUTO || !this.percentHeight ) ){\r
+ if( this.constraintH ? allowedH !== XUI_Attr_AUTO : !this.autoHeight && ( allowedH !== XUI_Attr_AUTO || !this.percentHeight ) ){\r
if( this.constraintH ){ // 制約レイアウト\r
- contentH = allowedH - ( boxT = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.top.No ], allowedH ) ) - ( boxB = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.bottom.No ], allowedH ) );\r
+ contentH = allowedH - ( boxT = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.top.No ], allowedH ) ) - ( boxB = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.bottom.No ], allowedH ) );\r
} else {\r
- contentH = XUI_AbstractUINode_calcFinalValue( attrs[ X.UI.Attr.Support.height.No ], attrs[ X.UI.Attr.Support.minHeight.No ], attrs[ X.UI.Attr.Support.maxHeight.No ], allowedH );\r
+ contentH = XUI_AbstractUINode_calcFinalValue( attrs[ XUI_Attr_Support.height.No ], attrs[ XUI_Attr_Support.minHeight.No ], attrs[ XUI_Attr_Support.maxHeight.No ], allowedH );\r
}; \r
this.contentHeight = contentH + boxMinus;\r
//this.scrollHeight = this.contentHeight + this.contentT + this.contentB;\r
delete this.minBoxHeight;\r
delete this.maxBoxHeight;\r
} else {\r
- this.minContentHeight = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.minHeight.No ], allowedH ) + boxMinus );\r
- this.maxContentHeight = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.maxHeight.No ], allowedH ) + boxMinus ); \r
+ this.minContentHeight = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.minHeight.No ], allowedH ) + boxMinus );\r
+ this.maxContentHeight = XUI_AbstractUINode_ceil( XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.maxHeight.No ], allowedH ) + boxMinus ); \r
this.minBoxHeight = this.minContentHeight - boxMinus + this.contentT + this.contentB;\r
this.maxBoxHeight = this.maxContentHeight - boxMinus + this.contentT + this.contentB;\r
\r
\r
if( this.parentData && this.parentData.layout.overrideAttrsForChild.left ){\r
if( this.constraintW ){\r
- this.boxX = ( boxL || boxL === 0 ) ? boxL : XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.left.No ], allowedW );\r
+ this.boxX = ( boxL || boxL === 0 ) ? boxL : XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.left.No ], allowedW );\r
} else\r
- if( attrs[ X.UI.Attr.Support.right.No ] === null ){\r
- this.boxX = ( boxL || boxL === 0 ) ? boxL : XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.left.No ], allowedW );\r
+ if( attrs[ XUI_Attr_Support.right.No ] === null ){\r
+ this.boxX = ( boxL || boxL === 0 ) ? boxL : XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.left.No ], allowedW );\r
} else {\r
- this.boxX = alllowW - this.boxWidth - ( ( boxR || boxR === 0 ) ? boxR : XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.right.No ], allowedW ) );\r
+ this.boxX = alllowW - this.boxWidth - ( ( boxR || boxR === 0 ) ? boxR : XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.right.No ], allowedW ) );\r
};\r
} else {\r
delete this.boxX;\r
\r
if( this.parentData && this.parentData.layout.overrideAttrsForChild.top ){\r
if( this.constraintH ){\r
- this.boxY = ( boxT || boxT === 0 ) ? boxT : XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.top.No ], allowedH );\r
+ this.boxY = ( boxT || boxT === 0 ) ? boxT : XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.top.No ], allowedH );\r
} else\r
- if( attrs[ X.UI.Attr.Support.bottom.No ] === null ){\r
- this.boxY = ( boxT || boxT === 0 ) ? boxT : XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.top.No ], allowedH );\r
+ if( attrs[ XUI_Attr_Support.bottom.No ] === null ){\r
+ this.boxY = ( boxT || boxT === 0 ) ? boxT : XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.top.No ], allowedH );\r
} else {\r
- this.boxY = allowedH - this.boxHeight - ( ( boxB || boxB === 0 ) ? boxB : XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.bottom.No ], allowedH ) );\r
+ this.boxY = allowedH - this.boxHeight - ( ( boxB || boxB === 0 ) ? boxB : XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.bottom.No ], allowedH ) );\r
};\r
} else {\r
delete this.boxY;\r
},\r
\r
/**\r
- * 描画・計測を行って、contentSize, scrollSize の決定\r
+ * 描画・計測を行って、contentSize の決定\r
*/\r
mesure : function(){\r
var dirty = this.dirty,\r
- w, h, xnode;\r
+ //sup = X_UA[ 'Gecko' ] || ( X_UA[ 'Safari' ] && X_UA[ 'Windows' ] ) ? .01251 : 0,\r
+ w, _w, h, xnode;\r
\r
- if( dirty === X.UI.Dirty.CLEAN ){\r
+ if( dirty === XUI_Dirty.CLEAN ){\r
if( this.percentWidth || this.percentHeight ){\r
\r
};\r
\r
switch( dirty ){\r
\r
- case X.UI.Dirty.CONTENT : // コンテンツが変更された\r
- case X.UI.Dirty.FONT : // フォントサイズが変更された\r
+ case XUI_Dirty.CONTENT : // コンテンツが変更された\r
+ case XUI_Dirty.FONT : // フォントサイズが変更された\r
delete this.lastContentWidth;\r
delete this.lastContentHeight;\r
\r
- case X.UI.Dirty.LAYOUT : // レイアウトの再計算が必要\r
+ case XUI_Dirty.LAYOUT : // レイアウトの再計算が必要\r
\r
default : // TODO レイアウト崩れに対処 パフォーマンス悪い!\r
\r
* 必要でない\r
*/\r
if( xnode[ '_xnodes' ] && xnode[ '_xnodes' ].length ){\r
- if( w === X.UI.Attr.AUTO ){\r
- w = this.contentWidth = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'width', 'auto' )[ 'width' ]() / X_Node_CSS_getCharSize( xnode ) );\r
- console.log( 'chr ' + X_Node_CSS_getCharSize( xnode ) );\r
- \r
- //this.scrollWidth = w + this.contentL + this.contentR;\r
- if( this.maxContentWidth < w - this.boxSizingOffsetLR ) this.contentWidth = this.maxContentWidth + this.boxSizingOffsetLR;\r
- if( w - this.boxSizingOffsetLR < this.minContentWidth ) this.contentWidth = this.minContentWidth + this.boxSizingOffsetLR;\r
- this.lastContentWidth = this.contentWidth;\r
+ if( w === XUI_Attr_AUTO ){\r
\r
- w !== this.contentWidth && xnode[ 'css' ]( 'width', this.contentWidth + 'em' );\r
- \r
- if( h === X.UI.Attr.AUTO ){\r
- this.contentHeight = h = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) ); // scrollHeight() ??\r
- //this.scrollHeight = h + this.contentT + this.contentB;\r
- if( this.maxContentHeight < h - this.boxSizingOffsetTB ) this.contentHeight = this.maxContentHeight + this.boxSizingOffsetTB;\r
- if( h - this.boxSizingOffsetTB < this.minContentHeight ) this.contentHeight = this.minContentHeight + this.boxSizingOffsetTB;\r
- } else {\r
- //this.scrollHeight = h + this.contentT + this.contentB;\r
+ w = _w = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'width', 'auto' )[ 'clientWidth' ]() / X_Node_CSS_getCharSize( xnode ) );\r
+\r
+ if( this.maxContentWidth < w - this.boxSizingOffsetLR ){\r
+ this.noWidth = false;\r
+ w = this.maxContentWidth + this.boxSizingOffsetLR;\r
};\r
- \r
- this.lastContentHeight = h;\r
+ if( w - this.boxSizingOffsetLR < this.minContentWidth ){\r
+ this.noWidth = false;\r
+ w = this.minContentWidth + this.boxSizingOffsetLR;\r
+ };\r
+\r
+ if( h === XUI_Attr_AUTO ){\r
+ w !== _w && xnode[ 'css' ]( 'width', w + 'em' );\r
+ h = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) );\r
+ w !== _w && xnode[ 'css' ]( 'width', 'auto' );\r
+ };\r
+\r
+ this.lastContentWidth = this.contentWidth = w;\r
+\r
} else\r
- if( h === X.UI.Attr.AUTO ){\r
- console.log( 'chr ' + X_Node_CSS_getCharSize( xnode ) );\r
+ if( h === XUI_Attr_AUTO ){\r
if( w !== this.lastContentWidth ){\r
- xnode[ 'css' ]( 'width', w + 'em' );\r
+ xnode[ 'css' ]( 'width', w + 'em' ); \r
+ this.lastContentWidth = w;\r
\r
- this.lastContentWidth = w;\r
- this.contentHeight = h = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) ); // ie8 clientHeight, ff scrollHeight & clientHeight\r
- //this.scrollWidth = w + this.contentL + this.contentR;\r
- //this.scrollHeight = h + this.contentT + this.contentB;\r
- if( this.maxContentHeight < h - this.boxSizingOffsetTB ) this.contentHeight = this.maxContentHeight + this.boxSizingOffsetTB;\r
- if( h - this.boxSizingOffsetTB < this.minContentHeight ) this.contentHeight = this.minContentHeight + this.boxSizingOffsetTB; \r
+ // ie8 clientHeight, ff scrollHeight & clientHeight\r
+ h = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) );\r
} else {\r
- this.contentHeight = this.lastContentHeight = h =\r
- this.lastContentHeight === -1 ? XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) ) : this.lastContentHeight;\r
- //this.scrollWidth = w + this.contentL + this.contentR;\r
- //this.scrollHeight = h + this.contentT + this.contentB;\r
+ h = this.lastContentHeight === -1 ?\r
+ XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) ) :\r
+ this.lastContentHeight;\r
};\r
} else\r
- if( dirty !== X.UI.Dirty.LAYOUT ){\r
- console.log( 'chr ' + X_Node_CSS_getCharSize( xnode ) );\r
+ if( dirty !== XUI_Dirty.LAYOUT ){\r
this.contentWidth = this.lastContentWidth = w;\r
- this.contentHeight = this.lastContentHeight = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) );\r
- //this.scrollWidth = this.contentWidth + this.contentL + this.contentR;\r
- //this.scrollHeight = this.contentHeight + this.contentT + this.contentB;\r
- } else {\r
- //this.scrollWidth = w + this.contentL + this.contentR;\r
- //this.scrollHeight = h + this.contentT + this.contentB;\r
- }; \r
+ h = XUI_AbstractUINode_ceil( xnode[ 'css' ]( 'height', 'auto' )[ 'scrollHeight' ]() / X_Node_CSS_getCharSize( xnode ) );\r
+ };\r
+ \r
+ if( this.maxContentHeight < h - this.boxSizingOffsetTB ){\r
+ this.noHeight = false;\r
+ h = this.maxContentHeight + this.boxSizingOffsetTB;\r
+ };\r
+ if( h - this.boxSizingOffsetTB < this.minContentHeight ){\r
+ this.noHeight = false;\r
+ h = this.minContentHeight + this.boxSizingOffsetTB;\r
+ };\r
+ \r
+ this.contentHeight = this.lastContentHeight = h;\r
+ \r
} else {\r
// コンテンツを持たないため基本のサイズは0\r
- if( w === X.UI.Attr.AUTO ) this.contentWidth = w = 0 < this.minContentWidth ? this.minContentWidth : 0;\r
- if( h === X.UI.Attr.AUTO ) this.contentHeight = h = 0 < this.minContentHeight ? this.minContentHeight : 0;\r
- //this.scrollWidth = w + this.contentL + this.contentR;\r
- //this.scrollHeight = h + this.contentT + this.contentB;\r
+ if( w === XUI_Attr_AUTO ) this.contentWidth = w = 0 < this.minContentWidth ? this.minContentWidth : 0;\r
+ if( h === XUI_Attr_AUTO ) this.contentHeight = h = 0 < this.minContentHeight ? this.minContentHeight : 0;\r
+ this.noWidth = this.noHeight = false;\r
};\r
\r
delete this.dirty;\r
break; \r
- //case X.UI.Dirty.PAINT : // 再描画のみ必要\r
+ //case XUI_Dirty.PAINT : // 再描画のみ必要\r
// break;\r
};\r
},\r
* 自身の contentWidth, contentHeight を元に AUTO な width, height を確定していく\r
*/\r
postMesure : function(){\r
- var attrs = this.attrObject || this.attrClass.prototype || X.UI.AttrClass,\r
- box = attrs[ X.UI.Attr.Support.sizing.No ],\r
+ var attrs = this.attrObject || this.attrClass.prototype || XUI_AttrClass,\r
+ box = attrs[ XUI_Attr_Support.sizing.No ],\r
contentW, contentH,\r
contentPlus,\r
paddingT, paddingR, paddingB, paddingL,\r
min, max;\r
\r
// Width\r
- if( this.boxWidth === X.UI.Attr.AUTO ){\r
+ if( this.boxWidth === XUI_Attr_AUTO ){\r
contentW = this.contentWidth;\r
- paddingR = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 1 ], contentW ); \r
- paddingL = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 3 ], contentW ); \r
- borderR = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 1 ], contentW );\r
- borderL = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 3 ], contentW );\r
+ paddingR = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 1 ], contentW ); \r
+ paddingL = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 3 ], contentW ); \r
+ borderR = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 1 ], contentW );\r
+ borderL = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 3 ], contentW );\r
contentPlus = 0;\r
switch( box ){\r
case 3 : // border-box\r
\r
if( !this.constraintW ){\r
contentW += contentPlus;\r
- min = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.minWidth.No ], contentW );\r
- max = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.maxWidth.No ], contentW );\r
+ min = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.minWidth.No ], contentW );\r
+ max = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.maxWidth.No ], contentW );\r
if( contentW < min && contentPlus < min ){\r
this.contentWidth = min - contentPlus;\r
} else\r
this.boxWidth = this.contentWidth + this.contentL + this.contentR;\r
};\r
// Height\r
- if( this.boxHeight === X.UI.Attr.AUTO ){\r
+ if( this.boxHeight === XUI_Attr_AUTO ){\r
contentH = this.contentHeight;\r
- paddingT = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 0 ], contentH );// paddingTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
- paddingB = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.padding.No + 2 ], contentH );\r
- borderT = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 0 ], contentH );\r
- borderB = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.borderWidth.No + 2 ], contentH );\r
+ paddingT = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 0 ], contentH );// paddingTRBL の % 指定は 最大幅に対して TB でも幅に対して\r
+ paddingB = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.padding.No + 2 ], contentH );\r
+ borderT = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 0 ], contentH );\r
+ borderB = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.borderWidth.No + 2 ], contentH );\r
contentPlus = 0;\r
switch( box ){\r
case 3 : // border-box\r
};\r
if( !this.constraintH ){\r
contentH += contentPlus;\r
- min = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.minHeight.No ], contentH );\r
- max = XUI_AbstractUINode_calcValue( attrs[ X.UI.Attr.Support.maxHeight.No ], contentH );\r
+ min = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.minHeight.No ], contentH );\r
+ max = XUI_AbstractUINode_calcValue( attrs[ XUI_Attr_Support.maxHeight.No ], contentH );\r
if( contentH < min && contentPlus < min ){\r
this.contentHeight = min - contentPlus;\r
} else\r
*/\r
listen : function( type, arg1, arg2, arg3 ){\r
var root, events, counter, f;\r
- if( X.UI.Event._START_POINTER <= type && type <= X.UI.Event._END_POINTER ){\r
+ if( XUI_Event._START_POINTER <= type && type <= XUI_Event._END_POINTER ){\r
if( this.phase < 3 ){\r
if( !( events = this.reserveEvents ) ) this.reserveEvents = events = [];\r
events[ events.length ] = [ type, arg1, arg2, arg3 ];\r
return this;\r
};\r
- if( X.UI.Event._START_XUI_EVENT < type && type < X.UI.Event._END_XUI_EVENT ){\r
+ if( XUI_Event._START_XUI_EVENT < type && type < XUI_Event._END_XUI_EVENT ){\r
if( !this.gesture ){\r
- this.gesture = new X.UI.Gesture( this.rootData, this, type );\r
+ this.gesture = new Hammer( this.rootData, this, type );\r
} else {\r
this.gesture[ 'listen' ]( type );\r
};\r
++counter[ type ];\r
} else {\r
counter[ type ] = 1; \r
- root.xnodeInteractiveLayer[ 'listen' ]( X.UI.Event.IdToName[ type ], X_UI_eventRellay );\r
+ root.xnodeInteractiveLayer[ 'listen' ]( XUI_Event.IdToName[ type ], X_UI_eventRellay );\r
};\r
};\r
};\r
},\r
unlisten : function( type, arg1, arg2, arg3 ){\r
var root, events, i, ev, counter, f;\r
- if( X.UI.Event._START_POINTER <= type && type <= X.UI.Event._END_POINTER ){\r
+ if( XUI_Event._START_POINTER <= type && type <= XUI_Event._END_POINTER ){\r
if( this.phase < 3 ){\r
if( !( events = this.reserveEvents ) ) return this;\r
for( i = events.length; i; ){\r
return this;\r
};\r
\r
- if( X.UI.Event._START_XUI_EVENT < type && type < X.UI.Event._END_XUI_EVENT ){\r
+ if( XUI_Event._START_XUI_EVENT < type && type < XUI_Event._END_XUI_EVENT ){\r
this.gesture && this.gesture[ 'unlisten' ]( type );\r
} else {\r
root = this.rootData;\r
if( !counter[ type ] ) return this;\r
--counter[ type ];\r
if( counter[ type ] === 0 ){\r
- root.xnodeInteractiveLayer[ 'unlisten' ]( X.UI.Event.IdToName[ type ], X_UI_eventRellay );\r
+ root.xnodeInteractiveLayer[ 'unlisten' ]( XUI_Event.IdToName[ type ], X_UI_eventRellay );\r
delete counter[ type ];\r
};\r
};\r
\r
dispatch : function( e ){\r
//console.log( e.type + ' ' + ( this[ '_listeners' ] && this[ '_listeners' ][ e.type ] ) );\r
- var xve = X.UI.Event,\r
+ var xve = XUI_Event,\r
ret = X_EventDispatcher_dispatch.call( this, e ),\r
type = e.type || e;\r
\r
// TODO captureEvent PointerEvent\r
- if( ret & X_Callback_MONOPOLY && !this.hitChildData && ( xve._POINTER_MOVE === type || xve._MOUSE_MOVE === type || xve.FILE_DRAG === type ) ){\r
+ if( ret & X_Callback_CAPTURE_POINTER && !this.hitChildData && XUI_Event._POINTER_MOVE === type ){\r
this.rootData.monopolyNodeData = this;\r
return ret;\r
};\r
);\r
\r
function XUI_AbstractUINode_createCssText( that, name ){\r
- var attrs = that.attrObject || that.attrClass.prototype || X.UI.AttrClass,\r
+ var attrs = that.attrObject || that.attrClass.prototype || XUI_AttrClass,\r
def = that.supportAttrs[ name ],\r
no = def.No,\r
v = attrs[ def.No ],\r
type = def[ 3 ],\r
list = def[ 4 ],\r
- flag = !!( type & X.UI.Attr.Type.BOOLEAN ),\r
- combi = !!( type & X.UI.Attr.Type.COMBI ),\r
- quartet = !!( type & X.UI.Attr.Type.QUARTET );\r
+ flag = !!( type & XUI_Attr_Type.BOOLEAN ),\r
+ combi = !!( type & XUI_Attr_Type.COMBI ),\r
+ quartet = !!( type & XUI_Attr_Type.QUARTET );\r
\r
if( quartet ){\r
if( attrs[ no + 1 ] === attrs[ no + 3 ] ){\r
};\r
\r
function XUI_AbstractUINode_createCssValue( v, type, list ){\r
- var length = !!( type & X.UI.Attr.Type.LENGTH ),\r
- minusLen = !!( type & X.UI.Attr.Type.MINUS_LENGTH ),\r
- percent = !!( type & X.UI.Attr.Type.PERCENT ),\r
- minusPct = !!( type & X.UI.Attr.Type.MINUS_PERCENT ),\r
- numerical = !!( type & X.UI.Attr.Type.NUMERICAL ),\r
- auto = !!( type & X.UI.Attr.Type.AUTO ),\r
- color = !!( type & X.UI.Attr.Type.COLOR ),\r
- url = !!( type & X.UI.Attr.Type.URL ),\r
- fontName = !!( type & X.UI.Attr.Type.FONT_NAME );\r
+ var length = !!( type & XUI_Attr_Type.LENGTH ),\r
+ minusLen = !!( type & XUI_Attr_Type.MINUS_LENGTH ),\r
+ percent = !!( type & XUI_Attr_Type.PERCENT ),\r
+ minusPct = !!( type & XUI_Attr_Type.MINUS_PERCENT ),\r
+ numerical = !!( type & XUI_Attr_Type.NUMERICAL ),\r
+ auto = !!( type & XUI_Attr_Type.AUTO ),\r
+ color = !!( type & XUI_Attr_Type.COLOR ),\r
+ url = !!( type & XUI_Attr_Type.URL ),\r
+ fontName = !!( type & XUI_Attr_Type.FONT_NAME );\r
\r
if( X_Type_isNumber( v ) ){\r
- if( auto && v === X.UI.Attr.AUTO ) return 'auto';\r
+ if( auto && v === XUI_Attr_AUTO ) return 'auto';\r
if( length || minusLen ) return v + 'em';\r
if( numerical ) return v;\r
if( list && list[ v ] ) return list[ v ];\r
\r
X.UI.AbstractUINode = X_Class_create(\r
'AbstractUINode',\r
- X_Class.ABSTRACT | X_Class.SUPER_ACCESS,\r
+ X_Class.ABSTRACT,\r
{\r
parent : function(){\r
return X_Class_getPrivate( this ).parent;\r
};\r
};\r
// getter\r
- if( attrs = ( p.attrObject || p.attrClass.prototype || X.UI.AttrClass ) ){\r
+ if( attrs = ( p.attrObject || p.attrClass.prototype || XUI_AttrClass ) ){\r
def = p.supportAttrs[ nameOrObject ];\r
return def && attrs[ def.No ];\r
};\r
\r
-X.UI.Layout.Canvas = X.UI.Layout.create( {\r
+var XUI_Layout_Canvas = X[ 'UI' ][ 'Layout' ][ 'Canvas' ] = XUI_createLayout( {\r
name : 'CanvasLayout',\r
\r
overrideAttrsForSelf : {\r
selectable : false,\r
- role : [ 0, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.LIST, 'none,chrome,container' ],\r
+ role : [ 0, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome,container' ],\r
\r
- width : [ '100%', X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- maxWidth : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- height : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- maxHeight : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ]\r
+ width : [ '100%', XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ maxWidth : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ height : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ maxHeight : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ]\r
},\r
\r
overrideAttrsForChild : {\r
\r
data.preMesure( w, h );\r
\r
- if( isNeedsDetection && ( data.boxWidth === X.UI.Attr.AUTO || data.boxHeight === X.UI.Attr.AUTO ) ) return false;\r
+ if( isNeedsDetection && ( data.boxWidth === XUI_Attr_AUTO || data.boxHeight === XUI_Attr_AUTO ) ) return false;\r
\r
_x = data.contentL;\r
_y = data.contentT;\r
node.calculate( false, _x, _y, _w, _h );\r
};\r
} else\r
- if( data.contentHeight === X.UI.Attr.AUTO ){\r
- data.contentHeight = data.minContentHeight !== X.UI.Attr.AUTO ? data.minContentHeight : 0;\r
+ if( data.contentHeight === XUI_Attr_AUTO ){\r
+ data.contentHeight = data.minContentHeight !== XUI_Attr_AUTO ? data.minContentHeight : 0;\r
};\r
\r
data.postMesure();\r
- data.updateLayout( x + data.boxX, y + data.boxY );\r
- \r
+\r
+ if( !isNeedsDetection ){\r
+ data.boxX += x;\r
+ data.boxY += y; \r
+ };\r
return true;\r
}\r
});\r
\r
\r
-X.UI._Box = X.UI._AbstractUINode.inherits(\r
+var XUI_Box = XUI_AbstractUINode.inherits(\r
'X.UI._Box',\r
- X_Class.PRIVATE_DATA | X_Class.SUPER_ACCESS, // 現状 super 指定がないとconstructor未定擬時に親のconstructor が使われない\r
+ X_Class.PRIVATE_DATA, // 現状 super 指定がないとconstructor未定擬時に親のconstructor が使われない\r
{\r
- supportAttrs : XUI_Attr_createAttrDef( X.UI._AbstractUINode.prototype.supportAttrs, X.UI.Layout.Canvas.overrideAttrsForSelf ),\r
+ supportAttrs : XUI_Attr_createAttrDef( XUI_AbstractUINode.prototype.supportAttrs, XUI_Layout_Canvas.overrideAttrsForSelf ),\r
\r
layout : null,\r
uinodes : null,\r
pointerChildren : true,\r
through : false,\r
\r
- scrollingX : 0,\r
- scrollingY : 0,\r
+ scrollingX : 0, // TODO 現在のスクロール位置\r
+ scrollingY : 0, // TODO \r
\r
Constructor : function( layout, args ){\r
var i = 0,\r
if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( Node ) ){\r
//this.layout = arg;\r
} else\r
- if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.Layout.Base ) ){\r
+ if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( XUI_LayoutBase ) ){\r
//this.layout = arg;\r
} else\r
if( X_Type_isObject( arg ) ){\r
};\r
\r
this.phase = 1;\r
- this.User[ 'dispatch' ]( { type : X.UI.Event.INIT } );\r
+ this.User[ 'dispatch' ]( { type : XUI_Event.INIT } );\r
},\r
\r
addToParent : function( parentXNode ){\r
};\r
\r
this.phase = 2;\r
- this.User[ 'dispatch' ]( { type : X.UI.Event.ADDED } );\r
+ this.User[ 'dispatch' ]( { type : XUI_Event.ADDED } );\r
},\r
\r
/* Rellay */\r
}; \r
};\r
\r
- X.UI._AbstractUINode.prototype.creationComplete.apply( this, arguments );\r
+ XUI_AbstractUINode.prototype.creationComplete.apply( this, arguments );\r
},\r
\r
calculate : function( isNeedsDetection, x, y, w, h ){\r
this.phase = 4;\r
return ret;\r
},\r
+ \r
+ updateLayout : function(){\r
+ var uinodes = this.uinodes, i, l;\r
+\r
+ if( uinodes && ( l = uinodes.length ) ){\r
+ for( i = 0; i < l; ++i ){\r
+ uinodes[ i ].updateLayout();\r
+ }; \r
+ };\r
+ XUI_AbstractUINode.prototype.updateLayout.call( this );\r
+ },\r
\r
capcher : function( x, y ){\r
var uinodes, child, _x, _y, hit, i;\r
\r
X.UI.Box = X.UI.AbstractUINode.inherits(\r
'Box',\r
- X_Class.SUPER_ACCESS,\r
- X.UI._Box,\r
+ X_Class.NONE,\r
+ XUI_Box,\r
{\r
Constructor : function(){\r
- X_Class_newPrivate( this, X.UI.Layout.Canvas, arguments );\r
+ X_Class_newPrivate( this, XUI_Layout_Canvas, arguments );\r
},\r
\r
add : function( node /* , node, node ... */ ){\r
arg = args[ i ];\r
if( !arg ) continue;\r
// レイアウトの preset ができるのは layout が未定義な Box だけ\r
- if( !shadow.prototype.layout && arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.Layout.Base ) ){\r
+ if( !shadow.prototype.layout && arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( XUI_LayoutBase ) ){\r
layout = arg;\r
} else\r
if( ( klassDef = X_Class_getClassDef( arg ) ) && klassDef.isPrivate ){\r
\r
klass = this.inherits( privateKlass );\r
privateKlass.prototype.supportAttrs = supports,\r
- privateKlass.prototype.attrClass = X.UI.Attr.preset( privateKlass.prototype.attrClass, supports, attrs );\r
+ privateKlass.prototype.attrClass = XUI_Attr_preset( privateKlass.prototype.attrClass, supports, attrs );\r
} else {\r
supports = XUI_Attr_createAttrDef( shadow.prototype.supportAttrs, layout.overrideAttrsForSelf );\r
\r
{\r
layout : layout,\r
supportAttrs : supports,\r
- attrClass : X.UI.Attr.preset( shadow.prototype.attrClass, supports, attrs )\r
+ attrClass : XUI_Attr_preset( shadow.prototype.attrClass, supports, attrs )\r
}\r
)\r
); \r
-X.UI.Layout.Vertical = X.UI.Layout.create( {\r
+var XUI_Layout_Vertical = X[ 'UI' ][ 'Layout' ][ 'Vertical' ] = XUI_createLayout( {\r
\r
name : 'VerticalLayout',\r
\r
overrideAttrsForSelf : {\r
selectable : false,\r
- role : [ 0, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.LIST, 'none,chrome,container' ],\r
- width : [ '100%', X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- height : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- childWidth : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- childHeight : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- gapY : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH ]\r
+ role : [ 0, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome,container' ],\r
+ width : [ '100%', XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ height : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ childWidth : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ childHeight : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ gapY : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH ]\r
},\r
\r
overrideAttrsForChild : {\r
\r
contentW = data.contentWidth;\r
contentH = data.contentHeight;\r
- autoW = contentW === X.UI.Attr.AUTO;\r
- autoH = contentH === X.UI.Attr.AUTO;\r
+ autoW = contentW === XUI_Attr_AUTO;\r
+ autoH = contentH === XUI_Attr_AUTO;\r
detectionPhase = autoW || autoH;\r
gapY = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.gapY.No ], contentH );\r
childW = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.childWidth.No ], contentW );\r
_y += node.boxHeight + gapY;\r
// 概算のみ\r
if( autoW ){\r
- if( node.boxWidth !== X.UI.Attr.AUTO ){\r
+ if( node.boxWidth !== XUI_Attr_AUTO ){\r
w = node.boxWidth;\r
} else\r
- if( node.minBoxWidth !== X.UI.Attr.AUTO ){\r
+ if( node.minBoxWidth !== XUI_Attr_AUTO ){\r
w = node.minBoxWidth;\r
minFlag = true;\r
} else {\r
};\r
_y -= gapY;\r
} else {\r
- _y = data.minContentHeight !== X.UI.Attr.AUTO ? data.minContentHeight : 0;\r
+ _y = data.minContentHeight !== XUI_Attr_AUTO ? data.minContentHeight : 0;\r
};\r
\r
if( detectionPhase ){\r
data.postMesure();\r
};\r
\r
- !isNeedsDetection && data.updateLayout( x + data.boxX, y + data.boxY );\r
- \r
+ if( !isNeedsDetection ){\r
+ data.boxX += x;\r
+ data.boxY += y; \r
+ };\r
return !ret;\r
}\r
});\r
\r
X.UI.VBox = X.UI.Box.presets(\r
- X.UI.Layout.Vertical,\r
+ XUI_Layout_Vertical,\r
'VBox',\r
{\r
gapY : '0.2em',\r
-X.UI.Layout.Horizontal = X.UI.Layout.create( { \r
+var XUI_Layout_Horizontal = X[ 'UI' ][ 'Layout' ][ 'Horizontal' ] = XUI_createLayout( { \r
name : 'HorizontalLayout',\r
\r
overrideAttrsForSelf : {\r
selectable : false,\r
- role : [ 0, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.LIST, 'none,chrome,container' ],\r
- width : [ '100%', X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- height : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- childWidth : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- childHeight : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
- gapX : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH ]\r
+ role : [ 0, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome,container' ],\r
+ width : [ '100%', XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ height : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ childWidth : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ childHeight : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+ gapX : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH ]\r
},\r
\r
overrideAttrsForChild : {\r
\r
contentW = data.contentWidth;\r
contentH = data.contentHeight;\r
- autoW = contentW === X.UI.Attr.AUTO;\r
- autoH = contentH === X.UI.Attr.AUTO;\r
+ autoW = contentW === XUI_Attr_AUTO;\r
+ autoH = contentH === XUI_Attr_AUTO;\r
detectionPhase = autoW || autoH;\r
gapX = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.gapX.No ], contentW );\r
childW = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.childWidth.No ], contentW );\r
node.calculate( detectionPhase, _x, _y, childW, childH );\r
_x += node.boxWidth + gapX;\r
if( autoH ){\r
- if( node.boxHeight !== X.UI.Attr.AUTO ){\r
+ if( node.boxHeight !== XUI_Attr_AUTO ){\r
h = node.boxHeight;\r
} else\r
- if( node.minBoxHeight !== X.UI.Attr.AUTO ){\r
+ if( node.minBoxHeight !== XUI_Attr_AUTO ){\r
h = node.minBoxHeight;\r
minFlag = true;\r
} else {\r
};\r
_x -= gapX;\r
} else {\r
- _h = data.minContentHeight !== X.UI.Attr.AUTO ? data.minContentHeight : 0;\r
+ _h = data.minContentHeight !== XUI_Attr_AUTO ? data.minContentHeight : 0;\r
};\r
\r
if( detectionPhase ){\r
data.postMesure();\r
};\r
\r
- !isNeedsDetection && data.updateLayout( x + data.boxX, y + data.boxY );\r
- \r
+ if( !isNeedsDetection ){\r
+ data.boxX += x;\r
+ data.boxY += y; \r
+ };\r
return !ret;\r
}\r
});\r
\r
X.UI.HBox = X.UI.Box.presets(\r
- X.UI.Layout.Horizontal,\r
+ XUI_Layout_Horizontal,\r
'HBox',\r
{\r
gapX : '0.2em'\r
-X.UI.Layout.Tile = X.UI.Layout.create( { \r
+var XUI_Layout_Tile = X[ 'UI' ][ 'Layout' ][ 'Tile' ] = XUI_createLayout( { \r
name : 'TileLayout',\r
\r
overrideAttrsForSelf : {\r
selectable : false,\r
- role : [ 0, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.LIST, 'none,chrome,container' ],\r
- childWidth : [ '8em', X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- childHeight : [ '8em', X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
- gapX : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH ],\r
- gapY : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH ],\r
- hCenter : [ true, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.BOOLEAN ],\r
- vCenter : [ true, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.BOOLEAN ]\r
+ role : [ 0, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome,container' ],\r
+ childWidth : [ '8em', XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ childHeight : [ '8em', XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+ gapX : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH ],\r
+ gapY : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH ],\r
+ hCenter : [ true, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.BOOLEAN ],\r
+ vCenter : [ true, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.BOOLEAN ]\r
},\r
\r
overrideAttrsForChild : {\r
\r
data.preMesure( w, h );\r
\r
- if( isNeedsDetection && ( data.boxWidth === X.UI.Attr.AUTO || data.boxHeight === X.UI.Attr.AUTO ) ) return;\r
+ if( isNeedsDetection && ( data.boxWidth === XUI_Attr_AUTO || data.boxHeight === XUI_Attr_AUTO ) ) return;\r
\r
if( ( uinodes = data.uinodes ) && ( l = uinodes.length ) ){\r
_x = data.contentL;\r
gapY = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.gapY.No ], contentH );\r
childW = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.childWidth.No ], contentW );\r
childH = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.childHeight.No ], contentH );\r
- numH = X.UI.Attr.FLOOR( ( _w + gapX ) / ( childW + gapX ) );\r
- numV = l % numH ? X.UI.Attr.FLOOR( l / numH ) + 1 : l / numH;\r
+ numH = XUI_Attr_FLOOR( ( _w + gapX ) / ( childW + gapX ) );\r
+ numV = l % numH ? XUI_Attr_FLOOR( l / numH ) + 1 : l / numH;\r
_h = _y + data.contentB + ( childH + gapY ) * numH - gapY;\r
\r
startX = attrs[ data.supportAttrs.hCenter.No ] ?\r
data.contentHeight = _h;\r
\r
} else\r
- if( data.contentHeight === X.UI.Attr.AUTO ){\r
- data.contentHeight = data.minContentHeight !== X.UI.Attr.AUTO ? data.minContentHeight : 0;\r
+ if( data.contentHeight === XUI_Attr_AUTO ){\r
+ data.contentHeight = data.minContentHeight !== XUI_Attr_AUTO ? data.minContentHeight : 0;\r
};\r
\r
data.postMesure();\r
- data.updateLayout( x + data.boxX, y + data.boxY );\r
+\r
+ if( !isNeedsDetection ){\r
+ data.boxX += x;\r
+ data.boxY += y; \r
+ };\r
+ return true;\r
}\r
});\r
\r
X.UI.TileBox = X.UI.Box.presets(\r
'TileBox',\r
- X.UI.Layout.Tile,\r
+ XUI_Layout_Tile,\r
{\r
gapX : '0.2em',\r
gapY : '0.2em',\r
-X.UI._ChromeBox = X.UI._Box.inherits(\r
+var XUI_ChromeBox = XUI_Box.inherits(\r
'_ChromeBox',\r
- X_Class.PRIVATE_DATA | X_Class.SUPER_ACCESS,\r
+ X_Class.PRIVATE_DATA,\r
{\r
chromeNodes : null,\r
containerNode : null,\r
\r
X.UI.ChromeBox = X.UI.Box.inherits(\r
'ChromeBox',\r
- X_Class.SUPER_ACCESS,\r
- X.UI._ChromeBox,\r
+ X_Class.NONE,\r
+ XUI_ChromeBox,\r
{\r
Constructor : function(){\r
- X_Class_newPrivate( this, X.UI.Layout.Canvas, arguments );\r
+ X_Class_newPrivate( this, XUI_Layout_Canvas, arguments );\r
},\r
add : function( node /* , node, node ... */ ){\r
X_Class_getPrivate( this ).containerNode.addAt( this.numNodes(), Array.prototype.slice.call( arguments ) );\r
\r
var X_UI_ScrollBox_SUPPORT_ATTRS = {\r
// スクロール開始するために必要な移動距離、縦か横、どちらか制限する場合、より重要\r
- directionLockThreshold : [ 10, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.LENGTH ],\r
- scrollXEnabled : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- scrollYEnabled : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- scrollEnabled : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- bounceEnabled : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- bounceTime : [ 600, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.TIME ],\r
- useWheel : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- useKey : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- hasScrollShadow : [ true, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
- scrollShadowColor : [ '#000', X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.COLOR ]\r
+ directionLockThreshold : [ 10, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.LENGTH ],\r
+ scrollXEnabled : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ scrollYEnabled : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ scrollEnabled : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ bounceEnabled : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ bounceTime : [ 600, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.TIME ],\r
+ useWheel : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ useKey : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ hasScrollShadow : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+ scrollShadowColor : [ '#000', XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.COLOR ]\r
};\r
\r
\r
-X.UI._ScrollBox = X.UI._ChromeBox.inherits(\r
+var XUI_ScrollBox = XUI_ChromeBox.inherits(\r
'_ScrollBox',\r
- X_Class.PRIVATE_DATA | X_Class.SUPER_ACCESS,\r
+ X_Class.PRIVATE_DATA,\r
{\r
- //elmScroll : null,\r
- //elmScroller : null,\r
- //elmScrollbar : null,\r
- \r
directionLockThreshold : 10,\r
scrollXEnabled : true,\r
scrollYEnabled : true,\r
hasScrollShadow : true,\r
scrollShadowColor : '#000',\r
\r
- supportAttrs : XUI_Attr_createAttrDef( X.UI.Attr.Support, X_UI_ScrollBox_SUPPORT_ATTRS ),\r
+ supportAttrs : XUI_Attr_createAttrDef( XUI_Attr_Support, X_UI_ScrollBox_SUPPORT_ATTRS ),\r
\r
scrolling : false,\r
\r
\r
scrollX : 0, // px\r
scrollY : 0, // px\r
- maxScrollX : 0, // px\r
- maxScrollY : 0, // px\r
+ scrollXMax : 0, // px\r
+ scrollYMax : 0, // px\r
+ scrollXRatio : 0, // この値は scroll 不要になっても保持される。 scroll 必要時に参照される\r
+ scrollYRatio : 0, \r
startX : 0, // px\r
startY : 0, // px\r
absStartX : 0, // px\r
pointY : 0, // px\r
distX : 0, // px\r
distY : 0, // px\r
- directionX : 0, // px\r
- directionY : 0, // px \r
- scrollXPercent : 0, // この値は scroll 不要になっても保持される。 scroll 必要時に参照される\r
- scrollYPercent : 0,\r
+ directionX : 0, // -1, 0, 1\r
+ directionY : 0, // -1, 0, 1\r
\r
lastScrollWidth : 0,\r
lastScrollHeight : 0,\r
lastBoxWidth : 0,\r
lastBoxHeight : 0,\r
\r
- _containerNode : null,\r
- scrollManager : null,\r
+ _containerNode : null,\r
+ xnodeSlider : null,\r
\r
Constructor : function( layout, args ){\r
this[ 'Super' ]( layout, args );\r
this._containerNode = X_Class_getPrivate( this.containerNode );\r
- this._containerXNode = this._containerNode.xnode[ 'className' ]( 'ScrollSlider' ).listen( X_EVENT_ANIME_END, this, X_UI_ScrollBox_onAnimeEnd );\r
+ this.xnodeSlider = this._containerNode.xnode[ 'className' ]( 'ScrollSlider' ).listen( X_EVENT_ANIME_END, this, X_UI_ScrollBox_onAnimeEnd );\r
this.xnode[ 'className' ]( 'ScrollBox' );\r
},\r
\r
creationComplete : function(){\r
- X.UI._Box.prototype.creationComplete.apply( this, arguments );\r
- this.scrollManager;\r
+ XUI_Box.prototype.creationComplete.apply( this, arguments );\r
},\r
\r
calculate : function(){\r
this.lastBoxWidth = this.boxWidth;\r
this.lastBoxHeight = this.boxHeight;\r
\r
- X.UI._Box.prototype.calculate.apply( this, arguments );\r
+ XUI_Box.prototype.calculate.apply( this, arguments );\r
\r
// TODO root の layout_complete 後に。\r
// TODO calculate 前に scroll の解放。\r
this.lastScrollHeight !== this._containerNode.boxHeight ||\r
this.lastBoxWidth !== this.boxWidth || this.lastBoxHeight !== this.boxHeight\r
){\r
- X_UI_rootData[ 'listenOnce' ]( X.UI.Event.LAYOUT_COMPLETE, this, X_UI_ScrollBox_onLayoutComplete );\r
+ X_UI_rootData[ 'listenOnce' ]( XUI_Event.LAYOUT_COMPLETE, this, X_UI_ScrollBox_onLayoutComplete );\r
};\r
},\r
\r
},\r
\r
_remove : function(){\r
- X.UI._AbstractUINode.prototype._remove.apply( this, arguments );\r
+ XUI_AbstractUINode.prototype._remove.apply( this, arguments );\r
if( this.scrolling ){\r
// remove scroll\r
};\r
);\r
\r
function X_UI_ScrollBox_onLayoutBefore( e ){\r
- //this._containerXNode.stop();\r
+ this.scrollXRatio = this.scrollX ? this.scrollXMax / this.scrollX : 0;\r
+ this.scrollYRatio = this.scrollY ? this.scrollYMax / this.scrollY : 0;\r
+ this.xnodeSlider.stop();\r
};\r
\r
function X_UI_ScrollBox_onLayoutComplete( e ){\r
// scroll の停止、GPU の解除\r
- var font = this.fontSize = this._containerXNode.call( 'fontSize' );\r
+ var font = this.fontSize = this.xnodeSlider.call( 'fontSize' );\r
\r
- this.maxScrollX = ( this.boxWidth - this._containerNode.boxWidth ) * font;\r
- this.maxScrollY = ( this.boxHeight - this._containerNode.boxHeight ) * font;\r
+ this.scrollXMax = ( this.boxWidth - this._containerNode.boxWidth ) * font;\r
+ this.scrollYMax = ( this.boxHeight - this._containerNode.boxHeight ) * font;\r
\r
- this.hasHScroll = this.scrollXEnabled && this.maxScrollX < 0;\r
- this.hasVScroll = this.scrollYEnabled && this.maxScrollY < 0;\r
+ this.hasHScroll = this.scrollXEnabled && this.scrollXMax < 0;\r
+ this.hasVScroll = this.scrollYEnabled && this.scrollYMax < 0;\r
\r
if( !this.hasHScroll ){\r
- this.maxScrollX = 0;\r
+ this.scrollXMax = 0;\r
//this.scrollWidth = this.boxWidth;\r
};\r
\r
if( !this.hasVScroll ){\r
- this.maxScrollY = 0;\r
+ this.scrollYMax = 0;\r
//this.scrollHeight = this.boxHeight;\r
};\r
\r
if( this.hasHScroll || this.hasVScroll ){\r
// scroll が必要。\r
if( this.scrolling ){\r
- this.scrollTo( this.maxScrollX * this.scrollXPercent, this.maxScrollY * this.scrollYPercent, 100 );\r
+ X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 0, '', 0 );\r
} else {\r
// scroller 作る\r
- this[ 'listen' ]( X.UI.Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart );\r
- X_UI_rootData[ 'listen' ]( X.UI.Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore );\r
+ this[ 'listen' ]( XUI_Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart );\r
+ X_UI_rootData[ 'listen' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore );\r
\r
- this.scrollTo( this.maxScrollX * this.scrollXPercent, this.maxScrollY * this.scrollYPercent );\r
+ X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 0, '', 0 );\r
this.scrolling = true;\r
};\r
} else\r
// scroll 不要\r
if( this.scrolling ){\r
// scroller 削除\r
- this[ 'unlisten' ]( X.UI.Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart );\r
- X_UI_rootData[ 'unlisten' ]( X.UI.Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore );\r
+ this[ 'unlisten' ]( XUI_Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart );\r
+ X_UI_rootData[ 'unlisten' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore );\r
\r
- ( this.scrollX !== 0 || this.scrollY !== 0 ) && this.scrollTo( 0, 0 );\r
+ ( this.scrollX !== 0 || this.scrollY !== 0 ) && X_UI_ScrollBox_translate( this, 0, 0, 0, '', 0 );\r
\r
delete this.scrolling;\r
+ delete this.scrollXRatio;\r
+ delete this.scrollYRatio;\r
};\r
};\r
\r
opt_easing = opt_easing === '' ? '' : opt_easing || 'circular';\r
opt_release = 0 <= opt_release ? opt_release : 300;\r
\r
- that._containerXNode.animate(\r
+ that.xnodeSlider.animate(\r
{\r
x : that.scrollX,\r
y : that.scrollY\r
// スクロール中の停止\r
if( this.isInTransition || this.isAnimating ){\r
this.isInTransition = this.isAnimating = false;\r
- this[ 'dispatch' ]( X.UI.Event.SCROLL_END );\r
+ this[ 'dispatch' ]( XUI_Event.SCROLL_END );\r
}; \r
\r
this.startX = this.scrollX;\r
this.pointX = e.pageX;\r
this.pointY = e.pageY;\r
\r
- this[ 'listen' ]( X.UI.Event._POINTER_MOVE, this, X_UI_ScrollBox_onMove );\r
- this[ 'listen' ]( [ X.UI.Event._POINTER_UP, X.UI.Event._POINTER_CANCEL ], this, X_UI_ScrollBox_onEnd );\r
+ this[ 'listen' ]( XUI_Event._POINTER_MOVE, this, X_UI_ScrollBox_onMove );\r
+ this[ 'listen' ]( [ XUI_Event._POINTER_UP, XUI_Event._POINTER_CANCEL ], this, X_UI_ScrollBox_onEnd );\r
\r
return ret | X_Callback_PREVENT_DEFAULT;\r
};\r
};\r
\r
// gpu の用意\r
- if( !this._containerXNode[ '_anime' ] ){\r
+ if( !this.xnodeSlider[ '_anime' ] ){\r
//console.log( 'gpuレイヤーの用意 ' + e.pageY );\r
//console.log( 'mov1 x:' + this.scrollX + ' y:' + this.scrollY );\r
X_UI_ScrollBox_translate( this, this.scrollX, this.scrollY, 0, '', 300 );\r
deltaY = this.hasVScroll ? deltaY : 0;\r
\r
if( !this.moved ){\r
- this[ 'dispatch' ]( X.UI.Event.SCROLL_BEFORE_MOVE );\r
+ this[ 'dispatch' ]( XUI_Event.SCROLL_BEFORE_MOVE );\r
this.moved = true;\r
this.minusX = deltaX;\r
this.minusY = deltaY;\r
} else {\r
- this[ 'dispatch' ]( X.UI.Event.SCROLL_MOVE );\r
+ this[ 'dispatch' ]( XUI_Event.SCROLL_MOVE );\r
};\r
\r
newX = this.scrollX + deltaX;// - this.minusX;\r
newY = this.scrollY + deltaY;// - this.minusY;\r
\r
// Slow down if outside of the boundaries\r
- if( 0 < newX || newX < this.maxScrollX ){\r
- newX = this.bounceEnabled ? this.scrollX + ( deltaX ) / 3 : 0 < newX ? 0 : this.maxScrollX;\r
+ if( 0 < newX || newX < this.scrollXMax ){\r
+ newX = this.bounceEnabled ? this.scrollX + ( deltaX ) / 3 : 0 < newX ? 0 : this.scrollXMax;\r
};\r
\r
- if( 0 < newY || newY < this.maxScrollY ){\r
- //console.log( 'slow... ' + newY + ' ' + this.maxScrollY );\r
- newY = this.bounceEnabled ? this.scrollY + ( deltaY ) / 3 : 0 < newY ? 0 : this.maxScrollY;\r
+ if( 0 < newY || newY < this.scrollYMax ){\r
+ //console.log( 'slow... ' + newY + ' ' + this.scrollYMax );\r
+ newY = this.bounceEnabled ? this.scrollY + ( deltaY ) / 3 : 0 < newY ? 0 : this.scrollYMax;\r
};\r
\r
this.directionX = 0 < deltaX ? -1 : deltaX < 0 ? 1 : 0;\r
this.startY = this.scrollY;\r
};\r
// イベントの拘束\r
- return ret | X_Callback_PREVENT_DEFAULT | X_Callback_MONOPOLY;\r
+ return ret | X_Callback_PREVENT_DEFAULT | X_Callback_CAPTURE_POINTER;\r
};\r
\r
function X_UI_ScrollBox_onEnd( e ){\r
momentumX, momentumY,\r
duration, distanceX, distanceY;\r
\r
- this[ 'unlisten' ]( X.UI.Event._POINTER_MOVE, this, X_UI_ScrollBox_onMove );\r
- this[ 'unlisten' ]( [ X.UI.Event._POINTER_UP, X.UI.Event._POINTER_CANCEL ], this, X_UI_ScrollBox_onEnd );\r
+ this[ 'unlisten' ]( XUI_Event._POINTER_MOVE, this, X_UI_ScrollBox_onMove );\r
+ this[ 'unlisten' ]( [ XUI_Event._POINTER_UP, XUI_Event._POINTER_CANCEL ], this, X_UI_ScrollBox_onEnd );\r
\r
if( !this.scrollEnabled || e.pointerType !== this.initiated ){\r
return ret;\r
// start momentum animation if needed\r
if( this.momentumEnabled && duration < 300 ){\r
momentumX = this.hasHScroll ?\r
- X_UI_ScrollBox_momentum( this.scrollX, this.startX, duration, this.maxScrollX, this.bounceEnabled ? this.boxWidth * this.fontSize : 0, this.deceleration ) :\r
+ X_UI_ScrollBox_momentum( this.scrollX, this.startX, duration, this.scrollXMax, this.bounceEnabled ? this.boxWidth * this.fontSize : 0, this.deceleration ) :\r
{ destination: newX, duration: 0 };\r
momentumY = this.hasVScroll ?\r
- X_UI_ScrollBox_momentum( this.scrollY, this.startY, duration, this.maxScrollY, this.bounceEnabled ? this.boxHeight * this.fontSize : 0, this.deceleration ) :\r
+ X_UI_ScrollBox_momentum( this.scrollY, this.startY, duration, this.scrollYMax, this.bounceEnabled ? this.boxHeight * this.fontSize : 0, this.deceleration ) :\r
{ destination: newY, duration: 0 };\r
newX = momentumX.destination;\r
newY = momentumY.destination;\r
\r
if( newX != this.scrollX || newY != this.scrollY ){\r
// change easing function when scroller goes out of the boundaries\r
- if( 0 < newX || newX < this.maxScrollX || 0 < newY || newY < this.maxScrollY ){\r
+ if( 0 < newX || newX < this.scrollXMax || 0 < newY || newY < this.scrollYMax ){\r
easing = 'quadratic';\r
};\r
\r
console.log( 'end1 x:' + newX + ' y:' + newY );\r
this.scrollTo( newX, newY, 0, '', 1000 ); // ensures that the last position is rounded\r
\r
- this[ 'dispatch' ]( X.UI.Event.SCROLL_END );\r
+ this[ 'dispatch' ]( XUI_Event.SCROLL_END );\r
\r
return ret;\r
};\r
if( !that.hasHScroll || 0 < that.scrollX ){\r
x = 0;\r
} else\r
- if( that.scrollX < that.maxScrollX ){\r
- x = that.maxScrollX;\r
+ if( that.scrollX < that.scrollXMax ){\r
+ x = that.scrollXMax;\r
};\r
\r
if( !that.hasVScroll || 0 < that.scrollY ){\r
y = 0;\r
} else\r
- if( that.scrollY < that.maxScrollY ){\r
- y = that.maxScrollY;\r
+ if( that.scrollY < that.scrollYMax ){\r
+ y = that.scrollYMax;\r
};\r
\r
if( x === that.scrollX && y === that.scrollY ){\r
- console.log( 'no バウンド y:' + y + ' max:' + that.maxScrollY );\r
+ console.log( 'no バウンド y:' + y + ' max:' + that.scrollYMax );\r
return false;\r
};\r
\r
};\r
\r
function X_UI_ScrollBox_onAnimeEnd( e ){\r
- if( e.target !== this._containerXNode || !this.isInTransition ){\r
+ if( e.target !== this.xnodeSlider || !this.isInTransition ){\r
return X_Callback_NONE;\r
};\r
if( !X_UI_ScrollBox_resetPosition( this, this.bounceTime ) ){\r
this.isInTransition = false;\r
- this.dispatch( X.UI.Event.SCROLL_END );\r
+ this.dispatch( XUI_Event.SCROLL_END );\r
};\r
return X_Callback_NONE;\r
};\r
\r
X.UI.ScrollBox = X.UI.ChromeBox.inherits(\r
'ScrollBox',\r
- X_Class.SUPER_ACCESS,\r
- X.UI._ScrollBox,\r
+ X_Class.NONE,\r
+ XUI_ScrollBox,\r
{\r
Constructor : function(){\r
var args = [\r
- 0, // layout \r
+ XUI_Layout_Vertical, \r
{\r
name : 'ScrollBox-Scroller',\r
role : 'container',\r
}\r
],\r
i = arguments.length,\r
- arg, layout;\r
+ arg, layout, attr;\r
\r
for( ; i; ){\r
arg = arguments[ --i ];\r
- if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.Layout.Base ) ){\r
+ if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( XUI_LayoutBase ) ){\r
layout = arg;\r
- } else {\r
+ } else\r
+ if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( X.UI.AbstractUINode ) ){\r
args[ args.length ] = arg;\r
+ } else\r
+ if( X_Type_isObject( arg ) ){\r
+ attr = arg;\r
};\r
};\r
\r
- args[ 0 ] = X.UI.Layout.Vertical;\r
- \r
X_Class_newPrivate(\r
this,\r
- X.UI.Layout.Canvas,\r
+ XUI_Layout_Canvas,\r
[\r
{\r
width : '100%',\r
X.UI.VBox.apply( 0, args )\r
]\r
);\r
+ \r
+ attr && this.attr( attr );\r
},\r
scrollX : function(){\r
\r
-X.UI._Text = X.UI._AbstractUINode.inherits(\r
+var XUI_Text = XUI_AbstractUINode.inherits(\r
'_Text',\r
X_Class.PRIVATE_DATA,\r
{\r
if( X_Type_isString( content ) && content ){\r
this.content = content;\r
this.xnode[ 'text' ]( this.content );\r
- this.dirty = X.UI.Dirty.CONTENT;\r
+ this.dirty = XUI_Dirty.CONTENT;\r
};\r
}\r
}\r
\r
X.UI.Text = X.UI.AbstractUINode.inherits(\r
'Text',\r
- X_Class.SUPER_ACCESS,\r
- X.UI._Text,\r
+ X_Class.NONE,\r
+ XUI_Text,\r
{\r
- Constructor : function( opt_content, opt_cssObj ){\r
+ Constructor : function( opt_content, opt_attrObj ){\r
X_Class_newPrivate( this, opt_content );\r
- X_Type_isObject( opt_cssObj = opt_cssObj || opt_content ) && this[ 'attr' ]( opt_cssObj );\r
+ X_Type_isObject( opt_attrObj = opt_attrObj || opt_content ) && this[ 'attr' ]( opt_attrObj );\r
},\r
content : function( v ){\r
var data = X_Class_getPrivate( this );\r
if( data.content !== v ){\r
data.xnode && data.xnode[ 'text' ]( v );\r
data.rootData.reserveCalc();\r
- if( data.dirty < X.UI.Dirty.CONTENT ) data.dirty = X.UI.Dirty.CONTENT; \r
+ if( data.dirty < XUI_Dirty.CONTENT ) data.dirty = XUI_Dirty.CONTENT;\r
};\r
}\r
}\r
var font = X_ViewPort_baseFontSize,
x = e.clientX / font,
y = e.clientY / font,
- type = X.UI.Event.NameToID[ e.type ],
+ type = XUI_Event.NameToID[ e.type ],
i = 0,
data = X_UI_rootData,
sysOnly = false,
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;
};
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;
};
};
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;
};
};
* 背景画像を読み終える 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 | X_Class.PRIVATE_DATA,
{
- layout : X.UI.Layout.Canvas,
+ layout : XUI_Layout_Canvas,
calcReserved : false,
hoverList : null,
} );
// hover や rollover rollout のための move イベントの追加
- ( X.UA.IE < 9 ? X_ViewPort_document : X_ViewPort )[ 'listen' ]( 'pointermove', 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 );
calculate : function( e ){
var size, font, w, h;
- this[ 'dispatch' ]( X.UI.Event.LAYOUT_BEFORE );
+ this[ 'dispatch' ]( XUI_Event.LAYOUT_BEFORE );
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 );
);
function XUI_PageRoot_onViewUpdate( e ){
- this[ 'dispatch' ]( X.UI.Event.LAYOUT_COMPLETE );
+ this[ 'dispatch' ]( XUI_Event.LAYOUT_COMPLETE );
};
X.UI.PageRoot = X.UI.Box.presets(
'PageRoot',
- X.UI._PageRoot,
+ XUI_PageRoot,
{
width : '100%',
height : '100%'