From 73644be944820f2a81ed861f7bab1e0559c22838 Mon Sep 17 00:00:00 2001 From: Guenter Geiger Date: Tue, 30 Jul 2002 19:20:23 +0000 Subject: next step towards gui revival svn path=/trunk/externals/ggee/; revision=64 --- gui/fatom.c | 364 +----------------------------------------------------------- 1 file changed, 4 insertions(+), 360 deletions(-) (limited to 'gui/fatom.c') diff --git a/gui/fatom.c b/gui/fatom.c index 4ba205c..e71dd27 100644 --- a/gui/fatom.c +++ b/gui/fatom.c @@ -7,376 +7,20 @@ #pragma warning( disable : 4305 ) #endif -/* ------------------------ fatom ----------------------------- */ +#include "fatom.h" -#define x_val a_pos.a_w.w_float static t_class *fatom_class; -typedef struct _fatom -{ - t_object x_obj; - t_atom a_pos; - t_glist * x_glist; - int x_width; - int x_height; - t_symbol* x_sym; - t_symbol* x_type; - int x_widget; -} t_fatom; -/* widget helper functions */ - - - -static void draw_inlets(t_fatom *x, t_glist *glist, int firsttime, int nin, int nout) -{ - int n = nin; - int nplus, i; - nplus = (n == 1 ? 1 : n-1); - post("draw inlet"); - for (i = 0; i < n; i++) - { - int onset = text_xpix(&x->x_obj, glist) + (x->x_width - IOWIDTH) * i / nplus; - if (firsttime) - sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xo%d\n", - glist_getcanvas(glist), - onset, text_ypix(&x->x_obj, glist) + x->x_height - 1, - onset + IOWIDTH, text_ypix(&x->x_obj, glist) + x->x_height, - x, i); - else - sys_vgui(".x%x.c coords %xo%d %d %d %d %d\n", - glist_getcanvas(glist), x, i, - onset, text_ypix(&x->x_obj, glist) + x->x_height - 1, - onset + IOWIDTH, text_ypix(&x->x_obj, glist) + x->x_height); - } - n = nout; - nplus = (n == 1 ? 1 : n-1); - for (i = 0; i < n; i++) - { - int onset = text_xpix(&x->x_obj, glist) + (x->x_width - IOWIDTH) * i / nplus; - if (firsttime) - sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xi%d\n", - glist_getcanvas(glist), - onset, text_ypix(&x->x_obj, glist), - onset + IOWIDTH, text_ypix(&x->x_obj, glist) + 1, - x, i); - else - sys_vgui(".x%x.c coords %xi%d %d %d %d %d\n", - glist_getcanvas(glist), x, i, - onset, text_ypix(&x->x_obj, glist), - onset + IOWIDTH, text_ypix(&x->x_obj, glist) + 1); - - } - post("draw inlet end"); -} - - -static void create_widget(t_fatom *x, t_glist *glist) -{ - t_canvas *canvas=glist_getcanvas(glist); - if (!strcmp(x->x_type->s_name,"vslider")) { - x->x_width = 32; - x->x_height = 140; - - sys_vgui("scale .x%x.c.s%x \ - -sliderlength 10 \ - -showvalue 0 \ - -length 131 \ - -from 127 -to 0 \ - -command fatom_cb%x\n",canvas,x,x); - } else if (!strcmp(x->x_type->s_name,"hslider")) { - x->x_width = 150; - x->x_height = 28; - sys_vgui("scale .x%x.c.s%x \ - -sliderlength 10 \ - -showvalue 0 \ - -length 131 \ - -orient horizontal \ - -from 127 -to 0 \ - -command fatom_cb%x\n",canvas,x,x); - } else if (!strcmp(x->x_type->s_name,"checkbutton")) { - x->x_width = 40; - x->x_height = 25; - sys_vgui("checkbutton .x%x.c.s%x \ - -command { fatom_cb%x $fatom_val%x} -variable fatom_val%x\n",canvas,x,x,x,x); - } else if (!strcmp(x->x_type->s_name,"hradio")) { - int i; - x->x_width = 8*20; - x->x_height = 25; - for (i=0;i<8;i++) { - sys_vgui("radiobutton .x%x.c.s%x%d \ - -command { fatom_cb%x $fatom_val%x} -variable fatom_val%x -value %d\n",canvas,x,i,x,x,x,i); - } - /* TODO pack them */ - } else if (!strcmp(x->x_type->s_name,"vradio")) { - int i; - x->x_width = 30; - x->x_height = 20*8+5; - for (i=0;i<8;i++) { - sys_vgui("radiobutton .x%x.c.s%x%d \ - -command { fatom_cb%x $fatom_val%x} -variable fatom_val%x -value %d\n",canvas,x,i,x,x,x,i); - } - /* TODO pack them */ - } else { - x->x_width = 32; - x->x_height = 140; - sys_vgui("scale .x%x.c.s%x \ - -sliderlength 10 \ - -showvalue 0 \ - -length 131 \ - -from 127 -to 0 \ - -command fatom_cb%x\n",canvas,x,x); - } -} - -void fatom_drawme(t_fatom *x, t_glist *glist, int firsttime) -{ - t_canvas *canvas=glist_getcanvas(glist); - post("drawme %d",firsttime); - if (firsttime) { - post("glist %x canvas %x",x->x_glist,canvas); - if (x->x_glist != canvas) { - create_widget(x,glist); - x->x_glist = canvas; - } - sys_vgui(".x%x.c create window %d %d -anchor nw -window .x%x.c.s%x -tags %xS\n", - canvas,text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist)+2,x->x_glist,x,x); - - } - else { - sys_vgui(".x%x.c coords %xS \ -%d %d\n", - canvas, x, - text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist)+2); - } - draw_inlets(x, glist, firsttime, 1,1); - -} - - -void fatom_erase(t_fatom* x,t_glist* glist) -{ - int n; - - post("erase"); -// sys_vgui(".x%x.c.s%x delete\n",glist_getcanvas(glist),x); - - sys_vgui(".x%x.c delete %xS\n",glist_getcanvas(glist), x); - - /* inlets and outlets */ - - sys_vgui(".x%x.c delete %xi%d\n",glist_getcanvas(glist),x,0); - sys_vgui(".x%x.c delete %xo%d\n",glist_getcanvas(glist),x,0); -} - - - -/* ------------------------ fatom widgetbehaviour----------------------------- */ - - -static void fatom_getrect(t_gobj *z, t_glist *owner, - int *xp1, int *yp1, int *xp2, int *yp2) -{ - int width, height; - t_fatom* s = (t_fatom*)z; - - width = s->x_width; - height = s->x_height; - *xp1 = text_xpix(&s->x_obj, owner); - *yp1 = text_ypix(&s->x_obj, owner); - *xp2 = text_xpix(&s->x_obj, owner) + width; - *yp2 = text_ypix(&s->x_obj, owner) + height; -} - -static void fatom_displace(t_gobj *z, t_glist *glist, - int dx, int dy) -{ - t_fatom *x = (t_fatom *)z; - post("displace"); - x->x_obj.te_xpix += dx; - x->x_obj.te_ypix += dy; - if (glist_isvisible(glist)) - { - sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n", - glist_getcanvas(glist), x, - text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), - text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height); - - fatom_drawme(x, glist, 0); - canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x); - } - post("displace end"); -} - -static void fatom_select(t_gobj *z, t_glist *glist, int state) -{ - t_fatom *x = (t_fatom *)z; - if (state) { - sys_vgui(".x%x.c create rectangle \ -%d %d %d %d -tags %xSEL -outline blue\n", - glist_getcanvas(glist), - text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), - text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height, - x); - } - else { - sys_vgui(".x%x.c delete %xSEL\n", - glist_getcanvas(glist), x); - } - - - -} - - -static void fatom_activate(t_gobj *z, t_glist *glist, int state) -{ -/* t_text *x = (t_text *)z; - t_rtext *y = glist_findrtext(glist, x); - if (z->g_pd != gatom_class) rtext_activate(y, state);*/ -} - -static void fatom_delete(t_gobj *z, t_glist *glist) -{ - t_text *x = (t_text *)z; - canvas_deletelinesfor(glist_getcanvas(glist), x); -} - - -static void fatom_vis(t_gobj *z, t_glist *glist, int vis) -{ - t_fatom* s = (t_fatom*)z; - t_rtext *y; - post("vis: %d",vis); - if (vis) { - y = (t_rtext *) rtext_new_without_senditup(glist, (t_text *)z, glist->gl_editor->e_rtext); - fatom_drawme(s, glist, 1); - } - else { - y = glist_findrtext(glist, (t_text *)z); - fatom_erase(s,glist); - rtext_free(y); - } -} - -/* can we use the normal text save function ?? */ - -static void fatom_save(t_gobj *z, t_binbuf *b) -{ - - t_fatom *x = (t_fatom *)z; - - binbuf_addv(b, "ssiiss", gensym("#X"),gensym("obj"), - x->x_obj.te_xpix, x->x_obj.te_ypix , - gensym("fatom"),x->x_type); - binbuf_addv(b, ";"); -} - - -t_widgetbehavior fatom_widgetbehavior; - -void fatom_size(t_fatom* x,t_floatarg w,t_floatarg h) { - x->x_width = w; - x->x_height = h; -} - -void fatom_color(t_fatom* x,t_symbol* col) -{ -/* outlet_bang(x->x_obj.ob_outlet); only bang if there was a bang .. - so color black does the same as bang, but doesn't forward the bang -*/ -} - -static void fatom_setwidget() -{ - fatom_widgetbehavior.w_getrectfn = fatom_getrect; - fatom_widgetbehavior.w_displacefn = fatom_displace; - fatom_widgetbehavior.w_selectfn = fatom_select; - fatom_widgetbehavior.w_activatefn = fatom_activate; - fatom_widgetbehavior.w_deletefn = fatom_delete; - fatom_widgetbehavior.w_visfn = fatom_vis; - fatom_widgetbehavior.w_savefn = fatom_save; - fatom_widgetbehavior.w_clickfn = NULL; - fatom_widgetbehavior.w_propertiesfn = NULL; -} - - - -static void fatom_float(t_fatom* x,t_floatarg f) -{ - x->x_val = f; - sys_vgui(".x%x.c.s%x set %f\n",x->x_glist,x,f); - outlet_float(x->x_obj.ob_outlet,f); -} - -static void fatom_f(t_fatom* x,t_floatarg f) -{ - x->x_val = f; - outlet_float(x->x_obj.ob_outlet,f); -} - -static void *fatom_new(t_symbol* type) -{ - t_fatom *x = (t_fatom *)pd_new(fatom_class); - char buf[256]; - - x->x_type = type; - x->x_widget = 0; - x->x_glist = (t_glist*)NULL; -/* - if (h) x->x_width = h; - else -*/ -/* - if (o) x->x_height = o; - else -*/ - - post("x%x",x); - - /* bind to a symbol for fatom callback (later make this based on the - filepath ??) */ - - sprintf(buf,"fatom%x",x); - x->x_sym = gensym(buf); - pd_bind(&x->x_obj.ob_pd, x->x_sym); - -/* pipe startup code to tk */ - - sys_vgui("proc fatom_cb%x {val} {\n - pd [concat fatom%x f $val \\;]\n - }\n",x,x); - - outlet_new(&x->x_obj, &s_float); - return (x); -} - -void fatom_setup(void) -{ +void fatom_setup() { + post("fatom setup"); fatom_class = class_new(gensym("fatom"), (t_newmethod)fatom_new, 0, sizeof(t_fatom),0,A_DEFSYM,0); - class_addfloat(fatom_class, (t_method)fatom_float); - class_addmethod(fatom_class, (t_method)fatom_f, gensym("f"), - A_FLOAT, 0); - -/* - class_addmethod(fatom_class, (t_method)fatom_size, gensym("size"), - A_FLOAT, A_FLOAT, 0); - - class_addmethod(fatom_class, (t_method)fatom_color, gensym("color"), - A_SYMBOL, 0); -*/ -/* - class_addmethod(fatom_class, (t_method)fatom_open, gensym("open"), - A_SYMBOL, 0); -*/ - fatom_setwidget(); - class_setwidget(fatom_class,&fatom_widgetbehavior); - + fatom_setup_common(fatom_class); } -- cgit v1.2.1