Revision: 4760
          http://sourceforge.net/p/vexi/code/4760
Author:   mkpg2
Date:     2015-01-26 01:32:52 +0000 (Mon, 26 Jan 2015)
Log Message:
-----------
Fix. Reflow logic.

Modified Paths:
--------------
    branches/vexi3/org.vexi-vexi.widgets/src_main/vexi/layout/flow.t

Modified: branches/vexi3/org.vexi-vexi.widgets/src_main/vexi/layout/flow.t
===================================================================
--- branches/vexi3/org.vexi-vexi.widgets/src_main/vexi/layout/flow.t    
2015-01-25 22:38:44 UTC (rev 4759)
+++ branches/vexi3/org.vexi-vexi.widgets/src_main/vexi/layout/flow.t    
2015-01-26 01:32:52 UTC (rev 4760)
@@ -24,44 +24,64 @@
     
         var dirty;
         const max = vexi.math.max;
-        const doReflow = function(){
-            if(!visible){
+        var doReflow;
+        const reflowTrap = function(v) { 
+            cascade = v; 
+            doReflow(); 
+        };
+        
+        var entered = false;
+        doReflow = function(){
+//            trace(["doReflow", entered, visible, dirty]);
+            if(entered) {
                 dirty = true;
                 return;
-            }else{
-                dirty = false;
+            }            
+            entered = true;
+            try{
+                   if(!visible){
+                       
+                       return;
+                   }else{
+                       dirty = false;
+                   }
+                    
+                   var rankSize = 0;
+                   var offsetRank = 0;
+                   var offset = 0;
+                   for(var i, b in thisbox){
+                       var offset0 = offset;
+                       var offsetRank1 = offsetRank; 
+                       var offset1 = offset+b[_width];
+                       if(offset1>thisbox[_width] and i!=0){
+                           offsetRank1 += rankSize;
+                           offset0 = 0;
+                           offset1 = b[_width];
+                           rankSize = 0;
+                       }
+                       
+                       rankSize = max(rankSize, b[_height]); 
+                       
+                       b[_x] = offset0;
+                       b[_y] = offsetRank1;
+//                     trace(i+" ("+b.x+","+b.y+") 
("+b.width+","+b.height+")");
+                       offset = offset1;     
+                       offsetRank = offsetRank1;            
+                       
+                       b[_width]  ++= reflowTrap;              
+                       b[_height] ++= reflowTrap;
+                   }
+                   thisbox[_height] = offsetRank + rankSize;
+//                 // HACK 
+//                 if(offsetRank==0 and offset==0){
+//                     dirty = true;
+//                 }
+            }finally{
+                entered = false;
             }
-             
-            var rankSize = 0;
-            var offsetRank = 0;
-            var offset = 0;
-            for(var i, b in thisbox){
-                var offset0 = offset;
-                var offsetRank1 = offsetRank; 
-                var offset1 = offset+b[_width];
-                if(offset1>thisbox[_width] and i!=0){
-                    offsetRank1 += rankSize;
-                    offset0 = 0;
-                    offset1 = b[_width];
-                    rankSize = 0;
-                }
-                
-                rankSize = max(rankSize, b[_height]); 
-                
-                b[_x] = offset0;
-                b[_y] = offsetRank1;
-                
-                offset = offset1;     
-                offsetRank = offsetRank1;                          
-            }
-            thisbox[_height] = offsetRank + rankSize;
         };
         
         
-        const reflowTrap = function(v) { 
-            cascade = v; 
-            doReflow(); 
-        };
         
         thisbox.orient ++= function(v){
             cascade = v;
@@ -78,11 +98,12 @@
                 _height = "width";
                 _width = "height";
             }
-            
-            thisbox[_width] ++= reflowTrap;
-            thisbox[_height] --= reflowTrap;
-                
         };
+        
+        thisbox.width  ++= reflowTrap;
+        thisbox.height ++= reflowTrap;
+    
+        
         orient = "horizontal";
         
         
@@ -94,8 +115,12 @@
         };
                 
         thisbox.Children ++= function(v){
+            const v0 = thisbox[trapname];
+            if(v0){
+                v0.width  --= reflowTrap;
+                v0.height --= reflowTrap;
+            }
             cascade = v;
-            doReflow();
         };        
         
     </ui:box>

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to