]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/gadgets/frames/frames.factor
Switch to https urls
[factor.git] / basis / ui / gadgets / frames / frames.factor
1 ! Copyright (C) 2005, 2009 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors fry kernel math math.order sequences ui.gadgets
4 ui.gadgets.grids ui.gadgets.grids.private ;
5 IN: ui.gadgets.frames
6
7 TUPLE: frame < grid { filled-cell initial: { 0 0 } } ;
8
9 <PRIVATE
10
11 TUPLE: glue < gadget ;
12
13 M: glue pref-dim* drop { 0 0 } ;
14
15 : <glue> ( -- glue ) glue new ;
16
17 : <frame-grid> ( cols rows -- grid )
18     swap '[ _ [ <glue> ] replicate ] replicate ;
19
20 : (fill- ( frame grid-layout quot1 quot2 -- pref-dim gap filled-cell dims )
21     [ '[ [ dim>> ] [ gap>> ] [ filled-cell>> ] tri _ tri@ ] dip ] dip call ; inline
22
23 : available-space ( pref-dim gap dims -- avail )
24     length 1 + * [-] ; inline
25
26 : -center) ( pref-dim gap filled-cell dims -- )
27     [ nip available-space ]
28     [ [ remove-nth sum [-] ] [ set-nth ] 2bi ] 2bi ; inline
29
30 : (fill-center) ( frame grid-layout quot1 quot2 -- ) (fill- -center) ; inline
31
32 : fill-center ( frame grid-layout -- )
33     [ [ first ] [ column-widths>> ] (fill-center) ]
34     [ [ second ] [ row-heights>> ] (fill-center) ] 2bi ;
35
36 : <frame-layout> ( frame -- grid-layout )
37     dup <grid-layout> [ fill-center ] [ ] bi ;
38
39 PRIVATE>
40
41 M: frame layout*
42     [ grid>> ] [ <frame-layout> ] bi layout-grid ;
43
44 : new-frame ( cols rows class -- frame )
45     [ <frame-grid> ] dip new-grid ; inline
46
47 : <frame> ( cols rows -- frame )
48     frame new-frame ;