factor/library/ui/splitters.factor

57 lines
1.4 KiB
Factor
Raw Normal View History

2005-06-23 03:15:44 -04:00
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: gadgets
USING: generic kernel lists matrices namespaces sequences ;
2005-06-23 03:15:44 -04:00
TUPLE: divider splitter ;
C: divider ( -- divider )
2005-06-23 03:15:44 -04:00
<plain-gadget> over set-delegate
dup t reverse-video set-paint-prop ;
: divider-size { 8 8 0 } ;
2005-06-23 03:15:44 -04:00
M: divider pref-size drop divider-size 3unseq drop ;
TUPLE: splitter vector split ;
2005-06-23 03:15:44 -04:00
2005-06-23 22:35:41 -04:00
M: splitter orientation splitter-vector ;
C: splitter ( first second vector -- splitter )
<empty-gadget> over set-delegate
2005-06-23 03:15:44 -04:00
[ set-splitter-vector ] keep
swapd
[ add-gadget ] keep
<divider> over add-gadget
[ add-gadget ] keep
2005-06-23 22:35:41 -04:00
1/2 over set-splitter-split ;
: <x-splitter> { 1 0 0 } <splitter> ;
2005-06-23 03:15:44 -04:00
: <y-splitter> { 0 1 0 } <splitter> ;
2005-06-23 03:15:44 -04:00
M: splitter pref-size
[
gadget-children [ pref-dim ] map
dup { 0 0 0 } swap [ vmax ] each
swap { 0 0 0 } swap [ v+ ] each
] keep orient 3unseq drop ;
2005-06-23 22:35:41 -04:00
: splitter-part ( splitter -- vec )
dup splitter-split swap shape-dim n*v divider-size 1/2 v*n v- ;
2005-06-23 22:35:41 -04:00
: splitter-layout ( splitter -- [ a b c ] )
2005-06-23 22:35:41 -04:00
[
dup splitter-part ,
divider-size ,
dup shape-dim swap splitter-part v- ,
] make-list ;
2005-06-23 22:35:41 -04:00
: layout-divider ( assoc -- )
[ uncons set-gadget-dim ] each ;
2005-06-23 03:15:44 -04:00
M: splitter layout* ( splitter -- )
[
dup splitter-layout [ nip ( { 0 0 0 } rot orient ) ] map-with
] keep gadget-children zip layout-divider ;