This class is meant as an emulation of SCRangeSlider. last mod: 25-nov-07 sciss
Also refer to JSCView for different behaviour affecting all widgets
different behaviour | |
knobColor | default is clear (grey) not blue |
keyboard modifiers | alt+click enforces resize ; shift+click extends resize nearest bar end |
preferred size | optimum height is 17px |
known issues / todo | |
focus border | (FIXED?) not adjusted when resizing the component |
Note: please use the abstraction layer GUI.rangeSlider if possible! (see GUI)
A range slider is like a normal slider but instead of a fixed-size knob, the knob has a variable extent. The value of the range slider is represented by a 'lo' and a 'hi' component, both being normalized to range 0 ... 1 which corresponds to maximally left / bottom and maximally right / top.
( var win; win = JSCWindow( "JSCRangeSlider", Rect( 100, 100, 200, 200 ), resizable: false ); n = JSCRangeSlider( win, Rect( 20, 20, 160, 17 )).lo_( 0 ).hi_( 0.6666 ); // knobColor_ sets the colour of the slider's knob n.knobColor_( Color.red ); n = JSCRangeSlider( win, Rect( 20, 45, 160, 17 )).lo_( 0.3333 ).hi_( 0.8333 ); n.knobColor_( Color.white ); n = JSCRangeSlider( win, Rect( 20, 70, 160, 17 )).lo_( 0.6666 ).hi_( 1.0 ); n.knobColor_( Color.blue ); win.front; ) // action_ assigns a function that is executed whenever the user adjusts the slider. // note: 'n' holds to bottom-most (blue) slider n.action = { arg b; ("lo = "++b.lo++"; range = "++b.range).postln }; // enabled_ can be used to disable or re-enable editing n.enabled_( false ); n.enabled_( true ); // lo_, hi_ and range_ programmatically adjust the lo and hi value of the slider n.lo_( 0.36 ); n.range_( 0.4 ); // the activeXYZ-methods additionally invoke the action function n.activeHi_( 0.8 ); // using step_ the slider values are snapped to a grid n.step_( 0.25 ); // a step value of 0 means 'no grid' n.step_( 0 );
Like JSCSlider, the range slider automatically appears with horizontal or vertical orientation, according to the width-to-height ratio:
n.bounds = n.bounds.resizeTo( 17, 100 );
R | random lo/hi |
N | minimum lo/hi |
X | maximum lo/hi |
C | center lo/hi |
A | select all (0...1) |
csr left/down | decrease lo/hi |
csr right/up | increase lo/hi |