ui.gadgets.tracks: fix incorrect behavior if fill was not set to 1

db4
Slava Pestov 2009-02-12 00:59:10 -06:00
parent 38c7f58e83
commit 21d823757f
2 changed files with 50 additions and 25 deletions

View File

@ -1,5 +1,5 @@
USING: kernel ui.gadgets ui.gadgets.tracks tools.test USING: kernel ui.gadgets ui.gadgets.tracks tools.test
math.rectangles accessors ; math.rectangles accessors sequences ;
IN: ui.gadgets.tracks.tests IN: ui.gadgets.tracks.tests
[ { 100 100 } ] [ [ { 100 100 } ] [
@ -37,4 +37,26 @@ IN: ui.gadgets.tracks.tests
<gadget> { 10 10 } >>dim f track-add <gadget> { 10 10 } >>dim f track-add
<gadget> { 10 10 } >>dim f track-add <gadget> { 10 10 } >>dim f track-add
pref-dim pref-dim
] unit-test
[ V{ { 10 10 } { 10 80 } { 10 10 } } ] [
vertical <track>
0 >>fill
<gadget> { 10 10 } >>dim f track-add
<gadget> { 10 10 } >>dim 1 track-add
<gadget> { 10 10 } >>dim f track-add
{ 10 100 } >>dim
[ layout ] [ children>> [ dim>> ] map ] bi
] unit-test
[ V{ { 10 10 } { 10 35 } { 10 10 } { 10 35 } { 10 10 } } ] [
vertical <track>
0 >>fill
<gadget> { 10 10 } >>dim f track-add
<gadget> { 10 10 } >>dim 1/2 track-add
<gadget> { 10 10 } >>dim f track-add
<gadget> { 10 10 } >>dim 1/2 track-add
<gadget> { 10 10 } >>dim f track-add
{ 10 100 } >>dim
[ layout ] [ children>> [ dim>> ] map ] bi
] unit-test ] unit-test

View File

@ -1,40 +1,40 @@
! Copyright (C) 2006, 2008 Slava Pestov. ! Copyright (C) 2006, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors io kernel namespaces fry USING: accessors io kernel namespaces fry math math.vectors
math math.vectors math.rectangles math.order math.rectangles math.order sequences words ui.gadgets ui.gadgets.packs
sequences words ui.gadgets ui.gadgets.packs ; ui.gadgets.packs.private combinators ;
IN: ui.gadgets.tracks IN: ui.gadgets.tracks
TUPLE: track < pack sizes ; TUPLE: track < pack sizes ;
: normalized-sizes ( track -- seq )
sizes>> dup sift sum '[ dup [ _ / ] when ] map ;
: init-track ( track -- track )
V{ } clone >>sizes
1 >>fill ; inline
: new-track ( orientation class -- track ) : new-track ( orientation class -- track )
new-gadget new
init-track 1 >>fill
V{ } clone >>sizes
swap >>orientation ; inline swap >>orientation ; inline
: <track> ( orientation -- track ) track new-track ; : <track> ( orientation -- track ) track new-track ;
<PRIVATE
: normalized-sizes ( track -- seq )
sizes>> dup sift sum '[ dup [ _ / ] when ] map ;
: alloted-dim ( track -- dim ) : alloted-dim ( track -- dim )
[ children>> ] [ sizes>> ] bi { 0 0 } [ children>> ] [ sizes>> ] bi { 0 0 }
[ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ; [ [ drop ] [ pref-dim v+ ] if ] 2reduce ;
: gap-dim ( track -- dim )
[ gap>> ] [ children>> length 1 [-] ] bi v*n ;
: available-dim ( track -- dim ) : available-dim ( track -- dim )
[ dim>> ] [ alloted-dim ] bi v- ; [ dim>> ] [ alloted-dim ] bi v- ;
: track-layout ( track -- sizes ) : track-layout ( track -- sizes )
[ [ available-dim ] [ gap-dim ] bi v- ] {
[ children>> ] [ normalized-sizes ] tri [ children>> pref-dims ]
[ [ over n*v ] [ pref-dim ] ?if ] 2map nip ; [ normalized-sizes ]
[ [ available-dim ] [ gap-dim ] bi v- ]
[ orientation>> ]
} cleave
'[ [ _ n*v _ set-axis ] when* ] 2map ;
M: track layout* ( track -- ) dup track-layout pack-layout ; M: track layout* ( track -- ) dup track-layout pack-layout ;
@ -55,14 +55,17 @@ M: track pref-dim* ( gadget -- dim )
tri tri
set-axis ; set-axis ;
PRIVATE>
: track-add ( track gadget constraint -- track ) : track-add ( track gadget constraint -- track )
pick sizes>> push add-gadget ; pick sizes>> push add-gadget ;
: track-remove ( track gadget -- track ) : track-remove ( track gadget -- track )
dupd dup [ [ drop ] [
[ swap children>> index ] [ swap children>> index ]
[ unparent sizes>> ] 2bi [ drop sizes>> ]
delete-nth [ nip unparent ]
] [ 2drop ] if ; 2tri delete-nth
] 2bi ;
: clear-track ( track -- ) [ sizes>> delete-all ] [ clear-gadget ] bi ; : clear-track ( track -- ) [ sizes>> delete-all ] [ clear-gadget ] bi ;