factor/basis/ui/gadgets/viewports/viewports.factor

49 lines
1.2 KiB
Factor
Raw Normal View History

! Copyright (C) 2005, 2008 Slava Pestov.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
IN: ui.gadgets.viewports
USING: accessors arrays ui.gadgets ui.gadgets.borders
2008-07-11 19:34:43 -04:00
kernel math namespaces sequences models math.vectors math.geometry.rect ;
2007-09-20 18:09:08 -04:00
: viewport-gap { 3 3 } ; inline
TUPLE: viewport < gadget ;
2007-09-20 18:09:08 -04:00
2008-06-08 16:32:55 -04:00
: find-viewport ( gadget -- viewport )
[ viewport? ] find-parent ;
2007-09-20 18:09:08 -04:00
: viewport-dim ( viewport -- dim )
gadget-child pref-dim viewport-gap 2 v*n v+ ;
: <viewport> ( content model -- viewport )
viewport new-gadget
swap >>model
t >>clipped?
2008-07-13 02:25:44 -04:00
[ swap add-gadget drop ] keep ;
2007-09-20 18:09:08 -04:00
M: viewport layout*
dup rect-dim viewport-gap 2 v*n v-
over gadget-child pref-dim vmax
swap gadget-child (>>dim) ;
2007-09-20 18:09:08 -04:00
M: viewport focusable-child*
gadget-child ;
M: viewport pref-dim* viewport-dim ;
: scroller-value ( scroller -- loc )
2007-11-14 16:35:17 -05:00
gadget-model range-value [ >fixnum ] map ;
2007-09-20 18:09:08 -04:00
M: viewport model-changed
nip
2007-09-20 18:09:08 -04:00
dup relayout-1
dup scroller-value
vneg viewport-gap v+
swap gadget-child set-rect-loc ;
: visible-dim ( gadget -- dim )
dup gadget-parent viewport? [
gadget-parent rect-dim viewport-gap 2 v*n v-
] [
rect-dim
] if ;