SC2DSlider a two-dimensional GUI slider

Inherits from: Object : SCView : SCControlView : SCSliderBase

See also: SC2DTabletSlider , SCTabletView

Some Important Issues Regarding SC2DSlider

SC2DSlider values always have ranges between zero and one. You must scale the output and input values to your needs. Using map and unmap, combined with a Spec, is helpful for this. To set the increment or decrement value of the slider, set the step . By default, the shift, ctrl, and alt keys will modify the stepping by 100x, 10x, or 0.1x repectively, though you can customize this by setting shift_scale, ctrl_scale, or alt_scale (see SCSliderBase) . Drag and drop returns and accept a Point. Inherits some formatting form SCSliderBase.

Creation / Class Methods

*new (parent, bounds)

parent - The parent view.

bounds - An instance of Rect, or a Point indicating width@height.

(

w = Window("2DSlider", Rect(100,100, 140 ,140)).front;

t = Slider2D(w, Rect(20, 20,80, 80))

.action_({|sl|

[\sliderX, sl.x, \sliderY, sl.y].postln;

});

)

Accessing Instance and Class Variables

x

x_ (val)

The horizontal value of the 2d slider. Gets/sets the property, \x, by calling get/setProperty(\x, val). This will not do the action of the slider.

activex_ (val)

Sets the property, \x, by calling setPropertyWithAction(\x, val). Does the sliders action, if the x value has changed.

y

y_ (val)

The vertical value of the 2d slider. Gets/sets the property, \y, by calling get/setProperty(\y, val). This will not do the action of the slider.

activey_ (val)

Sets the property, \y, by calling setPropertyWithAction(\y, val). Does the sliders action, if the y value has changed.

setXY (x, y)

A convenience method which performs both the x_ and y_ setters. This will not do the action of the slider.

setXYActive (x, y)

A convenience method which performs both the x_ and y_ setters. Does the action of the slider.

incrementY

Increments y by 1/bounds.height, unless the hight value is out of bounds. Does the action of the slider.

decrementY

Decrements y by 1/bounds.heitght, unless the hight value is out of bounds. Does the action of the slider.

incrementX

Increments x by 1/bounds.width, unless the hight value is out of bounds. Does the action of the slider.

decrementX

Decrements x by 1/bounds.width, unless the hight value is out of bounds. Does the action of the slider.

Subclassing and Internal Methods

The following methods are usually not used directly or are called by a primitive. Programmers can still call or override these as needed.

defaultKeyDownAction (char, modifiers, unicode)

The default keydown actions are:

key action comment

r activex_(1.rand), activey_(1.rand) with action random

n activex_(0), activey_(0) with action left lower corner

x activex_(1), activey_(1) with action top left corner

c activex_(0.5), activey_(0.5) with action centered

unicode 16rF700, incrementY up arrow

unicode 16rF703, incrementX right arrow

unicode 16rF701, decrementY down arrow

unicode 16rF702, decrementX left arrow

defaultGetDrag

The method called by default when initiating a drag. Returns a Point (lo@hi).

defaultCanReceiveDrag

The method called by default when attempting to place a drag in this object. By default, SCSlider will respond only to drags where the drag contains a Point.

defaultReceiveDrag

The default method called when a drag has been recieved. The default action performed when receiving a drag. Sets x and y respectively using the Point ( currentDrag.x@currentDrag.y) . Performs the action.

properties

A list of properties to which this view responds. See SCView.

returns:

[ \bounds, \visible, \enabled, \canFocus, \resize, \background, \minWidth, \maxWidth, \minHeight, \maxHeight, \knobColor, \step, \x, \y ]

Examples

(

w = Window("Slider2D", Rect(100,100, 140 ,140));

t = Slider2D(w, Rect(20, 20,80, 80))

.x_(0.5) // initial location of x

.y_(1) // initial location of y

.action_({|sl|

[\sliderX, sl.x, \sliderY, sl.y].postln;

});

w.front;

)

t.x // get the x loc

t.x_(0.25) // set the x loc

// drag an drop Points

(

w = Window("Slider2D", Rect(100,100, 500 ,300));

w.view.decorator = FlowLayout(w.view.bounds);

t = Slider2D(w, Rect(20, 20,280, 280))

.x_(0.5) // initial location of x

.y_(1) // initial location of y

.background_( Color.rand )

.action_({|sl|

[\sliderX, sl.x, \sliderY, sl.y].postln;

});

t.step_(0.01);

n=CompositeView.new(w, 200@300);

n.decorator= FlowLayout(n.bounds);

v = { |i| DragBoth.new(n, Rect(0, i * 20, 200, 20)).background_( Color.rand ).align_(\center) }.dup(5);

StaticText.new(n,200@150).string_("hold down cmd and drag points from the slider to the drag slots, or reverse").stringColor_(Color.white);

w.front;

)

// Shape a Sound

(

s.waitForBoot({

a={arg mod=0.05, index=0.05;

var r,out,out2;

r=Saw.ar(8,0.03);

out=PMOsc.ar(440,

660*mod,3*index, 0,

Lag.ar(r,0.01,1));

[out,Delay1.ar(out)];

}.play;

w = Window("Slider2D", Rect(100,Window.screenBounds.height-400, 300 ,300));

w.view.decorator = FlowLayout(w.view.bounds);

t = Slider2D(w, Rect(0, 0,292, 292))

.y_(0.05)

.x_(0.05)

.background_( Color.rand )

.knobColor_(Color.rand)

.action_({|sl|

a.set(\mod,sl.x,\index,sl.y);

});

w.front;

CmdPeriod.doOnce({w.close});

})

)