ui.gadgets.tracks: fix incorrect behavior if fill was not set to 1
parent
38c7f58e83
commit
21d823757f
|
@ -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
|
|
@ -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 ;
|
||||
|
|
Loading…
Reference in New Issue