Commit 82a9f90b authored by Mathieu L Bouchard's avatar Mathieu L Bouchard
Browse files

fix some problems with drawing inlets/outlets in iemgui

parent bf5e0637
......@@ -30,6 +30,7 @@ int iemgui_clip_font(int size) {return maxi(size,IEM_FONT_MINSIZE);}
static int iemgui_modulo_color(int col)
{
const int IEM_GUI_MAX_COLOR = 30;
col %= IEM_GUI_MAX_COLOR;
if (col<0) col += IEM_GUI_MAX_COLOR;
return col;
......@@ -184,7 +185,7 @@ void iemgui_send(t_iemgui *x, t_symbol *s)
x->x_snd_unexpanded = snd;
x->x_snd = snd = canvas_realizedollar(x->x_glist, snd);
iemgui_verify_snd_ne_rcv(x);
iemgui_draw_io(x, x->x_glist, IEM_GUI_DRAW_MODE_IO + oldsndrcvable);
iemgui_draw_io(x, x->x_glist, oldsndrcvable);
}
void iemgui_receive(t_iemgui *x, t_symbol *s)
......@@ -213,7 +214,7 @@ void iemgui_receive(t_iemgui *x, t_symbol *s)
x->x_rcv = rcv;
}
iemgui_verify_snd_ne_rcv(x);
iemgui_draw_io(x, x->x_glist, IEM_GUI_DRAW_MODE_IO + oldsndrcvable);
iemgui_draw_io(x, x->x_glist, oldsndrcvable);
}
void iemgui_label(t_iemgui *x, t_symbol *s)
......@@ -547,8 +548,9 @@ void iemgui_properties(t_iemgui *x, t_symbol **srl)
srl[2] = iemgui_dollar2raute(srl[2]);
}
int iemgui_dialog(t_iemgui *x, t_symbol **srl, int argc, t_atom *argv)
int iemgui_dialog(t_iemgui *x, int argc, t_atom *argv)
{
t_symbol *srl[3];
x->x_loadinit = !!atom_getintarg(5, argc, argv);
srl[0] = iemgui_getfloatsymarg(7,argc,argv);
srl[1] = iemgui_getfloatsymarg(8,argc,argv);
......@@ -561,8 +563,8 @@ int iemgui_dialog(t_iemgui *x, t_symbol **srl, int argc, t_atom *argv)
x->x_fcol = atom_getintarg(15, argc, argv) & 0xffffff;
x->x_lcol = atom_getintarg(16, argc, argv) & 0xffffff;
int oldsndrcvable=0;
if(iemgui_has_rcv(x)) oldsndrcvable += IEM_GUI_OLD_RCV_FLAG;
if(iemgui_has_snd(x)) oldsndrcvable += IEM_GUI_OLD_SND_FLAG;
if(iemgui_has_rcv(x)) oldsndrcvable |= IEM_GUI_OLD_RCV_FLAG;
if(iemgui_has_snd(x)) oldsndrcvable |= IEM_GUI_OLD_SND_FLAG;
iemgui_all_raute2dollar(srl);
x->x_snd_unexpanded=srl[0]; srl[0]=canvas_realizedollar(x->x_glist, srl[0]);
x->x_rcv_unexpanded=srl[1]; srl[1]=canvas_realizedollar(x->x_glist, srl[1]);
......@@ -580,7 +582,7 @@ int iemgui_dialog(t_iemgui *x, t_symbol **srl, int argc, t_atom *argv)
x->x_font_style = f;
iemgui_verify_snd_ne_rcv(x);
canvas_dirty(x->x_glist, 1);
return(oldsndrcvable);
return oldsndrcvable;
}
void iem_inttosymargs(t_iemgui *x, int n)
......@@ -904,8 +906,10 @@ void iemgui_label_draw_select(t_iemgui *x, t_glist *canvas) {
}
extern t_class *vu_class;
void iemgui_io_draw(t_iemgui *x, t_glist *canvas, int old_sr_flags) {
if (x->x_glist != canvas) return; // is gop
void iemgui_draw_io(t_iemgui *x, t_glist *glist, int old_sr_flags)
{
t_canvas *canvas=glist_getcanvas(glist);
if (x->x_glist != canvas) return; // is gop
t_class *c = pd_class((t_pd *)x);
if (!(old_sr_flags&4) && (!glist_isvisible(canvas) || !(canvas == x->x_glist))) {
......@@ -920,7 +924,7 @@ void iemgui_io_draw(t_iemgui *x, t_glist *canvas, int old_sr_flags) {
int a=old_sr_flags&IEM_GUI_OLD_SND_FLAG;
int b=x->x_snd!=s_empty;
fprintf(stderr,"%lx SND: old_sr_flags=%d SND_FLAG=%d || OUTCOME: OLD_SND_FLAG=%d not_empty=%d\n", (t_int)x, old_sr_flags, IEM_GUI_OLD_SND_FLAG, a, b);
//fprintf(stderr,"%lx SND: old_sr_flags=%d SND_FLAG=%d || OUTCOME: OLD_SND_FLAG=%d not_empty=%d\n", (t_int)x, old_sr_flags, IEM_GUI_OLD_SND_FLAG, a, b);
if(a && !b) for (i=0; i<n; i++)
sys_vgui(".x%lx.c create prect %d %d %d %d "
......@@ -929,11 +933,11 @@ void iemgui_io_draw(t_iemgui *x, t_glist *canvas, int old_sr_flags) {
canvas, x1+i*k, y2-1, x1+i*k + IOWIDTH, y2,
x, i, x);
if(!a && b) for (i=0; i<n; i++)
sys_vgui(".x%lx.c delete x%lxo%d\n", canvas, x, 0);
sys_vgui(".x%lx.c delete x%lxo%d\n", canvas, x, i);
a=old_sr_flags&IEM_GUI_OLD_RCV_FLAG;
b=x->x_rcv!=s_empty;
fprintf(stderr,"%lx RCV: old_sr_flags=%d RCV_FLAG=%d || OUTCOME: OLD_RCV_FLAG=%d not_empty=%d\n", (t_int)x, old_sr_flags, IEM_GUI_OLD_RCV_FLAG, a, b);
//fprintf(stderr,"%lx RCV: old_sr_flags=%d RCV_FLAG=%d || OUTCOME: OLD_RCV_FLAG=%d not_empty=%d\n", (t_int)x, old_sr_flags, IEM_GUI_OLD_RCV_FLAG, a, b);
if(a && !b) for (i=0; i<n; i++)
sys_vgui(".x%lx.c create prect %d %d %d %d "
"-stroke $pd_colors(iemgui_nlet) "
......@@ -941,7 +945,7 @@ void iemgui_io_draw(t_iemgui *x, t_glist *canvas, int old_sr_flags) {
canvas, x1+i*k, y1, x1+i*k + IOWIDTH, y1+1,
x, i, x);
if(!a && b) for (i=0; i<n; i++)
sys_vgui(".x%lx.c delete x%lxi%d\n", canvas, x, 0);
sys_vgui(".x%lx.c delete x%lxi%d\n", canvas, x, i);
}
void iemgui_io_draw_move(t_iemgui *x, t_glist *canvas) {
......@@ -988,11 +992,6 @@ void iemgui_draw_new(t_iemgui *x, t_glist *glist) {
iemgui_draw_io(x,glist,7);
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)
{
t_canvas *canvas=glist_getcanvas(glist);
iemgui_io_draw(x,glist_getcanvas(canvas),old_sr_flags);
}
void iemgui_draw_erase(t_iemgui *x, t_glist *glist) {
t_canvas *canvas=glist_getcanvas(glist);
sys_vgui(".x%lx.c delete x%lx\n", canvas, x);
......
......@@ -3,25 +3,8 @@
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
/* g_7_guis.h written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
// the three used by any externals ([room_sim_2d] [room_sim_3d] [cube_sphere])
// the other colours still exist in the array but are not referred by name.
#define IEM_GUI_COLNR_GREEN 16
#define IEM_GUI_COLNR_L_GREY 20
#define IEM_GUI_COLNR_D_ORANGE 24
/* deprecated in favor of the global iemgui_select var
left here for legacy externals that may rely upon this */
#define IEM_GUI_COLOR_SELECTED 16749334
/* end deprecated */
#define IEM_GUI_COLOR_NORMAL "$pd_colors(iemgui_border)"
#define IEM_GUI_MAX_COLOR 30
#define IEM_GUI_DEFAULTSIZE 15
#define IEM_GUI_MINSIZE 8
#define IEM_GUI_MAXSIZE 1000
#define IEM_SL_DEFAULTSIZE 128
#define IEM_SL_MINSIZE 2
#define IEM_FONT_MINSIZE 4
......@@ -30,16 +13,11 @@
#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_CONFIG 5
#define IEM_GUI_DRAW_MODE_IO 6 /* also reserves 7,8,9 by adding old_sr_flags */
#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
#define IEM_FSTYLE_FLAGS_ALL 0x007fffff
#define IEM_INIT_ARGS_ALL 0x01ffffff
#define IEM_GUI_OLD_SND_FLAG 1
#define IEM_GUI_OLD_RCV_FLAG 2
......@@ -231,7 +209,7 @@ EXTERN void iemgui_delete(t_gobj *z, t_glist *glist);
EXTERN void iemgui_vis(t_gobj *z, t_glist *glist, int vis);
EXTERN void iemgui_save(t_iemgui *x, t_symbol **srl, int *bflcol);
EXTERN void iemgui_properties(t_iemgui *x, t_symbol **srl);
EXTERN int iemgui_dialog(t_iemgui *x, t_symbol **srl, int argc, t_atom *argv);
EXTERN int iemgui_dialog(t_iemgui *x, int argc, t_atom *argv);
EXTERN void iem_inttosymargs(t_iemgui *x, int n);
EXTERN int iem_symargstoint(t_iemgui *x);
......@@ -269,7 +247,6 @@ EXTERN void iemgui_label_draw_new( t_iemgui *x, t_glist *canvas);
EXTERN void iemgui_label_draw_move( t_iemgui *x, t_glist *canvas);
EXTERN void iemgui_label_draw_config(t_iemgui *x, t_glist *canvas);
EXTERN void iemgui_label_draw_select(t_iemgui *x, t_glist *canvas);
EXTERN void iemgui_io_draw(t_iemgui *x, t_glist *canvas, int old_sr_flags);
EXTERN void iemgui_io_draw_move(t_iemgui *x, t_glist *canvas);
EXTERN void iemgui_draw_io(t_iemgui *x, t_glist *glist, int old_sr_flags);
EXTERN void iemgui_base_draw_new(t_iemgui *x, t_glist *canvas);
......
......@@ -238,14 +238,13 @@ static void bng_bang2(t_bng *x)/*wird immer gesendet, wenn moeglich*/
static void bng_dialog(t_bng *x, t_symbol *s, int argc, t_atom *argv)
{
canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
t_symbol *srl[3];
x->x_gui.x_h = x->x_gui.x_w = atom_getintarg(0, argc, argv);
int fthold = atom_getintarg(2, argc, argv);
int ftbreak = atom_getintarg(3, argc, argv);
int sr_flags = iemgui_dialog(&x->x_gui, srl, argc, argv);
int sr_flags = iemgui_dialog(&x->x_gui, argc, argv);
bng_check_minmax(x, ftbreak, fthold);
x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_IO + sr_flags);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, sr_flags);
iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE);
scalehandle_draw(&x->x_gui, x->x_gui.x_glist);
scrollbar_update(x->x_gui.x_glist);
......
......@@ -207,13 +207,14 @@ static void my_canvas_get_pos(t_my_canvas *x)
static void my_canvas_dialog(t_my_canvas *x, t_symbol *s, int argc, t_atom *argv)
{
printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected);
canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
t_symbol *srl[3];
printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected);
x->x_gui.x_h =
x->x_gui.x_w = maxi(atom_getintarg(0, argc, argv),1);
x->x_vis_w = maxi(atom_getintarg(2, argc, argv),1);
x->x_vis_h = maxi(atom_getintarg(3, argc, argv),1);
iemgui_dialog(&x->x_gui, srl, argc, argv);
iemgui_dialog(&x->x_gui, argc, argv);
x->x_gui.x_loadinit = 0;
x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG);
iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE);
......
......@@ -159,7 +159,7 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
".x%lx.c create ppolygon %d %d %d %d %d %d %d %d %d %d -stroke %s"
" -fill %s -tags {%lxBASE1 x%lx text iemgui}\n",
canvas, x1, y1, x2-4, y1, x2, y1+4, x2, y2, x1, y2,
x->x_hide_frame <= 1 ? IEM_GUI_COLOR_NORMAL : bcol,
x->x_hide_frame <= 1 ? "$pd_colors(iemgui_border)" : bcol,
bcol, x, x);
if (x->x_hide_frame <= 1) iemgui_draw_io(&x->x_gui,glist,7);
......@@ -224,7 +224,7 @@ static void my_numbox_draw_select(t_my_numbox *x, t_glist *glist)
char fcol[8]; sprintf(fcol, "#%6.6x", x->x_gui.x_fcol);
char bcol[8]; sprintf(bcol, "#%6.6x", x->x_gui.x_bcol);
sys_vgui(".x%lx.c itemconfigure %lxBASE1 -stroke %s\n", canvas, x,
issel ? selection_color : x->x_hide_frame <= 1 ? IEM_GUI_COLOR_NORMAL : bcol);
issel ? selection_color : x->x_hide_frame <= 1 ? "$pd_colors(iemgui_border)" : bcol);
sys_vgui(".x%lx.c itemconfigure %lxBASE2 -stroke %s\n", canvas, x,
issel ? selection_color : fcol);
sys_vgui(".x%lx.c itemconfigure %lxNUMBER -fill %s\n", canvas, x,
......@@ -463,7 +463,6 @@ static void my_numbox_dialog(t_my_numbox *x, t_symbol *s, int argc,
t_atom *argv)
{
canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
t_symbol *srl[3];
x->x_gui.x_w = maxi(atom_getintarg(0, argc, argv),1);
x->x_gui.x_h = maxi(atom_getintarg(1, argc, argv),8);
double min = atom_getfloatarg(2, argc, argv);
......@@ -472,7 +471,7 @@ static void my_numbox_dialog(t_my_numbox *x, t_symbol *s, int argc,
x->x_log_height = maxi(atom_getintarg(6, argc, argv),10);
if (argc > 17)
x->x_hide_frame = (int)atom_getintarg(18, argc, argv);
iemgui_dialog(&x->x_gui, srl, argc, argv);
iemgui_dialog(&x->x_gui, argc, argv);
x->x_numwidth = my_numbox_calc_fontwidth(x);
my_numbox_check_minmax(x, min, max);
iemgui_draw_erase(&x->x_gui, x->x_gui.x_glist);
......
......@@ -243,12 +243,11 @@ static void radio_properties(t_gobj *z, t_glist *owner)
static void radio_dialog(t_radio *x, t_symbol *s, int argc, t_atom *argv)
{
canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
t_symbol *srl[3];
x->x_gui.x_h =
x->x_gui.x_w = iemgui_clip_size(atom_getintarg(0, argc, argv));
x->x_change = !!atom_getintarg(4, argc, argv);
int num = atom_getintarg(6, argc, argv);
int sr_flags = iemgui_dialog(&x->x_gui, srl, argc, argv);
int sr_flags = iemgui_dialog(&x->x_gui, argc, argv);
if(x->x_number != num)
{
iemgui_draw_erase(&x->x_gui, x->x_gui.x_glist);
......@@ -263,7 +262,7 @@ static void radio_dialog(t_radio *x, t_symbol *s, int argc, t_atom *argv)
else
{
x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_IO + sr_flags);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, sr_flags);
iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE);
}
scalehandle_draw(&x->x_gui, x->x_gui.x_glist);
......
......@@ -294,15 +294,13 @@ static void slider_bang(t_slider *x)
static void slider_dialog(t_slider *x, t_symbol *s, int argc, t_atom *argv)
{
canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
t_symbol *srl[3];
int w = atom_getintarg(0, argc, argv);
int h = atom_getintarg(1, argc, argv);
double min = atom_getfloatarg(2, argc, argv);
double max = atom_getfloatarg(3, argc, argv);
x->x_lin0_log1 = !!atom_getintarg(4, argc, argv);
x->x_steady = !!atom_getintarg(17, argc, argv);
int sr_flags = iemgui_dialog(&x->x_gui, srl, argc, argv);
int sr_flags = iemgui_dialog(&x->x_gui, argc, argv);
if (x->x_orient) {
x->x_gui.x_w = iemgui_clip_size(w);
int oldl = x->x_gui.x_h;
......@@ -318,7 +316,7 @@ static void slider_dialog(t_slider *x, t_symbol *s, int argc, t_atom *argv)
}
slider_check_minmax(x, min, max);
x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_IO + sr_flags);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, sr_flags);
iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE);
scalehandle_draw(&x->x_gui, x->x_gui.x_glist);
scrollbar_update(x->x_gui.x_glist);
......
......@@ -194,7 +194,6 @@ static void toggle_bang(t_toggle *x)
static void toggle_dialog(t_toggle *x, t_symbol *s, int argc, t_atom *argv)
{
canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
t_symbol *srl[3];
x->x_gui.x_h =
x->x_gui.x_w = iemgui_clip_size(atom_getintarg(0, argc, argv));
t_float nonzero = atom_getfloatarg(2, argc, argv);
......@@ -203,9 +202,9 @@ static void toggle_dialog(t_toggle *x, t_symbol *s, int argc, t_atom *argv)
x->x_nonzero = nonzero;
if(x->x_on != 0.0)
x->x_on = x->x_nonzero;
int sr_flags = iemgui_dialog(&x->x_gui, srl, argc, argv);
int sr_flags = iemgui_dialog(&x->x_gui, argc, argv);
x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_CONFIG);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_IO + sr_flags);
iemgui_draw_io(&x->x_gui, x->x_gui.x_glist, sr_flags);
iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE);
scalehandle_draw(&x->x_gui, x->x_gui.x_glist);
scrollbar_update(x->x_gui.x_glist);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment