diff --git a/basis/ui/gadgets/sliders/sliders.factor b/basis/ui/gadgets/sliders/sliders.factor index d293fd7f8b..b98a0d152e 100644 --- a/basis/ui/gadgets/sliders/sliders.factor +++ b/basis/ui/gadgets/sliders/sliders.factor @@ -9,11 +9,15 @@ IN: ui.gadgets.sliders 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 ; @@ -34,7 +38,9 @@ CONSTANT: elevator-padding 4 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 ) [ @@ -48,7 +54,7 @@ CONSTANT: min-thumb-dim 30 #! 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 * ; @@ -131,7 +137,9 @@ elevator H{ 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 @@ -235,4 +243,5 @@ PRIVATE> [ f track-add ] [ f track-add ] [ drop { 1 1 } >>dim f track-add ] - } cleave ; \ No newline at end of file + } cleave ; +