! Copyright (C) 2005, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors fry kernel math math.order sequences ui.gadgets ui.gadgets.grids ui.gadgets.grids.private ; IN: ui.gadgets.frames TUPLE: frame < grid filled-cell ; ( -- glue ) glue new ; : ( cols rows -- grid ) swap '[ _ [ ] replicate ] replicate ; : (fill- ( frame grid-layout quot1 quot2 -- pref-dim gap filled-cell dims ) [ '[ [ dim>> ] [ gap>> ] [ filled-cell>> ] tri _ tri@ ] dip ] dip call ; inline : available-space ( pref-dim gap dims -- avail ) length 1 + * [-] ; inline : -center) ( pref-dim gap filled-cell dims -- ) [ nip available-space ] [ [ remove-nth sum [-] ] [ set-nth ] 2bi ] 2bi ; inline : (fill-center) ( frame grid-layout quot1 quot2 -- ) (fill- -center) ; inline : fill-center ( frame grid-layout -- ) [ [ first ] [ column-widths>> ] (fill-center) ] [ [ second ] [ row-heights>> ] (fill-center) ] 2bi ; : ( frame -- grid-layout ) dup [ fill-center ] [ ] bi ; PRIVATE> M: frame layout* [ grid>> ] [ ] bi layout-grid ; : new-frame ( cols rows class -- frame ) [ ] dip new-grid ; inline : ( cols rows -- frame ) frame new-frame ;