TUPLE: slider < track elevator thumb saved line ;
-: slider-value ( gadget -- n ) model>> range-value >fixnum ;
+: slider-value ( gadget -- n ) model>> range-value ;
: slider-page ( gadget -- n ) model>> range-page-value ;
+: slider-min ( gadget -- n ) model>> range-min-value ;
: slider-max ( gadget -- n ) model>> range-max-value ;
: slider-max* ( gadget -- n ) model>> range-max-value* ;
+: slider-length ( gadget -- n ) [ slider-max ] [ slider-min ] bi - ;
+: slider-length* ( gadget -- n ) [ slider-max* ] [ slider-min ] bi - ;
+
: slide-by ( amount slider -- ) model>> move-by ;
: slide-by-page ( amount slider -- ) model>> move-by-page ;
CONSTANT: min-thumb-dim 30
: visible-portion ( slider -- n )
- [ slider-page ] [ slider-max 1 max ] bi / 1 min ;
+ [ slider-page ]
+ [ slider-length 1 max ]
+ bi / 1 min ;
: thumb-dim ( slider -- h )
[
#! x*n is the screen position of the thumb, and conversely
#! for x/n. The '1 max' calls avoid division by zero.
[ [ elevator-length ] [ thumb-dim ] bi - 1 max ]
- [ slider-max* 1 max ]
+ [ slider-length* 1 max ]
bi / ;
: slider>screen ( m slider -- n ) slider-scale * ;
swap >>orientation ;
: thumb-loc ( slider -- loc )
- [ slider-value ] keep slider>screen elevator-padding + ;
+ [ slider-value ]
+ [ slider-min - ]
+ [ slider>screen elevator-padding + ] tri ;
: layout-thumb-loc ( thumb slider -- )
[ thumb-loc ] [ orientation>> ] bi n*v
[ <up-button> f track-add ]
[ <down-button> f track-add ]
[ drop <gadget> { 1 1 } >>dim f track-add ]
- } cleave ;
\ No newline at end of file
+ } cleave ;
+