1 ! Copyright (C) 2005, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays ui.gadgets ui.gadgets.borders
4 kernel math namespaces sequences models math.vectors
6 IN: ui.gadgets.viewports
8 CONSTANT: viewport-gap { 3 3 }
9 CONSTANT: scroller-border { 1 1 }
11 TUPLE: viewport < gadget ;
13 : find-viewport ( gadget -- viewport )
14 [ viewport? ] find-parent ;
16 : viewport-padding ( -- padding )
17 viewport-gap 2 v*n scroller-border v+ ;
19 : viewport-dim ( viewport -- dim )
20 gadget-child pref-dim viewport-padding v+ ;
22 : <viewport> ( content model -- viewport )
30 [ dim>> viewport-padding v- ]
31 [ gadget-child pref-dim ]
35 M: viewport focusable-child*
38 M: viewport pref-dim* viewport-dim ;
40 : scroller-value ( scroller -- loc )
41 model>> range-value [ >fixnum ] map ;
43 M: viewport model-changed
56 : visible-dim ( gadget -- dim )
57 dup parent>> viewport?
58 [ parent>> rect-dim viewport-gap 2 v*n v- ] [ dim>> ] if ;