Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25363
Modified Files: Tag: desiredata x_gui.c Log Message: removed gfxstub
Index: x_gui.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/x_gui.c,v retrieving revision 1.3.4.1.2.5.2.1 retrieving revision 1.3.4.1.2.5.2.2 diff -C2 -d -r1.3.4.1.2.5.2.1 -r1.3.4.1.2.5.2.2 *** x_gui.c 8 Dec 2006 09:35:30 -0000 1.3.4.1.2.5.2.1 --- x_gui.c 19 Dec 2006 18:35:11 -0000 1.3.4.1.2.5.2.2 *************** *** 13,184 **** #endif
- /* --------------------- graphics responder ---------------- */ - - /* make one of these if you want to put up a dialog window but want to be - protected from getting deleted and then having the dialog call you back. In - this design the calling object doesn't have to keep the address of the dialog - window around; instead we keep a list of all open dialogs. Any object that - might have dialogs, when it is deleted, simply checks down the dialog window - list and breaks off any dialogs that might later have sent messages to it. - Only when the dialog window itself closes do we delete the gfxstub object. */ - - static t_class *gfxstub_class; - - typedef struct _gfxstub - { - t_pd x_pd; - t_pd *x_owner; - void *x_key; - t_symbol *x_sym; - struct _gfxstub *x_next; - } t_gfxstub; - - static t_gfxstub *gfxstub_list; - - /* create a new one. the "key" is an address by which the owner - will identify it later; if the owner only wants one dialog, this - could just be a pointer to the owner itself. The string "cmd" - is a TK command to create the dialog, with "%s" embedded in - it so we can provide a name by which the GUI can send us back - messages; e.g., "pdtk_canvas_dofont %s 10". */ - - void gfxstub_new(t_pd *owner, void *key, const char *cmd) - { - char stbuf[MAXPDSTRING]; - char *buf; - char namebuf[80]; - t_gfxstub *x; - t_symbol *s; - int len = strlen(cmd) + 50; - - /* if any exists with matching key, burn it. */ - for (x = gfxstub_list; x; x = x->x_next) - if (x->x_key == key) - gfxstub_deleteforkey(key); - - /* TG - if necessary reserve a larger buffer */ - /* gcc could also dynamically reserve on the stack... keep this for later */ - if(len > MAXPDSTRING) - buf = (char *)getbytes(len); - else - buf = stbuf; - - x = (t_gfxstub *)pd_new(gfxstub_class); - sprintf(namebuf, ".gfxstub%lx", (t_int)x); - - s = gensym(namebuf); - pd_bind(&x->x_pd, s); - x->x_owner = owner; - x->x_sym = s; - x->x_key = key; - x->x_next = gfxstub_list; - gfxstub_list = x; - sprintf(buf, cmd, s->s_name); - sys_gui(buf); - - if(buf != stbuf) - freebytes(buf,len); - } - - static void gfxstub_offlist(t_gfxstub *x) - { - t_gfxstub *y1, *y2; - if (gfxstub_list == x) - gfxstub_list = x->x_next; - else for (y1 = gfxstub_list; y2 = y1->x_next; y1 = y2) - if (y2 == x) - { - y1->x_next = y2->x_next; - break; - } - } - - /* if the owner disappears, we still may have to stay around until our - dialog window signs off. Anyway we can now tell the GUI to destroy the - window. */ - void gfxstub_deleteforkey(void *key) - { - t_gfxstub *y; - int didit = 1; - while (didit) - { - didit = 0; - for (y = gfxstub_list; y; y = y->x_next) - { - if (y->x_key == key) - { - sys_vgui("destroy .gfxstub%lx\n", y); - y->x_owner = 0; - gfxstub_offlist(y); - didit = 1; - break; - } - } - } - } - - /* --------- pd messages for gfxstub (these come from the GUI) ---------- */ - - /* "cancel" to request that we close the dialog window. */ - static void gfxstub_cancel(t_gfxstub *x) - { - gfxstub_deleteforkey(x->x_key); - } - - /* "signoff" comes from the GUI to say the dialog window closed. */ - static void gfxstub_signoff(t_gfxstub *x) - { - gfxstub_offlist(x); - pd_free(&x->x_pd); - } - - static t_binbuf *gfxstub_binbuf; - - /* a series of "data" messages rebuilds a scalar */ - static void gfxstub_data(t_gfxstub *x, t_symbol *s, int argc, t_atom *argv) - { - if (!gfxstub_binbuf) - gfxstub_binbuf = binbuf_new(); - binbuf_add(gfxstub_binbuf, argc, argv); - binbuf_addsemi(gfxstub_binbuf); - } - /* the "end" message terminates rebuilding the scalar */ - static void gfxstub_end(t_gfxstub *x) - { - canvas_dataproperties((t_canvas *)x->x_owner, - (t_scalar *)x->x_key, gfxstub_binbuf); - binbuf_free(gfxstub_binbuf); - gfxstub_binbuf = 0; - } - - /* anything else is a message from the dialog window to the owner; - just forward it. */ - static void gfxstub_anything(t_gfxstub *x, t_symbol *s, int argc, t_atom *argv) - { - if (x->x_owner) - pd_typedmess(x->x_owner, s, argc, argv); - } - - static void gfxstub_free(t_gfxstub *x) - { - pd_unbind(&x->x_pd, x->x_sym); - } - - static void gfxstub_setup(void) - { - gfxstub_class = class_new(gensym("gfxstub"), (t_newmethod)gfxstub_new, - (t_method)gfxstub_free, - sizeof(t_gfxstub), CLASS_PD, 0); - class_addanything(gfxstub_class, gfxstub_anything); - class_addmethod(gfxstub_class, (t_method)gfxstub_signoff, - gensym("signoff"), 0); - class_addmethod(gfxstub_class, (t_method)gfxstub_data, - gensym("data"), A_GIMME, 0); - class_addmethod(gfxstub_class, (t_method)gfxstub_end, - gensym("end"), 0); - class_addmethod(gfxstub_class, (t_method)gfxstub_cancel, - gensym("cancel"), 0); - } - /* -------------------------- openpanel ------------------------------ */
--- 13,16 ---- *************** *** 404,408 **** void x_gui_setup(void) { - gfxstub_setup(); openpanel_setup(); savepanel_setup(); --- 236,239 ----