diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c index 00cb01c11ed5e61866aeeaeb09cea6c0a0c28b6b..40171335a939c93e4e9a0f11c37d5d3b3202db69 100644 --- a/pd/src/g_all_guis.c +++ b/pd/src/g_all_guis.c @@ -254,7 +254,7 @@ void iemgui_label_font(t_iemgui *x, t_symbol *s, int ac, t_atom *av) x->x_fontsize = maxi(atom_getintarg(1, ac, av),4); if(glist_isvisible(x->x_glist)) { - sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s}\n", + sys_vgui(".x%lx.c itemconfigure %lxLABEL -font %s\n", glist_getcanvas(x->x_glist), x, iemgui_font(x), x->x_fontsize, sys_fontweight); iemgui_shouldvis(x, IEM_GUI_DRAW_MODE_CONFIG); @@ -399,7 +399,7 @@ void iemgui_shouldvis(t_iemgui *x, int mode) canvas, rtext_gettag(yr)); sys_vgui(".x%lx.c raise selected %s\n", canvas, rtext_gettag(yr)); - //sys_vgui(".x%lx.c raise all_cords\n", canvas); + //canvas_raise_all_cords(canvas); } else { @@ -611,8 +611,10 @@ int iem_fstyletoint(t_iemgui *x) extern int gfxstub_haveproperties(void *key); -int mini(int a, int b) {return a<b?a:b;} -int maxi(int a, int b) {return a>b?a:b;} +int mini(int a, int b) {return a<b?a:b;} +int maxi(int a, int b) {return a>b?a:b;} +float minf(float a, float b) {return a<b?a:b;} +float maxf(float a, float b) {return a>b?a:b;} // in all 20 cases : // [bng], [tgl], [hradio], [vradio], [hsl], [vsl], [cnv], [nbx], [vu] @@ -850,12 +852,10 @@ void iemgui_label_draw_new(t_iemgui *x, t_glist *canvas) { int x1=text_xpix(&x->x_obj, x->x_glist); int y1=text_ypix(&x->x_obj, x->x_glist); sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w " - "-font {{%s} -%d %s} -fill #%6.6x " - "-tags {%lxLABEL x%lx text iemgui}\n", + "-font %s -fill #%6.6x -tags {%lxLABEL x%lx text iemgui}\n", canvas, x1+x->x_ldx, y1+x->x_ldy, x->x_lab!=s_empty?x->x_lab->s_name:"", - iemgui_font(x), x->x_fontsize, sys_fontweight, - x->x_lcol, x, x); + iemgui_font(x), x->x_lcol, x, x); } void iemgui_label_draw_move(t_iemgui *x, t_glist *canvas) { @@ -867,14 +867,14 @@ void iemgui_label_draw_move(t_iemgui *x, t_glist *canvas) { void iemgui_label_draw_config(t_iemgui *x, t_glist *canvas) { if (x->x_selected && x->x_glist == canvas) - sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} " + sys_vgui(".x%lx.c itemconfigure %lxLABEL -font %s " "-fill $pd_colors(selection) -text {%s} \n", - canvas, x, iemgui_font(x), x->x_fontsize, sys_fontweight, + canvas, x, iemgui_font(x), x->x_lab!=s_empty?x->x_lab->s_name:""); else - sys_vgui(".x%lx.c itemconfigure %lxLABEL -font {{%s} -%d %s} " + sys_vgui(".x%lx.c itemconfigure %lxLABEL -font %s " "-fill #%6.6x -text {%s} \n", - canvas, x, iemgui_font(x), x->x_fontsize, sys_fontweight, + canvas, x, iemgui_font(x), x->x_lcol, x->x_lab!=s_empty?x->x_lab->s_name:""); } @@ -967,7 +967,7 @@ void iemgui_draw_new(t_iemgui *x, t_glist *glist) { t_canvas *canvas=glist_getcanvas(glist); iemgui_label_draw_new(x,canvas); iemgui_draw_io(x,glist,7); - sys_vgui(".x%lx.c raise all_cords\n", glist_getcanvas(x->x_glist)); // used to be inside x_draw + canvas_raise_all_cords(glist_getcanvas(x->x_glist)); // used to be inside x_draw } void iemgui_draw_io(t_iemgui *x, t_glist *glist, int old_sr_flags) { @@ -999,13 +999,21 @@ void wb_init(t_widgetbehavior *wb, t_getrectfn gr, t_clickfn cl) { wb->w_displacefnwtag = iemgui_displace_withtag; } -const char *iemgui_font(t_iemgui *x) { - int f = x->x_font_style; - if(f == 0) return sys_font; +const char *iemgui_typeface(t_iemgui *x) { + int f = x->x_font_style; + if(f == 0) return sys_font; if(f == 1) return "helvetica"; if(f == 2) return "times"; return "invalid-font"; } +// this uses a static buffer, so don't use it twice in the same sys_vgui. +// the static buffer could be replaced by a malloc when sys_vgui is replaced +// by something that frees that memory. +const char *iemgui_font(t_iemgui *x) { + static char buf[64]; + sprintf(buf, "{{%s} -%d %s}", iemgui_typeface(x), x->x_fontsize, sys_fontweight); + return buf; +} void iemgui_init(t_iemgui *x, t_floatarg f) {x->x_loadinit = f!=0.0;} diff --git a/pd/src/g_all_guis.h b/pd/src/g_all_guis.h index abbfc0a133c7df599d107f5a8dbb83659f63c9c7..b47ec8cecf59d207237a57a2023058bf0688b10d 100644 --- a/pd/src/g_all_guis.h +++ b/pd/src/g_all_guis.h @@ -30,7 +30,7 @@ #define IEM_GUI_DRAW_MODE_MOVE 1 #define IEM_GUI_DRAW_MODE_NEW 2 #define IEM_GUI_DRAW_MODE_SELECT 3 -//#define IEM_GUI_DRAW_MODE_ERASE 4 // obsolete since 2014.08 +#define IEM_GUI_DRAW_MODE_ERASE 4 // obsolete since 2014.08 #define IEM_GUI_DRAW_MODE_CONFIG 5 #define IEM_GUI_DRAW_MODE_IO 6 /* also reserves 7,8,9 by adding old_sr_flags */ @@ -260,6 +260,8 @@ EXTERN void iemgui__clickhook3(t_scalehandle *sh, int newstate); EXTERN int mini(int a, int b); EXTERN int maxi(int a, int b); +EXTERN float minf(float a, float b); +EXTERN float maxf(float a, float b); // other refactor by Mathieu EXTERN void iemgui_tag_selected( t_iemgui *x, t_glist *canvas); @@ -283,6 +285,8 @@ EXTERN const char *selection_color; static inline int iemgui_has_snd (t_iemgui *x) {return x->x_snd!=s_empty;} static inline int iemgui_has_rcv (t_iemgui *x) {return x->x_rcv!=s_empty;} EXTERN const char *iemgui_font(t_iemgui *x); +EXTERN const char *iemgui_typeface(t_iemgui *x); + EXTERN void iemgui_class_addmethods(t_class *c); EXTERN void scrollbar_update(t_glist *glist); EXTERN void iemgui_init(t_iemgui *x, t_floatarg f); diff --git a/pd/src/g_numbox.c b/pd/src/g_numbox.c index 96b0ea18199fec52a5016f50448d16e3b9517fc1..6e1f77db9ec9873c2e5abfb225012493d7d69e24 100644 --- a/pd/src/g_numbox.c +++ b/pd/src/g_numbox.c @@ -169,10 +169,8 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist) x->x_gui.x_fcol, x, x); my_numbox_ftoa(x); sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w " - "-font {{%s} -%d %s} -fill #%6.6x " - "-tags {%lxNUMBER x%lx noscroll text iemgui}\n", - canvas, x1+half+2, y1+half+d, - x->x_buf, iemgui_font(&x->x_gui), x->x_gui.x_fontsize, sys_fontweight, + "-font %s -fill #%6.6x -tags {%lxNUMBER x%lx noscroll text iemgui}\n", + canvas, x1+half+2, y1+half+d, x->x_buf, iemgui_font(&x->x_gui), x->x_gui.x_fcol, x, x); } @@ -201,10 +199,8 @@ static void my_numbox_draw_config(t_my_numbox* x,t_glist* glist) t_canvas *canvas=glist_getcanvas(glist); char fcol[8]; sprintf(fcol, "%6.6x", x->x_gui.x_fcol); int issel = x->x_gui.x_selected && x->x_gui.x_glist == canvas; - sys_vgui(".x%lx.c itemconfigure %lxNUMBER -font {{%s} %d %s} " - "-fill %s\n", - canvas, x, iemgui_font(&x->x_gui), x->x_gui.x_fontsize, sys_fontweight, - issel ? selection_color : fcol); + sys_vgui(".x%lx.c itemconfigure %lxNUMBER -font %s -fill %s\n", + canvas, x, iemgui_font(&x->x_gui), issel ? selection_color : fcol); sys_vgui(".x%lx.c itemconfigure %lxBASE2 -fill %s\n", canvas, x, issel ? selection_color : fcol); @@ -478,16 +474,8 @@ static void my_numbox_dialog(t_my_numbox *x, t_symbol *s, int argc, iemgui_dialog(&x->x_gui, srl, argc, argv); x->x_numwidth = my_numbox_calc_fontwidth(x); my_numbox_check_minmax(x, min, max); - //if (need_to_redraw) { iemgui_draw_erase(&x->x_gui, x->x_gui.x_glist); iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_NEW); - /*} else { - x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); - iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_IO + sr_flags); - //x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG); - //x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_MOVE); - iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE); - }*/ scalehandle_draw(&x->x_gui, x->x_gui.x_glist); //canvas_restore_original_position(x->x_gui.x_glist, (t_gobj *)x,"bogus",-1); scrollbar_update(x->x_gui.x_glist); diff --git a/pd/src/g_slider.c b/pd/src/g_slider.c index 61ab9cd3b47b5abb4fad679f093971c6f8a0bbe5..d50080508f8fba703ff79f14724002f9806b6389 100644 --- a/pd/src/g_slider.c +++ b/pd/src/g_slider.c @@ -213,7 +213,7 @@ void slider_check_length(t_slider *x, int w) if (x->x_orient) x->x_gui.x_h = w; else x->x_gui.x_w = w; x->x_center = (w-1)*50; - if(x->x_val > (w*100 - 100)) + if(x->x_val > (w-1)*100) { x->x_pos = (w-1)*100; x->x_val = x->x_pos; @@ -280,8 +280,9 @@ static void slider_bang(t_slider *x) out = x->x_min*exp(x->x_k*(double)(x->x_val)*0.01); else { if (x->x_is_last_float && x->x_last <= x->x_max && - x->x_last >= x->x_min) + x->x_last >= x->x_min) { out = x->x_last; + } else out = (double)(x->x_val)*0.01*x->x_k + x->x_min; } @@ -355,17 +356,20 @@ static void slider_click(t_slider *x, t_floatarg xpos, t_floatarg ypos, { if(!x->x_steady) x->x_val = x->x_orient ? - (int)(100.0 * ( xpos - text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist))) : - (int)(100.0 * (x->x_gui.x_h + text_ypix(&x->x_gui.x_obj, x->x_gui.x_glist) - ypos)); + (int)(100.0 * (x->x_gui.x_h + text_ypix(&x->x_gui.x_obj, x->x_gui.x_glist) - ypos)) : + (int)(100.0 * ( xpos - text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist))); + printf("slider_click x->val=%d x->pos=%d\n",x->x_val,x->x_pos); int w = x->x_orient ? x->x_gui.x_h : x->x_gui.x_w; x->x_val = mini(maxi(x->x_val,0),100*(w-1)); if (x->x_pos != x->x_val) { + printf("slider_click x->val=%d x->pos=%d\n",x->x_val,x->x_pos); x->x_pos = x->x_val; x->x_gui.x_changed = 1; x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); } + x->x_is_last_float=0; // does anyone know how this works with !steady && rcv==snd ? slider_bang(x); glist_grab(x->x_gui.x_glist, &x->x_gui.x_obj.te_g, (t_glistmotionfn)slider_motion, 0, xpos, ypos); @@ -387,6 +391,7 @@ static int slider_newclick(t_gobj *z, struct _glist *glist, static void slider_set(t_slider *x, t_floatarg f) { double g; + t_floatarg of=f; if(x->x_gui.x_reverse) f = maxi(mini(f,x->x_min),x->x_max); else @@ -396,6 +401,7 @@ static void slider_set(t_slider *x, t_floatarg f) else g = (f-x->x_min)/x->x_k; x->x_val = (int)(100.0*g + 0.49999); + printf("slider_set val=%d pos=%d of=%f f=%f g=%f min=%f max=%f reverse=%d\n",x->x_val,x->x_pos,of,f,g,x->x_min,x->x_max,x->x_gui.x_reverse); if (x->x_pos != x->x_val) { x->x_pos = x->x_val; @@ -406,11 +412,14 @@ static void slider_set(t_slider *x, t_floatarg f) static void slider_float(t_slider *x, t_floatarg f) { + printf("(1)slider_float x->val=%d x->pos=%d f=%f\n",x->x_val,x->x_pos,f); x->x_is_last_float = 1; x->x_last = f; slider_set(x, f); + printf("(2)slider_float x->val=%d x->pos=%d\n",x->x_val,x->x_pos); if(x->x_gui.x_put_in2out) slider_bang(x); + printf("(3)slider_float x->val=%d x->pos=%d\n",x->x_val,x->x_pos); } static void slider_size(t_slider *x, t_symbol *s, int ac, t_atom *av) diff --git a/pd/src/g_vumeter.c b/pd/src/g_vumeter.c index 14a49af5f1129d59dea5a6e71141032bb3e1288a..782b4bc6b421f302c240d004f142f33040d0e529 100644 --- a/pd/src/g_vumeter.c +++ b/pd/src/g_vumeter.c @@ -143,11 +143,10 @@ static void vu_draw_new(t_vu *x, t_glist *glist) yyy = k4 + k1 * (k2-i); if((i&3)==1 && (x->x_scale)) sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w " - "-font {{%s} -%d %s} -fill #%6.6x " + "-font %s -fill #%6.6x " "-tags {%lxSCALEN %lxSCALE%d x%lx text iemgui}\n", canvas, end+1, yyy+k3+2, iemgui_vu_scale_str[i/4], - iemgui_font(&x->x_gui), x->x_gui.x_fontsize, - sys_fontweight, x->x_gui.x_lcol, x, x, i, x); + iemgui_font(&x->x_gui), x->x_gui.x_lcol, x, x, i, x); led_col = iemgui_vu_col[i]; if (i<=IEM_VU_STEPS) sys_vgui(".x%lx.c create polyline %d %d %d %d " @@ -217,10 +216,8 @@ static void vu_draw_config(t_vu* x, t_glist* glist) sys_vgui(".x%lx.c itemconfigure %lxRLED%d -strokewidth %d\n", canvas, x, i, x->x_led_size); if((i&3)==1) sys_vgui(".x%lx.c itemconfigure %lxSCALE%d -text {%s} " - "-font {{%s} -%d %s} -fill %s\n", - canvas, x, i, iemgui_vu_scale_str[i/4], iemgui_font(&x->x_gui), - x->x_gui.x_fontsize, sys_fontweight, - (x->x_scale) ? selection_color : lcol); + "-font %s -fill %s\n", canvas, x, i, iemgui_vu_scale_str[i/4], + iemgui_font(&x->x_gui), x->x_scale ? selection_color : lcol); } iemgui_label_draw_config(&x->x_gui,canvas); sys_vgui(".x%lx.c itemconfigure %lxRCOVER -fill #%6.6x -stroke #%6.6x\n", @@ -450,20 +447,16 @@ static void vu_scale(t_vu *x, t_floatarg fscale) yyy = k4 + k1*(k2-i); if((i&3)==1) sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w " - "-font {{%s} -%d %s} -fill #%6.6x " - "-tags {%lxSCALE%d x%lx}\n", + "-font %s -fill #%6.6x -tags {%lxSCALE%d x%lx}\n", canvas, end+1, yyy+k3+2, iemgui_vu_scale_str[i/4], - iemgui_font(&x->x_gui), x->x_gui.x_fontsize, - sys_fontweight, x->x_gui.x_lcol, x, i, x); + iemgui_font(&x->x_gui), x->x_gui.x_lcol, x, i, x); } i = IEM_VU_STEPS + 1; yyy = k4 + k1*(k2-i); sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w " - "-font {{%s} -%d %s} -fill #%6.6x " - "-tags {%lxSCALE%d x%lx}\n", + "-font %s -fill #%6.6x -tags {%lxSCALE%d x%lx}\n", canvas, end+1, yyy+k3+2, iemgui_vu_scale_str[i/4], - iemgui_font(&x->x_gui), x->x_gui.x_fontsize, - sys_fontweight, x->x_gui.x_lcol, x, i, x); + iemgui_font(&x->x_gui), x->x_gui.x_lcol, x, i, x); } } }