! Copyright (C) 2005, 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. IN: gadgets-frames USING: arrays gadgets gadgets-grids generic kernel math namespaces sequences words ; ! A frame arranges gadgets in a 3x3 grid, where the center ! gadgets gets left-over space. TUPLE: frame ; : 3 [ drop 3 f ] map ; : @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 ; C: frame ( -- frame ) over set-gadget-delegate ; : delegate>frame ( tuple -- ) swap set-delegate ; : (fill-center) ( vec n -- ) over first pick third v+ [v-] 1 rot set-nth ; : fill-center ( horiz vert dim -- ) tuck (fill-center) (fill-center) ; M: frame layout* dup [ [ rot rect-dim fill-center ] 2keep grid-layout ] with-grid ; : make-frame ( specs -- gadget ) [ swap build-grid ] keep ; inline : make-frame* ( gadget specs -- gadget ) over [ delegate>frame build-grid ] keep ; inline