SCStaticText a view for displaying text
Inherits from: Object : SCView : SCStaticTextBase
Inherits formatting methods from SCStaticTextBase.
Creation / Class Methods
*new (parent, bounds)
parent - The parent view.
bounds - An instance of Rect, or a Point indicating width@height.
(
w = Window.new.front;
a = StaticText(w, Rect(10, 10, 200, 20));
a.string = "an instance of String";
)
Examples
// basic usage
(
w = Window.new.front;
a = StaticText(w, Rect(10, 10, 200, 20));
a.string = "Rolof's Rolex";
)
// adjust look , alignment and content
a.background=Color.grey;
a.align = \center;
a.font = Font("Monaco", 11);
a.string = "Your Rolex";
// Monitoring values in a synth
(
w = Window("Frequency Monitor", Rect(200, SCWindow.screenBounds.height-200,300,150)).front;
a = StaticText(w, Rect(45, 10, 200, 20)).background_(Color.rand);
a.string = " Current Frequency ";
Button.new(w, Rect(45, 70, 200, 20)).states_([["close",Color.black,Color.rand]]).action_({w.close});
s.waitForBoot({
b=Bus.new(\control,0,1);
q=SynthDef(\Docs_FreqMonitor, {var freq,snd;
freq=LFNoise0.ar(2, 400, 650);
snd=SinOsc.ar(freq,0,0.2);
Out.ar(0,snd);
Out.kr(b.index,freq); // output the frequency to a control bus
}).play;
r= Routine{
{ // Set the value of the StaticText to the value in the control bus.
// Setting GUI values is asynchronous, so you must use .defer in the system clock.
// Also you must check if the window is still open, since Routine will continue for at least
// one step after you close the window.
b.get( {arg v; {w.isClosed.not.if{ a.string= " Current Frequency: "++v.round(0.01)}; }.defer} );
0.01.wait;
}.loop
}.play
});
CmdPeriod.doOnce({w.close});
w.onClose={r.stop; q.free; b.free }; //clean up if the window closes
)
// dynamic text
(
w = Window.new.front;
w.view.background=Color.white;
a = Array.fill(20, {StaticText(w, Rect(w.bounds.extent.x.rand, w.bounds.extent.y.rand, 160, 16))
.string_("Rolof's Rolex".scramble)
.align_(\center)
.stringColor_(Color.rand)
.font_(Font([
"Helvetica-Bold",
"Helvetica",
"Monaco",
"Arial",
"Gadget",
"MarkerFelt-Thin"
].choose, 11))
});
r = {inf.do{|i|
thisThread.randSeed_(1284);
a.do{|item|
// setting GUI values is asynchronous, so you must use .defer
{item.bounds = Rect(5+w.bounds.extent.x.rand * (cos(i*0.01)).abs,
w.bounds.extent.y.rand * sin(i*0.01),
160, 20)}.defer;
};
0.15.wait;
}}.fork;
CmdPeriod.doOnce({w.close});
w.onClose_({r.stop});
)