factor/library/ui/splitters.factor

58 lines
1.6 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-splitters
2005-09-28 23:29:00 -04:00
USING: arrays gadgets gadgets-layouts gadgets-theme generic
kernel lists math namespaces sequences styles ;
2005-06-23 03:15:44 -04:00
TUPLE: divider splitter ;
: divider-size @{ 8 8 0 }@ ;
2005-06-23 03:15:44 -04:00
2005-06-28 23:50:23 -04:00
M: divider pref-dim drop divider-size ;
2005-07-01 19:52:08 -04:00
TUPLE: splitter split ;
2005-06-23 03:15:44 -04:00
: hand>split ( splitter -- n )
2005-08-27 00:22:19 -04:00
drag-loc divider-size 1/2 v*n v+ ;
: divider-motion ( splitter -- )
dup hand>split
over rect-dim @{ 1 1 1 }@ vmax v/ over gadget-orientation v.
2005-09-25 20:41:49 -04:00
0 max 1 min over set-splitter-split relayout-1 ;
: divider-actions ( thumb -- )
dup [ drop ] [ button-down 1 ] set-action
dup [ drop ] [ button-up 1 ] set-action
[ gadget-parent divider-motion ] [ drag 1 ] set-action ;
C: divider ( -- divider )
2005-10-27 16:17:50 -04:00
dup delegate>gadget
dup reverse-video-theme
dup divider-actions ;
2005-06-23 22:35:41 -04:00
2005-07-09 16:49:13 -04:00
C: splitter ( first second split vector -- splitter )
2005-10-09 21:27:14 -04:00
[ delegate>pack ] keep
2005-07-09 16:49:13 -04:00
[ set-splitter-split ] keep
[ >r >r <divider> r> 3array r> add-gadgets ] keep
1 over set-pack-fill ;
2005-06-23 22:35:41 -04:00
2005-07-09 16:49:13 -04:00
: <x-splitter> ( first second split -- splitter )
@{ 0 1 0 }@ <splitter> ;
2005-06-23 03:15:44 -04:00
2005-07-09 16:49:13 -04:00
: <y-splitter> ( first second split -- splitter )
@{ 1 0 0 }@ <splitter> ;
2005-06-23 03:15:44 -04:00
: splitter-part ( splitter -- vec )
dup splitter-split swap rect-dim
2005-09-28 23:29:00 -04:00
n*v [ >fixnum ] map divider-size 1/2 v*n v- ;
2005-06-23 22:35:41 -04:00
2005-08-14 01:17:25 -04:00
: splitter-layout ( splitter -- { a b c } )
2005-06-23 22:35:41 -04:00
[
dup splitter-part ,
divider-size ,
dup rect-dim divider-size v- swap splitter-part v- ,
2005-08-25 15:27:38 -04:00
] { } make ;
2005-06-23 22:35:41 -04:00
2005-06-23 03:15:44 -04:00
M: splitter layout* ( splitter -- )
2005-06-29 19:40:44 -04:00
dup splitter-layout packed-layout ;