From 735dbfb79fe49e43fccf0ebcd934015905db684c Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Fri, 19 Dec 2008 02:25:21 -0600
Subject: [PATCH] Fix track pref-dim, and layout with gaps

---
 basis/ui/gadgets/tracks/tracks-tests.factor | 17 +++++++++++++++++
 basis/ui/gadgets/tracks/tracks.factor       | 15 +++++++++------
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/basis/ui/gadgets/tracks/tracks-tests.factor b/basis/ui/gadgets/tracks/tracks-tests.factor
index 5381eebb01..0ce348e9b7 100644
--- a/basis/ui/gadgets/tracks/tracks-tests.factor
+++ b/basis/ui/gadgets/tracks/tracks-tests.factor
@@ -21,3 +21,20 @@ IN: ui.gadgets.tracks.tests
         <gadget> { 10 10 } >>dim 0 track-add
     pref-dim
 ] unit-test
+
+[ { 10 30 } ] [
+    { 0 1 } <track>
+        <gadget> { 10 10 } >>dim f track-add
+        <gadget> { 10 10 } >>dim f track-add
+        <gadget> { 10 10 } >>dim f track-add
+    pref-dim
+] unit-test
+
+[ { 10 40 } ] [
+    { 0 1 } <track>
+        { 5 5 } >>gap
+        <gadget> { 10 10 } >>dim f track-add
+        <gadget> { 10 10 } >>dim f track-add
+        <gadget> { 10 10 } >>dim f track-add
+    pref-dim
+] unit-test
\ No newline at end of file
diff --git a/basis/ui/gadgets/tracks/tracks.factor b/basis/ui/gadgets/tracks/tracks.factor
index ddc7cf18fd..aca2d7549e 100644
--- a/basis/ui/gadgets/tracks/tracks.factor
+++ b/basis/ui/gadgets/tracks/tracks.factor
@@ -27,10 +27,15 @@ TUPLE: track < pack sizes ;
     [ children>> ] [ sizes>> ] bi { 0 0 }
     [ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ;
 
-: available-dim ( track -- dim ) [ dim>> ] [ alloted-dim ] bi v- ;
+: gap-dim ( track -- dim )
+    [ gap>> ] [ children>> length 1 [-] ] bi v*n ;
+
+: available-dim ( track -- dim )
+    [ dim>> ] [ alloted-dim ] bi v- ;
 
 : track-layout ( track -- sizes )
-    [ available-dim ] [ children>> ] [ normalized-sizes ] tri
+    [ [ available-dim ] [ gap-dim ] bi v- ]
+    [ children>> ] [ normalized-sizes ] tri
     [ [ over n*v ] [ pref-dim ] ?if ] 2map nip ;
 
 M: track layout* ( track -- ) dup track-layout pack-layout ;
@@ -41,11 +46,9 @@ M: track layout* ( track -- ) dup track-layout pack-layout ;
 : track-pref-dims-2 ( track -- dim )
     [
         [ children>> pref-dims ] [ normalized-sizes ] bi
-        [ dup { 0 f } memq? [ drop ] [ v/n ] if ] 2map
+        [ dup { 0 f } member? [ 2drop { 0 0 } ] [ v/n ] if ] 2map
         max-dim [ >fixnum ] map
-    ]
-    [ [ gap>> ] [ children>> length 1 [-] ] bi v*n ] bi
-    v+ ;
+    ] [ gap-dim ] bi v+ ;
 
 M: track pref-dim* ( gadget -- dim )
     [ track-pref-dims-1 ]