2006-06-07 21:59:59 -04:00
|
|
|
! Copyright (C) 2005, 2006 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2006-06-07 23:51:28 -04:00
|
|
|
IN: gadgets-frames
|
|
|
|
USING: arrays gadgets gadgets-grids generic kernel math
|
|
|
|
namespaces sequences words ;
|
2005-03-10 17:57:22 -05:00
|
|
|
|
2005-08-25 15:27:38 -04:00
|
|
|
! A frame arranges gadgets in a 3x3 grid, where the center
|
|
|
|
! gadgets gets left-over space.
|
2006-06-07 21:59:59 -04:00
|
|
|
TUPLE: frame ;
|
2005-07-19 17:40:32 -04:00
|
|
|
|
2006-06-07 21:59:59 -04:00
|
|
|
: <frame-grid> 3 [ drop 3 f <array> ] map ;
|
2005-09-27 14:12:17 -04:00
|
|
|
|
|
|
|
: @center 1 1 ;
|
|
|
|
: @left 0 1 ;
|
|
|
|
: @right 2 1 ;
|
|
|
|
: @top 1 0 ;
|
|
|
|
: @bottom 1 2 ;
|
|
|
|
|
|
|
|
: @top-left 0 0 ;
|
|
|
|
: @top-right 2 0 ;
|
|
|
|
: @bottom-left 0 2 ;
|
|
|
|
: @bottom-right 2 2 ;
|
2005-03-10 22:52:55 -05:00
|
|
|
|
|
|
|
C: frame ( -- frame )
|
2006-06-07 21:59:59 -04:00
|
|
|
<frame-grid> <grid> over set-gadget-delegate ;
|
2005-09-28 23:29:00 -04:00
|
|
|
|
2005-10-09 21:27:14 -04:00
|
|
|
: delegate>frame ( tuple -- ) <frame> swap set-delegate ;
|
2005-03-10 17:57:22 -05:00
|
|
|
|
2005-08-25 20:28:56 -04:00
|
|
|
: (fill-center) ( vec n -- )
|
2006-06-17 16:51:44 -04:00
|
|
|
over first pick third v+ [v-] 1 rot set-nth ;
|
2005-08-25 20:28:56 -04:00
|
|
|
|
|
|
|
: fill-center ( horiz vert dim -- )
|
2006-06-17 16:51:44 -04:00
|
|
|
tuck (fill-center) (fill-center) ;
|
2005-08-25 20:28:56 -04:00
|
|
|
|
2006-08-15 03:01:24 -04:00
|
|
|
M: frame layout*
|
2006-06-07 23:51:28 -04:00
|
|
|
dup [
|
|
|
|
[ rot rect-dim fill-center ] 2keep grid-layout
|
|
|
|
] with-grid ;
|
2006-05-19 22:29:01 -04:00
|
|
|
|
2006-05-20 02:13:44 -04:00
|
|
|
: make-frame ( specs -- gadget )
|
2006-07-28 16:07:22 -04:00
|
|
|
<frame> [ swap build-grid ] keep ; inline
|
2006-05-20 02:13:44 -04:00
|
|
|
|
|
|
|
: make-frame* ( gadget specs -- gadget )
|
2006-07-28 16:07:22 -04:00
|
|
|
over [ delegate>frame build-grid ] keep ; inline
|