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
math.rectangles accessors ;
math.rectangles accessors sequences ;
IN: ui.gadgets.tracks.tests
[ { 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
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

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.
USING: accessors io kernel namespaces fry
math math.vectors math.rectangles math.order
sequences words ui.gadgets ui.gadgets.packs ;
USING: accessors io kernel namespaces fry math math.vectors
math.rectangles math.order sequences words ui.gadgets ui.gadgets.packs
ui.gadgets.packs.private combinators ;
IN: ui.gadgets.tracks
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-gadget
init-track
new
1 >>fill
V{ } clone >>sizes
swap >>orientation ; inline
: <track> ( orientation -- track ) track new-track ;
<PRIVATE
: normalized-sizes ( track -- seq )
sizes>> dup sift sum '[ dup [ _ / ] when ] map ;
: alloted-dim ( track -- dim )
[ children>> ] [ sizes>> ] bi { 0 0 }
[ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ;
: gap-dim ( track -- dim )
[ gap>> ] [ children>> length 1 [-] ] bi v*n ;
[ [ drop ] [ pref-dim v+ ] if ] 2reduce ;
: available-dim ( track -- dim )
[ dim>> ] [ alloted-dim ] bi v- ;
: track-layout ( track -- sizes )
[ [ available-dim ] [ gap-dim ] bi v- ]
[ children>> ] [ normalized-sizes ] tri
[ [ over n*v ] [ pref-dim ] ?if ] 2map nip ;
{
[ children>> pref-dims ]
[ 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 ;
@ -55,14 +55,17 @@ M: track pref-dim* ( gadget -- dim )
tri
set-axis ;
PRIVATE>
: track-add ( track gadget constraint -- track )
pick sizes>> push add-gadget ;
: track-remove ( track gadget -- track )
dupd dup [
[ drop ] [
[ swap children>> index ]
[ unparent sizes>> ] 2bi
delete-nth
] [ 2drop ] if ;
[ drop sizes>> ]
[ nip unparent ]
2tri delete-nth
] 2bi ;
: clear-track ( track -- ) [ sizes>> delete-all ] [ clear-gadget ] bi ;