simplified splitter gadget

cvs
Slava Pestov 2005-07-01 23:52:08 +00:00
parent 7c65ed1423
commit 930ac75dbd
2 changed files with 10 additions and 24 deletions

View File

@ -26,15 +26,6 @@ GENERIC: orientation
: pref-dims ( gadget -- list ) : pref-dims ( gadget -- list )
gadget-children [ pref-dim ] map ; gadget-children [ pref-dim ] map ;
: packed-pref-dim ( gadget -- dim )
#! The preferred size of the gadget, if all children are
#! packed in the direction of the given axis.
[
pref-dims
[ { 0 0 0 } [ vmax ] reduce ] keep
{ 0 0 0 } [ v+ ] reduce
] keep orientation set-axis ;
: orient ( gadget list1 list2 -- list ) : orient ( gadget list1 list2 -- list )
zip >r orientation r> [ uncons rot set-axis ] map-with ; zip >r orientation r> [ uncons rot set-axis ] map-with ;
@ -91,12 +82,16 @@ M: pack filling pack-fill ;
M: pack alignment pack-align ; M: pack alignment pack-align ;
M: pack pref-dim packed-pref-dim ; M: pack pref-dim ( pack -- dim )
[
pref-dims
[ { 0 0 0 } [ vmax ] reduce ] keep
{ 0 0 0 } [ v+ ] reduce
] keep orientation set-axis ;
M: pack layout* ( pack -- ) M: pack layout* ( pack -- )
dup pref-dims packed-layout ; dup pref-dims packed-layout ;
: <stack> ( list -- gadget ) : <stack> ( list -- gadget )
#! A stack lays out all its children on top of each other. #! A stack lays out all its children on top of each other.
0 1 { 0 0 1 } <pack> 0 1 { 0 0 1 } <pack> swap [ over add-gadget ] each ;
swap [ over add-gadget ] each ;

View File

@ -10,14 +10,14 @@ TUPLE: divider splitter ;
M: divider pref-dim drop divider-size ; M: divider pref-dim drop divider-size ;
TUPLE: splitter vector split ; TUPLE: splitter split ;
: hand>split ( splitter -- n ) : hand>split ( splitter -- n )
hand relative hand hand-click-rel v- divider-size 1/2 v*n v+ ; hand relative hand hand-click-rel v- divider-size 1/2 v*n v+ ;
: divider-motion ( splitter -- ) : divider-motion ( splitter -- )
dup hand>split dup hand>split
over shape-dim { 1 1 1 } vmax v/ over splitter-vector v. over shape-dim { 1 1 1 } vmax v/ over orientation v.
0 max 1 min over set-splitter-split relayout ; 0 max 1 min over set-splitter-split relayout ;
: divider-actions ( thumb -- ) : divider-actions ( thumb -- )
@ -31,8 +31,7 @@ C: divider ( -- divider )
dup divider-actions ; dup divider-actions ;
C: splitter ( first second vector -- splitter ) C: splitter ( first second vector -- splitter )
<empty-gadget> over set-delegate [ >r 0 1 rot <pack> r> set-delegate ] keep
[ set-splitter-vector ] keep
swapd swapd
[ add-gadget ] keep [ add-gadget ] keep
<divider> over add-gadget <divider> over add-gadget
@ -43,14 +42,6 @@ C: splitter ( first second vector -- splitter )
: <y-splitter> { 1 0 0 } <splitter> ; : <y-splitter> { 1 0 0 } <splitter> ;
M: splitter orientation splitter-vector ;
M: splitter filling drop 1 ;
M: splitter alignment drop 0 ;
M: splitter pref-dim packed-pref-dim ;
: splitter-part ( splitter -- vec ) : splitter-part ( splitter -- vec )
dup splitter-split swap shape-dim n*v divider-size 1/2 v*n v- ; dup splitter-split swap shape-dim n*v divider-size 1/2 v*n v- ;