OSDN Git Service

Version 0.6.142, fix X.UI.ScrollBox.
authoritozyun <itozyun@user.sourceforge.jp>
Mon, 20 Apr 2015 12:15:38 +0000 (21:15 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Mon, 20 Apr 2015 12:15:38 +0000 (21:15 +0900)
0.6.x/js/01_core/16_XViewPort.js
0.6.x/js/02_dom/10_XNodeAnime.js
0.6.x/js/20_ui/01_XUI_LayoutBase.js [new file with mode: 0644]
0.6.x/js/20_ui/15_ScrollBox.js
0.6.x/js/20_ui/20_PageRoot.js

index 8207644..b970452 100644 (file)
@@ -294,7 +294,7 @@ X[ 'ViewPort' ] = {
 
                        X_ViewPort_rootElement = document.compatMode !== 'CSS1Compat' ? elmBody : elmHtml || elmBody;
 
-                       html = X[ 'Doc' ][ 'html' ] = X_Node_html = elmHtml && new Node( elmHtml ).removeClass( 'js-disabled' ).addClass( X_UA_classNameForHTML );
+                       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 );
index a7b8450..247fe48 100644 (file)
@@ -183,7 +183,7 @@ function X_Node_Anime_reserveUpdate( before ){
 };\r
 \r
 function X_Node_Anime_updateAnimations( v, updateNow ){\r
-       var i = X_Node_ANIMATIONS.length, ret, c = false;\r
+       var i = X_Node_ANIMATIONS.length, c = false, ret, xnode;\r
        \r
        // console.log( v.type || v );\r
        \r
diff --git a/0.6.x/js/20_ui/01_XUI_LayoutBase.js b/0.6.x/js/20_ui/01_XUI_LayoutBase.js
new file mode 100644 (file)
index 0000000..3e537f4
--- /dev/null
@@ -0,0 +1,38 @@
+var\r
+\r
+XUI_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
+XUI_Dirty = {\r
+               CLEAN   : 0,\r
+               PAINT   : 1, // 再描画のみ必要\r
+               LAYOUT  : 2, // レイアウト(ボックスサイズ)の再計算が必要\r
+               FONT    : 3, // フォントサイズが変更された\r
+               CONTENT : 4  // コンテンツが変更された\r
+},\r
+\r
+XUI_currentRootData,\r
+       \r
+XUI_LayoutBase = 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
+\r
+X[ 'UI' ][ 'Layout' ] = {\r
+       'create' : XUI_createLayout\r
+};\r
+\r
+function XUI_createLayout( props ){\r
+       return X_Class_override( new XUI_LayoutBase, props, true );\r
+}\r
index 15a613f..43b57cf 100644 (file)
@@ -42,7 +42,6 @@ var X_UI_ScrollBox_SUPPORT_ATTRS = {
                scrollShadowColor      : [ '#000', XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.COLOR ]\r
        };\r
 \r
-\r
 var XUI_ScrollBox = XUI_ChromeBox.inherits(\r
        '_ScrollBox',\r
        X_Class.PRIVATE_DATA,\r
@@ -159,9 +158,15 @@ var XUI_ScrollBox = XUI_ChromeBox.inherits(
 );\r
 \r
 function X_UI_ScrollBox_onLayoutBefore( e ){\r
+       if( e[ 'cancelable' ] && this.isInTransition && X_Node_Anime_translateZ ){\r
+               this[ 'listenOnce' ]( XUI_Event.SCROLL_END, X_UI_rootData, X_UI_rootData.calculate );\r
+               return X_Callback_PREVENT_DEFAULT;\r
+       };\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
+       this.isInTransition = false;\r
+       return X_Callback_NONE;\r
 };\r
 \r
 function X_UI_ScrollBox_onLayoutComplete( e ){\r
@@ -176,34 +181,28 @@ function X_UI_ScrollBox_onLayoutComplete( e ){
 \r
        if( !this.hasHScroll ){\r
                this.scrollXMax  = 0;\r
-               //this.scrollWidth = this.boxWidth;\r
        };\r
 \r
        if( !this.hasVScroll ){\r
                this.scrollYMax   = 0;\r
-               //this.scrollHeight = this.boxHeight;\r
        };\r
 \r
        delete this.endTime;\r
        delete this.directionX;\r
        delete this.directionY;\r
 \r
-       //this.wrapperOffset = this.xnodeWrapper[ 'offset' ]();\r
-\r
-       //this[ 'dispatch' ]('refresh');\r
-\r
        X_UI_ScrollBox_resetPosition( this, 0 );\r
 \r
        if( this.hasHScroll || this.hasVScroll ){\r
                // scroll が必要。\r
                if( this.scrolling ){\r
-                       X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 0, '', 0 );\r
+                       X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 100, '', 300 );\r
                } else {\r
                        // scroller 作る\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
-                       X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 0, '', 0 );\r
+                       X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 100, '', 300 );\r
                        this.scrolling = true;\r
                };\r
        } else\r
@@ -213,7 +212,7 @@ function X_UI_ScrollBox_onLayoutComplete( e ){
                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 ) && X_UI_ScrollBox_translate( this, 0, 0, 0, '', 0 );\r
+               ( this.scrollX !== 0 || this.scrollY !== 0 ) && X_UI_ScrollBox_translate( this, 0, 0, 100, '', 300 );\r
                \r
                delete this.scrolling;\r
                delete this.scrollXRatio;\r
@@ -221,6 +220,7 @@ function X_UI_ScrollBox_onLayoutComplete( e ){
        };\r
 };\r
 \r
