2006-05-19 21:08:42 -04:00
|
|
|
! Copyright (C) 2006 Slava Pestov.
|
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
|
IN: gadgets-tracks
|
2006-05-31 18:45:11 -04:00
|
|
|
USING: gadgets gadgets-theme generic io kernel
|
2006-05-25 23:25:00 -04:00
|
|
|
math namespaces sequences words ;
|
2006-05-19 21:08:42 -04:00
|
|
|
|
2006-11-21 21:45:22 -05:00
|
|
|
TUPLE: track sizes ;
|
2006-05-19 21:08:42 -04:00
|
|
|
|
|
|
|
|
C: track ( orientation -- track )
|
2006-06-29 01:54:11 -04:00
|
|
|
[ delegate>pack ] keep
|
|
|
|
|
1 over set-pack-fill
|
2006-11-21 21:45:22 -05:00
|
|
|
V{ } clone over set-track-sizes ;
|
2006-05-19 21:08:42 -04:00
|
|
|
|
|
|
|
|
: track-layout ( track -- sizes )
|
2006-11-21 21:45:22 -05:00
|
|
|
dup rect-dim swap track-sizes [ v*n ] map-with ;
|
2006-05-19 21:08:42 -04:00
|
|
|
|
2006-08-15 03:01:24 -04:00
|
|
|
M: track layout*
|
2006-08-23 22:14:53 -04:00
|
|
|
dup track-layout pack-layout ;
|
2006-05-19 21:08:42 -04:00
|
|
|
|
2006-11-10 17:01:19 -05:00
|
|
|
: track-pref-dims ( dims sizes -- dim )
|
2006-11-21 21:45:22 -05:00
|
|
|
[ v/n ] 2map max-dim [ >fixnum ] map ;
|
2006-05-23 01:43:08 -04:00
|
|
|
|
2006-08-15 03:01:24 -04:00
|
|
|
M: track pref-dim*
|
2006-05-23 01:43:08 -04:00
|
|
|
[
|
2006-11-21 21:45:22 -05:00
|
|
|
dup gadget-children pref-dims
|
2006-05-23 01:43:08 -04:00
|
|
|
dup rot track-sizes track-pref-dims >r max-dim r>
|
|
|
|
|
] keep gadget-orientation set-axis ;
|
|
|
|
|
|
2006-11-21 21:45:22 -05:00
|
|
|
: track-add ( gadget track size -- )
|
|
|
|
|
over track-sizes push add-gadget ;
|
2006-05-25 23:25:00 -04:00
|
|
|
|
|
|
|
|
: build-track ( track specs -- )
|
2006-06-29 01:54:11 -04:00
|
|
|
#! Specs is an array of quadruples { quot post setter loc }.
|
2006-05-25 23:25:00 -04:00
|
|
|
#! The setter has stack effect ( new gadget -- ),
|
|
|
|
|
#! the loc is a ratio from 0 to 1.
|
2006-11-21 21:45:22 -05:00
|
|
|
swap [ [ track-add ] build-spec ] with-gadget ; inline
|
2006-05-25 23:25:00 -04:00
|
|
|
|
|
|
|
|
: make-track ( specs orientation -- gadget )
|
2006-07-28 16:07:22 -04:00
|
|
|
<track> [ swap build-track ] keep ; inline
|
2006-05-25 23:25:00 -04:00
|
|
|
|
|
|
|
|
: make-track* ( gadget specs orientation -- gadget )
|
2006-07-28 16:07:22 -04:00
|
|
|
<track> pick [ set-delegate build-track ] keep ; inline
|