That's how I ended up implementing it, based on Jonathan's suggestion:
http://sourceforge.net/tracker/?func=detail&aid=3591986&group_id=55736&atid=478072

.hc

On Dec 4, 2012, at 12:06 PM, Miller Puckette wrote:

> I'd suggest cacheing the pixel value, not the value value.  It's an easy
> fix and I can go through and do it while I'm waiting for other bugs to
> surface after trying to make all the 0.44-critical changes on the pile.
> (these are resolving my having broken the "new build system" in my 
> impoartation
> of portaudio, and also finally acting on the hip~ and inlet~ bugs.)
> 
> cheers
> Miller
> 
> On Fri, Nov 30, 2012 at 11:20:53PM -0500, Hans-Christoph Steiner wrote:
>> 
>> 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.
>> 
>> 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
>> 
>> 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@iem.at
>> http://lists.puredata.info/listinfo/pd-dev


_______________________________________________
Pd-dev mailing list
Pd-dev@iem.at
http://lists.puredata.info/listinfo/pd-dev

Reply via email to