[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-users] drawOnRefresh?



hi Thor,
i do it with some sort of flag inside the drawfunc. say it's flagged for clear, i then draw a rectangle filling the screen with or without alpha. works fine but maybe there are other ways too.

(
var func, views, counter= 0;

func = {
	if(counter>0, {
		//clear+fadeout - or in your case just don't draw anything
		Pen.fillColor_(Color.grey(1, 0.07));
		Pen.fillRect(Rect(0, 0, w.bounds.width, w.bounds.height));
	}, {
		//draw only when counter= 0
		Pen.use{
			10.do{
				Color.red(rrand(0.0, 1), rrand(0.0, 0.5)).set;
Pen.addArc((400.exprand(2))@(100.rand), rrand(10, 100), 2pi.rand, pi);
				Pen.perform([\stroke, \fill].choose);
			}
		}
	})
};

w = SCWindow.new("DrawFunc Examples").front;
w.view.background_(Color.white);
views = {|i|
v = SCUserView(w, Rect(20+(i*120), 100, 100, 100)).relativeOrigin_ (true);
	v.drawFunc = func;
	v.clearOnRefresh_(false)
} ! 3;
Routine({
	inf.do{
		w.refresh;
		0.1.wait;
		counter= counter-1%20;
	}
}).play(AppClock);
)




Am 17.12.2007 um 17:57 schrieb thor:



Hi

Is it possible to add .drawOnRefresh_ to SCUserView?

I'd like to draw once and then disable SCUserView's draw functionality
until I tell it to draw again. (other views are being updated which forces
SCUserView to draw repeatedly).

The following code from the example works, but it's kind of ugly to have to repeatedly set the drawFunc to nil and then back to the intended drawFunc
when needed.

And I'm not sure if clearOnRefresh saves any CPU...

t

prevent redrawing:

(
var func, views;

func = {|me|
	Pen.use{
		10.do{
			Color.red(rrand(0.0, 1), rrand(0.0, 0.5)).set;
Pen.addArc((400.exprand(2))@(100.rand), rrand(10, 100), 2pi.rand, pi);
			Pen.perform([\stroke, \fill].choose);
		}
	}
};

w = SCWindow.new("DrawFunc Examples").front;
w.view.background_(Color.white);
views = {|i|
v = SCUserView(w, Rect(20+(i*120), 100, 100, 100)).relativeOrigin_ (true);
	v.drawFunc = func;
} ! 3;
w.refresh;
{views.do{|v| v.clearOnRefresh_(false);v.drawFunc = nil}}.defer(0.4);
)


  #|
     fredrikolofsson.com     klippav.org     musicalfieldsforever.com
  |#