[PD-dev] adding a built-in [change] object to the built-in GUI objects
Hans-Christoph Steiner
hans at at.or.at
Mon Dec 3 17:02:30 CET 2012
On Dec 1, 2012, at 3:28 AM, Jonathan Wilkes wrote:
> ----- Original Message -----
>
>> From: Hans-Christoph Steiner <hans at at.or.at>
>> To: "pd-dev at iem.at List" <pd-dev at iem.at>
>> Cc:
>> Sent: Friday, November 30, 2012 11:20 PM
>> Subject: [PD-dev] adding a built-in [change] object to the built-in GUI objects
>>
>>
>> Lots of patches use the built-in GUI objects for displays, and often a fast
>> stream of events is hooked straight up to the GUI object, causing the GUI object
>> to send many pointless updates, like draw commands when the number hasn't
>> changed, or multiple draw commands per screen refresh cycle.
>
> The multiple draw commands per screen refresh cycle seems like the more common
> source of needless draw commands.
That should be addressed too, but that's a lot more complicated. Honestly, I think it would be better to rewrite the basic GUI objects from scratch rather than put more into the current ones.
>> I propose to only send the GUI update commands when the relevant value has
>> changed. I think this should apply to both the main element, like the slider
>> knob, and the label for that GUI object, since that's often used as a
>> display. The code change is pretty simple, but I was wondering if people
>> thought there could be any problems caused by this
>
> At the end of hslider_set, why not just check if x->x_value==(int)(100.0*g + 0.49999)
> before assigning it? If its already equal just return.
Good idea, that's what I ended up doing:
http://pure-data.svn.sourceforge.net/viewvc/pure-data?view=revision&revision=16643
Then I did something similar for the [label ( draws:
http://pure-data.git.sourceforge.net/git/gitweb.cgi?p=pure-data/pd-extended.git;a=commitdiff;h=0271c92082c6db85eccba0f0b1226b9dbff09ceb
.hc
>
>>
>> Here is the needed change, for example, for the hslider knob:
>>
>> index b352fb9..88681fc 100644
>> --- a/src/g_all_guis.h
>> +++ b/src/g_all_guis.h
>> @@ -185,6 +185,7 @@ typedef struct _hslider
>> t_iemgui x_gui;
>> int x_pos;
>> int x_val;
>> + int x_prev_val;
>> int x_center;
>> int x_thick;
>> int x_lin0_log1;
>> index 470771a..e1a3c83 100644
>> --- a/src/g_hslider.c
>> +++ b/src/g_hslider.c
>> @@ -33,7 +33,7 @@ static t_class *hslider_class;
>> static void hslider_draw_update(t_gobj *client, t_glist *glist)
>> {
>> t_hslider *x = (t_hslider *)client;
>> - if (glist_isvisible(glist))
>> + if (glist_isvisible(glist) && x->x_val != x->x_prev_val)
>> {
>> int r = text_xpix(&x->x_gui.x_obj, glist) + (x->x_val +
>> 50)/100;
>> int ypos=text_ypix(&x->x_gui.x_obj, glist);
>> @@ -57,6 +57,7 @@ static void hslider_draw_update(t_gobj *client, t_glist
>> *glist)
>> x->x_thick = 0;
>> }
>> }
>> + x->x_prev_val = x->x_val;
>> }
>> }
>>
>>
>>
>> _______________________________________________
>> Pd-dev mailing list
>> Pd-dev at iem.at
>> http://lists.puredata.info/listinfo/pd-dev
>>
More information about the Pd-dev
mailing list