From 304848e5acba9b1417e4955bda879f84dbe28595 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Thu, 5 Jan 2017 21:23:58 -0500 Subject: [PATCH] update moonlib/mknob to use matju's refactored iemgui header, add resize anchor --- externals/moonlib/mknob.c | 364 ++++++++++++++++++++++++-------------- 1 file changed, 227 insertions(+), 137 deletions(-) diff --git a/externals/moonlib/mknob.c b/externals/moonlib/mknob.c index 20a4e4dc0..d3c7436c5 100644 --- a/externals/moonlib/mknob.c +++ b/externals/moonlib/mknob.c @@ -14,7 +14,8 @@ #include "m_pd.h" #include "g_canvas.h" -#include "../old_g_all_guis.inc" +//#include "../old_g_all_guis.inc" +#include "g_all_guis.h" #include <math.h> #ifdef _WIN32 @@ -123,17 +124,17 @@ static void mknob_draw_config(t_mknob *x,t_glist *glist) sprintf(fcol, "#%6.6x", x->x_gui.x_fcol); sprintf(lcol, "#%6.6x", x->x_gui.x_lcol); - sys_vgui(".x%lx.c itemconfigure %xLABEL " - "-font {{%s} %d bold} -fill #%6.6x -text {%s} \n", - canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, - x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol, - strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:""); - sys_vgui(".x%lx.c itemconfigure %xKNOB " - "-fill #%6.6x\n", canvas, x, x->x_gui.x_fcol); - sys_vgui(".x%lx.c itemconfigure %xCENTER " - "-fill #%6.6x\n", canvas, x, x->x_gui.x_fcol); - sys_vgui(".x%lx.c itemconfigure %xBASE " - "-fill #%6.6x\n", canvas, x, x->x_gui.x_bcol); + //sys_vgui(".x%lx.c itemconfigure %xLABEL " + // "-font {{%s} %d bold} -fill #%6.6x -text {%s} \n", + // canvas, x, x->x_gui.x_font, x->x_gui.x_fontsize, + // x->x_gui.x_fsf.x_selected?IEM_GUI_COLOR_SELECTED:x->x_gui.x_lcol, + // strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:""); + //sys_vgui(".x%lx.c itemconfigure %xKNOB " + // "-fill #%6.6x\n", canvas, x, x->x_gui.x_fcol); + //sys_vgui(".x%lx.c itemconfigure %xCENTER " + // "-fill #%6.6x\n", canvas, x, x->x_gui.x_fcol); + //sys_vgui(".x%lx.c itemconfigure %xBASE " + // "-fill #%6.6x\n", canvas, x, x->x_gui.x_bcol); gui_vmess("gui_configure_mknob", "xxiiiisss", canvas, @@ -181,14 +182,16 @@ static void mknob_draw_new(t_mknob *x, t_glist *glist) // "-strokewidth 2 -stroke #%6.6x -tags {%xKNOB %xMKNOB %s}\n", // canvas,xc,ypos,xc,yc,x->x_gui.x_fcol,x,x,nlet_tag); //mknob_update_knob(x,glist); - sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \ - -font {{%s} %d bold} -fill #%6.6x -tags {%xLABEL %xMKNOB %s}\n", - canvas, xpos+x->x_gui.x_ldx, - ypos+x->x_gui.x_ldy, - strcmp(x->x_gui.x_lab->s_name, "empty") ? - x->x_gui.x_lab->s_name : "", - x->x_gui.x_font, x->x_gui.x_fontsize, x->x_gui.x_lcol, - x, x, nlet_tag); + + //sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \ + // -font {{%s} %d bold} -fill #%6.6x -tags {%xLABEL %xMKNOB %s}\n", + // canvas, xpos+x->x_gui.x_ldx, + // ypos+x->x_gui.x_ldy, + // strcmp(x->x_gui.x_lab->s_name, "empty") ? + // x->x_gui.x_lab->s_name : "", + // x->x_gui.x_font, x->x_gui.x_fontsize, x->x_gui.x_lcol, + // x, x, nlet_tag); + //if (canvas == glist) { // if (!x->x_gui.x_fsf.x_snd_able) // sys_vgui(".x%lx.c create prect %d %d %d %d " @@ -206,8 +209,8 @@ static void mknob_draw_new(t_mknob *x, t_glist *glist) xpos, ypos, glist_istoplevel(glist), - !x->x_gui.x_fsf.x_snd_able, - !x->x_gui.x_fsf.x_rcv_able + !iemgui_has_snd(x), + !iemgui_has_rcv(x) ); mknob_draw_config(x, glist); } @@ -222,42 +225,42 @@ static void mknob_draw_move(t_mknob *x, t_glist *glist) t_float rc=x->x_gui.x_w/2.0; t_canvas *canvas=glist_getcanvas(glist); - sys_vgui(".x%lx.c coords %xBASE %f %f\n", - canvas, x, - xc, yc); - sys_vgui(".x%lx.c itemconfigure %xBASE -r %f\n", canvas, x, rc); - sys_vgui(".x%lx.c coords %xCENTER %f %f\n", - canvas, x, - xc, yc); + //sys_vgui(".x%lx.c coords %xBASE %f %f\n", + // canvas, x, + // xc, yc); + //sys_vgui(".x%lx.c itemconfigure %xBASE -r %f\n", canvas, x, rc); + //sys_vgui(".x%lx.c coords %xCENTER %f %f\n", + // canvas, x, + // xc, yc); mknob_update_knob(x,glist); - sys_vgui(".x%lx.c coords %xLABEL %d %d\n", - canvas, x, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy); - if (canvas == glist) { - if(!x->x_gui.x_fsf.x_snd_able) - sys_vgui(".x%lx.c coords %xOUT%d %d %d %d %d\n", - canvas, x, 0, - xpos, ypos + x->x_gui.x_w-1, xpos + IOWIDTH, ypos + x->x_gui.x_w); - if(!x->x_gui.x_fsf.x_rcv_able) - sys_vgui(".x%lx.c coords %xIN%d %d %d %d %d\n", - canvas, x, 0, - xpos, ypos-1, xpos + IOWIDTH, ypos); - } + //sys_vgui(".x%lx.c coords %xLABEL %d %d\n", + // canvas, x, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy); + //if (canvas == glist) { + // if(!x->x_gui.x_fsf.x_snd_able) + // sys_vgui(".x%lx.c coords %xOUT%d %d %d %d %d\n", + // canvas, x, 0, + // xpos, ypos + x->x_gui.x_w-1, xpos + IOWIDTH, ypos + x->x_gui.x_w); + // if(!x->x_gui.x_fsf.x_rcv_able) + // sys_vgui(".x%lx.c coords %xIN%d %d %d %d %d\n", + // canvas, x, 0, + // xpos, ypos-1, xpos + IOWIDTH, ypos); + //} } static void mknob_draw_erase(t_mknob *x,t_glist *glist) { t_canvas *canvas=glist_getcanvas(glist); - sys_vgui(".x%lx.c delete %xBASE\n", canvas, x); - sys_vgui(".x%lx.c delete %xCENTER\n", canvas, x); - sys_vgui(".x%lx.c delete %xKNOB\n", canvas, x); - sys_vgui(".x%lx.c delete %xLABEL\n", canvas, x); - if (canvas == glist) { - if(!x->x_gui.x_fsf.x_snd_able) - sys_vgui(".x%lx.c delete %xOUT%d\n", canvas, x, 0); - if(!x->x_gui.x_fsf.x_rcv_able) - sys_vgui(".x%lx.c delete %xIN%d\n", canvas, x, 0); - } + //sys_vgui(".x%lx.c delete %xBASE\n", canvas, x); + //sys_vgui(".x%lx.c delete %xCENTER\n", canvas, x); + //sys_vgui(".x%lx.c delete %xKNOB\n", canvas, x); + //sys_vgui(".x%lx.c delete %xLABEL\n", canvas, x); + //if (canvas == glist) { + // if(!x->x_gui.x_fsf.x_snd_able) + // sys_vgui(".x%lx.c delete %xOUT%d\n", canvas, x, 0); + // if(!x->x_gui.x_fsf.x_rcv_able) + // sys_vgui(".x%lx.c delete %xIN%d\n", canvas, x, 0); + //} } static void mknob_draw_io(t_mknob *x,t_glist *glist, int old_snd_rcv_flags) @@ -279,26 +282,26 @@ static void mknob_draw_io(t_mknob *x,t_glist *glist, int old_snd_rcv_flags) if (yyyy) nlet_tag = rtext_gettag(yyyy); else nlet_tag = "bogus"; - if (canvas == glist) { - if((old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && !x->x_gui.x_fsf.x_snd_able) - sys_vgui(".x%lx.c create prect %d %d %d %d -tags {%xOUT%d %xMKNOB %so0 outlet}\n", - canvas, xpos, ypos + x->x_gui.x_w-1, xpos + IOWIDTH, ypos + x->x_gui.x_w, x, 0, x, nlet_tag); - if(!(old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && x->x_gui.x_fsf.x_snd_able) - sys_vgui(".x%lx.c delete %xOUT%d\n", canvas, x, 0); - if((old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && !x->x_gui.x_fsf.x_rcv_able) - sys_vgui(".x%lx.c create prect %d %d %d %d -tags {%xIN%d %xMKNOB %si0 inlet}\n", - canvas, xpos, ypos-1, xpos + IOWIDTH, ypos, x, 0, x, nlet_tag); - if(!(old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && x->x_gui.x_fsf.x_rcv_able) - sys_vgui(".x%lx.c delete %xIN%d\n", canvas, x, 0); - } + //if (canvas == glist) { + // if((old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && !x->x_gui.x_fsf.x_snd_able) + // sys_vgui(".x%lx.c create prect %d %d %d %d -tags {%xOUT%d %xMKNOB %so0 outlet}\n", + // canvas, xpos, ypos + x->x_gui.x_w-1, xpos + IOWIDTH, ypos + x->x_gui.x_w, x, 0, x, nlet_tag); + // if(!(old_snd_rcv_flags & IEM_GUI_OLD_SND_FLAG) && x->x_gui.x_fsf.x_snd_able) + // sys_vgui(".x%lx.c delete %xOUT%d\n", canvas, x, 0); + // if((old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && !x->x_gui.x_fsf.x_rcv_able) + // sys_vgui(".x%lx.c create prect %d %d %d %d -tags {%xIN%d %xMKNOB %si0 inlet}\n", + // canvas, xpos, ypos-1, xpos + IOWIDTH, ypos, x, 0, x, nlet_tag); + // if(!(old_snd_rcv_flags & IEM_GUI_OLD_RCV_FLAG) && x->x_gui.x_fsf.x_rcv_able) + // sys_vgui(".x%lx.c delete %xIN%d\n", canvas, x, 0); + // } } -static void mknob_draw_select(t_mknob *x,t_glist *glist) -{ - t_canvas *canvas=glist_getcanvas(glist); - - if (x->x_gui.x_fsf.x_selected) - { +//static void mknob_draw_select(t_mknob *x,t_glist *glist) +//{ +// t_canvas *canvas=glist_getcanvas(glist); +// +// if (x->x_gui.x_fsf.x_selected) +// { //if (x->x_gui.x_glist == glist_getcanvas(glist)) //{ // sys_vgui(".x%lx.c itemconfigure %xBASE " @@ -307,18 +310,18 @@ static void mknob_draw_select(t_mknob *x,t_glist *glist) // "-fill $pd_colors(selection)\n", canvas, x); //} //sys_vgui(".x%lx.c addtag selected withtag %lxMKNOB\n", canvas, x); - gui_vmess("gui_gobj_select", "xx", canvas, x); - } - else - { +// gui_vmess("gui_gobj_select", "xx", canvas, x); +// } +// else +// { //sys_vgui(".x%lx.c itemconfigure %xBASE " // "-stroke #%6.6x\n", canvas, x, x->x_gui.x_fcol); //sys_vgui(".x%lx.c itemconfigure %xLABEL " // "-fill #%6.6x\n", canvas, x, x->x_gui.x_lcol); //sys_vgui(".x%lx.c dtag %lxMKNOB selected\n", canvas, x); - gui_vmess("gui_gobj_deselect", "xx", canvas, x); - } -} +// gui_vmess("gui_gobj_deselect", "xx", canvas, x); +// } +//} void mknob_draw(t_mknob *x, t_glist *glist, int mode) { @@ -328,10 +331,10 @@ void mknob_draw(t_mknob *x, t_glist *glist, int mode) mknob_draw_move(x, glist); else if(mode == IEM_GUI_DRAW_MODE_NEW) mknob_draw_new(x, glist); - else if(mode == IEM_GUI_DRAW_MODE_SELECT) - mknob_draw_select(x, glist); - else if(mode == IEM_GUI_DRAW_MODE_ERASE) - mknob_draw_erase(x, glist); +// else if(mode == IEM_GUI_DRAW_MODE_SELECT) +// mknob_draw_select(x, glist); +// else if(mode == IEM_GUI_DRAW_MODE_ERASE) +// mknob_draw_erase(x, glist); else if(mode == IEM_GUI_DRAW_MODE_CONFIG) mknob_draw_config(x, glist); /*else if(mode >= IEM_GUI_DRAW_MODE_IO) @@ -364,10 +367,10 @@ static void mknob_save(t_gobj *z, t_binbuf *b) atom_getsymbol(binbuf_getvec(x->x_gui.x_obj.te_binbuf)), x->x_gui.x_w, x->x_gui.x_h, (float)x->x_min, (float)x->x_max, - x->x_lin0_log1, iem_symargstoint(&x->x_gui.x_isa), + x->x_lin0_log1, iem_symargstoint(x), srl[0], srl[1], srl[2], x->x_gui.x_ldx, x->x_gui.x_ldy, - iem_fstyletoint(&x->x_gui.x_fsf), x->x_gui.x_fontsize, + iem_fstyletoint(x), x->x_gui.x_fontsize, bflcol[0], bflcol[1], bflcol[2], x->x_val, x->x_steady); binbuf_addv(b, ";"); @@ -428,9 +431,9 @@ void mknob_check_minmax(t_mknob *x, double min, double max) x->x_min = min; x->x_max = max; if(x->x_min > x->x_max) /* bugfix */ - x->x_gui.x_isa.x_reverse = 1; + x->x_gui.x_reverse = 1; else - x->x_gui.x_isa.x_reverse = 0; + x->x_gui.x_reverse = 0; if(x->x_lin0_log1) x->x_k = log(x->x_max/x->x_min)/(double)(x->x_H - 1); @@ -450,21 +453,21 @@ static void mknob_properties(t_gobj *z, t_glist *owner) t_symbol *srl[3]; iemgui_properties(&x->x_gui, srl); - sprintf(buf, "pdtk_iemgui_dialog %%s mknob \ - --------dimension(pix):-------- %d %d width: %d %d {# steps:} \ - -----------output-range:----------- %g left: %g right: %g \ - %d lin log %d %d empty %d \ - %s %s \ - %s %d %d \ - %d %d \ - %d %d %d\n", - x->x_gui.x_w, MKNOB_MINSIZE, x->x_gui.x_h, -1, - x->x_min, x->x_max, 0.0,/*no_schedule*/ - x->x_lin0_log1, x->x_gui.x_isa.x_loadinit, x->x_steady, -1,/*no multi, but iem-characteristic*/ - srl[0]->s_name, srl[1]->s_name, - srl[2]->s_name, x->x_gui.x_ldx, x->x_gui.x_ldy, - x->x_gui.x_fsf.x_font_style, x->x_gui.x_fontsize, - 0xffffff & x->x_gui.x_bcol, 0xffffff & x->x_gui.x_fcol, 0xffffff & x->x_gui.x_lcol); + //sprintf(buf, "pdtk_iemgui_dialog %%s mknob \ +// --------dimension(pix):-------- %d %d width: %d %d {# steps:} \ +// -----------output-range:----------- %g left: %g right: %g \ +// %d lin log %d %d empty %d \ +// %s %s \ +// %s %d %d \ +// %d %d \ +// %d %d %d\n", +// x->x_gui.x_w, MKNOB_MINSIZE, x->x_gui.x_h, -1, +// x->x_min, x->x_max, 0.0,/*no_schedule*/ +// x->x_lin0_log1, x->x_gui.x_isa.x_loadinit, x->x_steady, -1,/*no multi, but iem-characteristic*/ +// srl[0]->s_name, srl[1]->s_name, +// srl[2]->s_name, x->x_gui.x_ldx, x->x_gui.x_ldy, +// x->x_gui.x_fsf.x_font_style, x->x_gui.x_fontsize, +// 0xffffff & x->x_gui.x_bcol, 0xffffff & x->x_gui.x_fcol, 0xffffff & x->x_gui.x_lcol); //gfxstub_new(&x->x_gui.x_obj.ob_pd, x, buf); gfx_tag = gfxstub_new2(&x->x_gui.x_obj.ob_pd, x); @@ -481,14 +484,14 @@ static void mknob_properties(t_gobj *z, t_glist *owner) gui_s("minimum_range"); gui_f(x->x_min); gui_s("maximum_range"); gui_f(x->x_max); gui_s("log_scaling"); gui_i(x->x_lin0_log1); - gui_s("init"); gui_i(x->x_gui.x_isa.x_loadinit); + gui_s("init"); gui_i(x->x_gui.x_loadinit); gui_s("steady_on_click"); gui_i(x->x_steady); gui_s("send_symbol"); gui_s(srl[0]->s_name); gui_s("receive_symbol"); gui_s(srl[1]->s_name); gui_s("label"); gui_s(srl[2]->s_name); gui_s("x_offset"); gui_i(x->x_gui.x_ldx); gui_s("y_offset"); gui_i(x->x_gui.x_ldy); - gui_s("font_style"); gui_i(x->x_gui.x_fsf.x_font_style); + gui_s("font_style"); gui_i(x->x_gui.x_font_style); gui_s("font_size"); gui_i(x->x_gui.x_fontsize); gui_s("background_color"); gui_i(0xffffff & x->x_gui.x_bcol); gui_s("foreground_color"); gui_i(0xffffff & x->x_gui.x_fcol); @@ -502,7 +505,7 @@ static void mknob_set(t_mknob *x, t_floatarg f) /* bugfix */ { double g; - if(x->x_gui.x_isa.x_reverse) /* bugfix */ + if(x->x_gui.x_reverse) /* bugfix */ { if(f > x->x_min) f = x->x_min; @@ -536,7 +539,7 @@ static void mknob_bang(t_mknob *x) if((out < 1.0e-10)&&(out > -1.0e-10)) out = 0.0; outlet_float(x->x_gui.x_obj.ob_outlet, out); - if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) + if (iemgui_has_snd(x) && x->x_gui.x_snd->s_thing) pd_float(x->x_gui.x_snd->s_thing, out); } @@ -558,13 +561,13 @@ static void mknob_dialog(t_mknob *x, t_symbol *s, int argc, t_atom *argv) x->x_steady = 1; else x->x_steady = 0; - sr_flags = iemgui_dialog(&x->x_gui, srl, argc, argv); + sr_flags = iemgui_dialog(&x->x_gui, argc, argv); //x->x_gui.x_h = iemgui_clip_size(h); //x->x_gui.x_w = iemgui_clip_size(w); mknob_check_wh(x, w, h); mknob_check_minmax(x, min, max); (*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_IO + sr_flags); + //(*x->x_gui.x_draw)(x, 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_MOVE); canvas_fixlinesfor(x->x_gui.x_glist, (t_text *)x); } @@ -578,7 +581,7 @@ static void mknob_motion(t_mknob *x, t_floatarg dx, t_floatarg dy) if (abs(dx)>abs(dy)) d=dx; - if(x->x_gui.x_fsf.x_finemoved) + if(x->x_gui.x_finemoved) x->x_pos += (int)d; else x->x_pos += 100*(int)d; @@ -690,32 +693,32 @@ static int mknob_newclick(t_gobj *z, struct _glist *glist, mknob_click( x, (t_floatarg)xpix, (t_floatarg)ypix, (t_floatarg)shift, 0, (t_floatarg)alt); if(shift) - x->x_gui.x_fsf.x_finemoved = 1; + x->x_gui.x_finemoved = 1; else - x->x_gui.x_fsf.x_finemoved = 0; + x->x_gui.x_finemoved = 0; } return (1); } static void mknob_size(t_mknob *x, t_symbol *s, int ac, t_atom *av) { - int w=(int)atom_getintarg(0, ac, av), - h=x->x_gui.x_h; + int w = (int)atom_getintarg(0, ac, av), + h = x->x_gui.x_h; - if(ac > 1) h=(int)atom_getintarg(1, ac, av); + if (ac > 1) h = (int)atom_getintarg(1, ac, av); mknob_check_wh(x, w, h); - iemgui_size((void *)x, &x->x_gui); + iemgui_size((t_iemgui *)x); } static void mknob_delta(t_mknob *x, t_symbol *s, int ac, t_atom *av) { - iemgui_delta((void *)x, &x->x_gui, s, ac, av); + iemgui_delta((t_iemgui *)x, s, ac, av); } static void mknob_pos(t_mknob *x, t_symbol *s, int ac, t_atom *av) { - iemgui_pos((void *)x, &x->x_gui, s, ac, av); + iemgui_pos((t_iemgui *)x, s, ac, av); } static void mknob_range(t_mknob *x, t_symbol *s, int ac, t_atom *av) @@ -726,32 +729,32 @@ static void mknob_range(t_mknob *x, t_symbol *s, int ac, t_atom *av) static void mknob_color(t_mknob *x, t_symbol *s, int ac, t_atom *av) { - iemgui_color((void *)x, &x->x_gui, s, ac, av); + iemgui_color((t_iemgui *)x, s, ac, av); } static void mknob_send(t_mknob *x, t_symbol *s) { - iemgui_send(x, &x->x_gui, s); + iemgui_send((t_iemgui *)x, s); } static void mknob_receive(t_mknob *x, t_symbol *s) { - iemgui_receive(x, &x->x_gui, s); + iemgui_receive((t_iemgui *)x, s); } static void mknob_label(t_mknob *x, t_symbol *s) { - iemgui_label((void *)x, &x->x_gui, s); + iemgui_label((t_iemgui *)x, s); } static void mknob_label_pos(t_mknob *x, t_symbol *s, int ac, t_atom *av) { - iemgui_label_pos((void *)x, &x->x_gui, s, ac, av); + iemgui_label_pos((t_iemgui *)x, s, ac, av); } static void mknob_label_font(t_mknob *x, t_symbol *s, int ac, t_atom *av) { - iemgui_label_font((void *)x, &x->x_gui, s, ac, av); + iemgui_label_font((t_iemgui *)x, s, ac, av); } static void mknob_log(t_mknob *x) @@ -768,7 +771,7 @@ static void mknob_lin(t_mknob *x) static void mknob_init(t_mknob *x, t_floatarg f) { - x->x_gui.x_isa.x_loadinit = (f==0.0)?0:1; + x->x_gui.x_loadinit = (f==0.0)?0:1; } static void mknob_steady(t_mknob *x, t_floatarg f) @@ -787,17 +790,17 @@ static void mknob_float(t_mknob *x, t_floatarg f) out = (double)(x->x_val)*0.01*x->x_k + x->x_min; if((out < 1.0e-10)&&(out > -1.0e-10)) out = 0.0; - if(x->x_gui.x_fsf.x_put_in2out) + if(x->x_gui.x_put_in2out) { outlet_float(x->x_gui.x_obj.ob_outlet, out); - if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) + if (iemgui_has_snd(x) && x->x_gui.x_snd->s_thing) pd_float(x->x_gui.x_snd->s_thing, out); } } static void mknob_loadbang(t_mknob *x) { - if(!sys_noloadbang && x->x_gui.x_isa.x_loadinit) + if(!sys_noloadbang && x->x_gui.x_loadinit) { (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); mknob_bang(x); @@ -820,6 +823,81 @@ static void mknob_loadbang(t_mknob *x) } }*/ +/* we may no longer need h_dragon... */ +static void mknob__clickhook(t_scalehandle *sh, int newstate) +{ + t_mknob *x = (t_mknob *)(sh->h_master); + if (newstate) + { + canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x); + if (!sh->h_scale) /* click on a label handle */ + scalehandle_click_label(sh); + } + /* We no longer need this "clickhook", as we can handle the dragging + either in the GUI (for the label handle) or or in canvas_doclick */ + //iemgui__clickhook3(sh,newstate); + sh->h_dragon = newstate; +} + +static void mknob__motionhook(t_scalehandle *sh, + t_floatarg mouse_x, t_floatarg mouse_y) +{ + if (sh->h_scale) + { + t_mknob *x = (t_mknob *)(sh->h_master); + int width = x->x_gui.x_w, + height = x->x_gui.x_h; + int x1, y1, x2, y2, d; + x1 = text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist); + y1 = text_ypix(&x->x_gui.x_obj, x->x_gui.x_glist); + x2 = x1 + width; + y2 = y1 + height; + + /* This is convoluted, but I can't think of another + way to get this behavior... */ + if (mouse_x <= x2) + { + if (mouse_y > y2) + d = mouse_y - y2; + else if (abs(mouse_y - y2) < abs(mouse_x - x2)) + d = mouse_y - y2; + else + d = mouse_x - x2; + } + else + { + if (mouse_y <= y2) + d = mouse_x - x2; + else + d = maxi(mouse_y - y2, mouse_x - x2); + } + sh->h_dragx = d; + sh->h_dragy = d; + scalehandle_drag_scale(sh); + + width = maxi(width + d, IEM_GUI_MINSIZE); + height = width; + + x->x_gui.x_w = width; + x->x_gui.x_h = height; + + if (glist_isvisible(x->x_gui.x_glist)) + { + mknob_draw_config(x, x->x_gui.x_glist); + scalehandle_unclick_scale(sh); + } + + int properties = gfxstub_haveproperties((void *)x); + if (properties) + { + int new_w = x->x_gui.x_w + sh->h_dragx; + properties_set_field_int(properties,"size",new_w); + } + } + scalehandle_dragon_label(sh,mouse_x, mouse_y); +} + + static void *mknob_new(t_symbol *s, int argc, t_atom *argv) { t_mknob *x = (t_mknob *)pd_new(mknob_class); @@ -852,11 +930,11 @@ static void *mknob_new(t_symbol *s, int argc, t_atom *argv) min = (double)atom_getfloatarg(2, argc, argv); max = (double)atom_getfloatarg(3, argc, argv); lilo = (int)atom_getintarg(4, argc, argv); - iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(5, argc, argv)); + iem_inttosymargs(&x->x_gui, atom_getintarg(5, argc, argv)); iemgui_new_getnames(&x->x_gui, 6, argv); ldx = (int)atom_getintarg(9, argc, argv); ldy = (int)atom_getintarg(10, argc, argv); - iem_inttofstyle(&x->x_gui.x_fsf, atom_getintarg(11, argc, argv)); + iem_inttofstyle(x, atom_getintarg(11, argc, argv)); fs = (int)atom_getintarg(12, argc, argv); bflcol[0] = (int)atom_getintarg(13, argc, argv); bflcol[1] = (int)atom_getintarg(14, argc, argv); @@ -896,11 +974,11 @@ static void *mknob_new(t_symbol *s, int argc, t_atom *argv) fstyle->x_snd_able = 1; fstyle->x_rcv_able = 1;*/ x->x_gui.x_draw = (t_iemfunptr)mknob_draw; - x->x_gui.x_fsf.x_snd_able = 1; - x->x_gui.x_fsf.x_rcv_able = 1; + //x->x_gui.x_fsf.x_snd_able = 1; + //x->x_gui.x_fsf.x_rcv_able = 1; x->x_gui.x_glist = (t_glist *)canvas_getcurrent(); //x->x_gui.x_isa = *init; - if(x->x_gui.x_isa.x_loadinit) + if(x->x_gui.x_loadinit) x->x_val = v; else x->x_val = 0; @@ -909,20 +987,26 @@ static void *mknob_new(t_symbol *s, int argc, t_atom *argv) x->x_lin0_log1 = lilo; if(steady != 0) steady = 1; x->x_steady = steady; - if(!strcmp(x->x_gui.x_snd->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0; - if(!strcmp(x->x_gui.x_rcv->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0; + //if(!strcmp(x->x_gui.x_snd->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0; + //if(!strcmp(x->x_gui.x_rcv->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0; //if(!strcmp(srl[0]->s_name, "empty")) fstyle->x_snd_able = 0; //if(!strcmp(srl[1]->s_name, "empty")) fstyle->x_rcv_able = 0; //x->x_gui.x_unique_num = 0; - if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica"); - else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times"); + if (x->x_gui.x_font_style == 1) + { + //strcpy(x->x_gui.x_font, "helvetica"); + } + else if (x->x_gui.x_font_style == 2) + { + //strcpy(x->x_gui.x_font, "times"); + } else { - x->x_gui.x_fsf.x_font_style = 0; + x->x_gui.x_font_style = 0; /*if(fstyle->x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica"); else if(fstyle->x_font_style == 2) strcpy(x->x_gui.x_font, "times"); else { fstyle->x_font_style = 0;*/ - strcpy(x->x_gui.x_font, "courier"); + //strcpy(x->x_gui.x_font, "courier"); } //x->x_gui.x_fsf = *fstyle; //iemgui_first_dollararg2sym(&x->x_gui, srl); @@ -930,7 +1014,7 @@ static void *mknob_new(t_symbol *s, int argc, t_atom *argv) /*x->x_gui.x_snd = srl[0]; x->x_gui.x_rcv = srl[1]; x->x_gui.x_lab = srl[2];*/ - if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv); + if (iemgui_has_rcv(x)) pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv); x->x_gui.x_ldx = ldx; x->x_gui.x_ldy = ldy; if(fs < 4) @@ -946,6 +1030,12 @@ static void *mknob_new(t_symbol *s, int argc, t_atom *argv) iemgui_verify_snd_ne_rcv(&x->x_gui); outlet_new(&x->x_gui.x_obj, &s_float); x->x_gui.x_obj.te_iemgui = 1; + + x->x_gui.x_handle = scalehandle_new((t_object *)x, + x->x_gui.x_glist, 1, mknob__clickhook, mknob__motionhook); + x->x_gui.x_lhandle = scalehandle_new((t_object *)x, + x->x_gui.x_glist, 0, mknob__clickhook, mknob__motionhook); + return (x); } @@ -953,7 +1043,7 @@ static void mknob_free(t_mknob *x) { /*if(x->x_gui.x_fsf.x_selected) pd_unbind(&x->x_gui.x_obj.ob_pd, iemgui_key_sym);*/ - if(x->x_gui.x_fsf.x_rcv_able) + if (iemgui_has_rcv(x)) pd_unbind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv); gfxstub_deleteforkey(x); } -- GitLab