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 )
24 dup rect-dim viewport-gap 2 v*n v-
25 over gadget-child pref-dim vmax
26 swap gadget-child (>>dim) ;
28 M: viewport focusable-child*
31 M: viewport pref-dim* viewport-dim ;
33 : scroller-value ( scroller -- loc )
34 model>> range-value [ >fixnum ] map ;
36 M: viewport model-changed
41 swap gadget-child (>>loc) ;
43 : visible-dim ( gadget -- dim )
44 dup parent>> viewport?
45 [ parent>> rect-dim viewport-gap 2 v*n v- ]