[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sc-users] drawOnRefresh?
Hi Thor,
here is a little example, which shows how to freeze a SCUserView:
That example makes me realise that there should be a clear method, to wipe
out everything drawn.
Note that clearOnRefresh_(false) works only with relativeOrigin_(true).
Jan
(
var win, userView2DrawFunc, drawingDone=false;
win = SCWindow.new.front;
win.view.decorator=FlowLayout(win.view.bounds);
SCUserView(win, (win.view.bounds.width*0.5-12)@win.view.bounds.height)
.relativeOrigin_(true)
.clearOnRefresh_(true)
.drawFunc_({
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);
}
})
});
userView2DrawFunc =
{
if(drawingDone.not){
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);
}
});
drawingDone = true;
}
};
SCUserView(win, (win.view.bounds.width*0.5-12)@win.view.bounds.height)
.relativeOrigin_(true)
.clearOnRefresh_(false)
.drawFunc_(userView2DrawFunc);
~win = win;
)
~win.refresh;
On Tue, 18 Dec 2007 12:42:49 +0000, thor <th.list@xxxxxxxxx> wrote:
>
>
>> 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.
>
> Hmm. Not sure if I understand.
>
> I've got a SCUserView with a drawFunction. I only want it to draw
> when I tell it to.
>
> I then update the SCWindow and other Views constantly. When that
> happens, the
> SCUserView drawing disappears. (that is if I have a draw flag that
> says false unless
> I want it to draw) So it needs to draw on every window update using
> lots of CPU
> cycles for nothing.
>
> If there was a .drawOnRefresh_(false) that would just keep the
> drawing from the last
> window update without redrawing it, it would save processing.
>
> (but thinking about it, this might not be how things work, perhaps
> it's not possible
> to "leave" or "freeze" a view in the window and update everything
> else??)
>
> Maybe I'm just misunderstanding the workings of SCUserView drawing???
>
> thor
>
>
>> (
>> 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
>> |#
>>
>> _______________________________________________
>> sc-users mailing list
>> sc-users@xxxxxxxxxxxxxxx
>> http://www.create.ucsb.edu/mailman/listinfo/sc-users
>
> _______________________________________________
> sc-users mailing list
> sc-users@xxxxxxxxxxxxxxx
> http://www.create.ucsb.edu/mailman/listinfo/sc-users