1 ! Copyright (C) 2005, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 IN: ui.gadgets.viewports
4 USING: accessors arrays ui.gadgets ui.gadgets.borders
5 kernel math namespaces sequences models math.vectors math.geometry.rect ;
7 : viewport-gap { 3 3 } ; inline
9 TUPLE: viewport < gadget ;
11 : find-viewport ( gadget -- viewport )
12 [ viewport? ] find-parent ;
14 : viewport-dim ( viewport -- dim )
15 gadget-child pref-dim viewport-gap 2 v*n v+ ;
17 : <viewport> ( content model -- viewport )
25 [ rect-dim viewport-gap 2 v*n v- ]
26 [ gadget-child pref-dim ]
28 ] [ gadget-child ] bi (>>dim) ;
30 M: viewport focusable-child*
33 M: viewport pref-dim* viewport-dim ;
35 : scroller-value ( scroller -- loc )
36 model>> range-value [ >fixnum ] map ;
38 M: viewport model-changed
43 swap gadget-child (>>loc) ;
45 : visible-dim ( gadget -- dim )
46 dup parent>> viewport?
47 [ parent>> rect-dim viewport-gap 2 v*n v- ]