! Copyright (C) 2005 Slava Pestov. ! See http://factor.sf.net/license.txt for BSD license. IN: gadgets USING: generic kernel lists math matrices namespaces sequences threads vectors styles ; ! An elevator has a thumb that may be moved up and down. TUPLE: elevator ; : find-elevator [ elevator? ] find-parent ; ! A slider scrolls a viewport. TUPLE: slider vector elevator thumb value max page ; : find-slider [ slider? ] find-parent ; : slider-scale ( slider -- n ) #! A scaling factor such that if x is a slider co-ordinate, #! x*n is the screen position of the thumb, and conversely #! for x/n. The '1 max' calls avoid division by zero. dup slider-elevator rect-dim over slider-vector v. 1 max swap slider-max 1 max / ; : slider>screen slider-scale * ; : screen>slider slider-scale / ; : elevator-click ( elevator pos -- ) 2drop ; : elevator-motion ( elevator -- ) hand hand-click-rel elevator-click ; : thumb-actions ( thumb -- ) [ find-elevator elevator-motion ] [ drag 1 ] set-action ; : ( -- thumb ) [ drop ]