+               // TODO use scrollLeft, scrollTop\r
                function X_UI_ScrollBox_translate( that, x, y, opt_time, opt_easing, opt_release ){\r
                        \r
                        opt_time    = 0 <= opt_time ? opt_time : 0;\r
@@ -274,6 +274,7 @@ function X_UI_ScrollBox_onStart( e ){
        if( this.isInTransition || this.isAnimating ){\r
                this.isInTransition = this.isAnimating = false;\r
                this[ 'dispatch' ]( XUI_Event.SCROLL_END );\r
+               this.xnodeSlider.stop();\r
        };                      \r
 \r
        this.startX    = this.scrollX;\r
index ec3524c..a73c3e6 100644 (file)
@@ -127,15 +127,7 @@ var XUI_PageRoot = XUI_Box.inherits(
                        this.xnode[ 'className' ]( 'PageRoot' );
                        
                        this.creationComplete();
-                       X_Timer_once( 0, this, this.doFirstCalc );
-               },
-               
-               doFirstCalc : function(){
-                       this.calculate();
-                       this.phase = 4;
-                       X.ViewPort
-                               [ 'listen' ]( X_EVENT_VIEW_RESIZED, this, this.calculate )
-                               [ 'listen' ]( X_EVENT_BASE_FONT_RESIZED, this, this.calculate );
+                       X_Timer_once( 0, this, XUI_PageRoot_do1stCalculate );
                },
                
                reserveCalc : function(){
@@ -145,9 +137,12 @@ var XUI_PageRoot = XUI_Box.inherits(
                        };
                },
                calculate : function( e ){
-                       var size, font, w, h;
+                       var cancelable = !e || ( e.type !== X_EVENT_VIEW_RESIZED && e.type !== X_EVENT_BASE_FONT_RESIZED ),
+                               size, font, w, h;
                        
-                       this[ 'dispatch' ]( XUI_Event.LAYOUT_BEFORE );
+                       if( this[ 'dispatch' ]( { type : XUI_Event.LAYOUT_BEFORE, 'cancelable' : cancelable } ) & X_Callback_PREVENT_DEFAULT && cancelable ){
+                               return X_Callback_NONE;
+                       };
                        
                        size = X[ 'ViewPort' ][ 'getSize' ]();
                        font = X[ 'ViewPort' ][ 'getBaseFontSize' ]();
@@ -157,6 +152,8 @@ var XUI_PageRoot = XUI_Box.inherits(
                        this.calcReserved = false;
                        
                        X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, XUI_PageRoot_onViewUpdate );
+                       
+                       return X_Callback_NONE;
                },
                
                updateCoursor : function( cursor ){
@@ -170,6 +167,14 @@ var XUI_PageRoot = XUI_Box.inherits(
        }
 );
 
+function XUI_PageRoot_do1stCalculate(){
+       this.calculate();
+       this.phase = 4;
+       X.ViewPort
+               [ 'listen' ]( X_EVENT_VIEW_RESIZED, this, this.calculate )
+               [ 'listen' ]( X_EVENT_BASE_FONT_RESIZED, this, this.calculate );
+};
+
 function XUI_PageRoot_onViewUpdate( e ){
        this[ 'dispatch' ]( XUI_Event.LAYOUT_COMPLETE );
 };