]> gitweb.factorcode.org Git - factor.git/blob - extra/ui/gadgets/frames/frames.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / extra / ui / gadgets / frames / frames.factor
1 ! Copyright (C) 2005, 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays generic kernel math namespaces sequences words
4 splitting math.vectors ui.gadgets.grids ui.gadgets ;
5 IN: ui.gadgets.frames
6
7 ! A frame arranges gadgets in a 3x3 grid, where the center
8 ! gadgets gets left-over space.
9 TUPLE: frame ;
10
11 : <frame-grid> 9 [ drop <gadget> ] map 3 group ;
12
13 : @center 1 1 ;
14 : @left 0 1 ;
15 : @right 2 1 ;
16 : @top 1 0 ;
17 : @bottom 1 2 ;
18
19 : @top-left 0 0 ;
20 : @top-right 2 0 ;
21 : @bottom-left 0 2 ;
22 : @bottom-right 2 2 ;
23
24 : <frame> ( -- frame )
25     frame new
26     <frame-grid> <grid> over set-gadget-delegate ;
27
28 : (fill-center) ( vec n -- )
29     over first pick third v+ [v-] 1 rot set-nth ;
30
31 : fill-center ( horiz vert dim -- )
32     tuck (fill-center) (fill-center) ;
33
34 M: frame layout*
35     dup compute-grid
36     [ rot rect-dim fill-center ] 3keep
37     grid-layout ;
38
39 : make-frame ( quot -- frame )
40     <frame> make-gadget ; inline
41
42 : build-frame ( tuple quot -- tuple )
43     <frame> build-gadget ; inline
44
45 : frame, ( gadget i j -- )
46     \ make-gadget get -rot grid-add ;