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
|
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
|
|
@ -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 ;
|
||||||
|
|
Loading…
Reference in New Issue