aboutsummaryrefslogtreecommitdiff
path: root/gui/fatom.c
diff options
context:
space:
mode:
authorGuenter Geiger <ggeiger@users.sourceforge.net>2002-07-30 19:20:23 +0000
committerGuenter Geiger <ggeiger@users.sourceforge.net>2002-07-30 19:20:23 +0000
commit73644be944820f2a81ed861f7bab1e0559c22838 (patch)
tree403e1dd0da602294f40c7f5c0e02656afb99b959 /gui/fatom.c
parentd03163cea16c8056fc8095ead5acfbaacebde7ee (diff)
next step towards gui revival
svn path=/trunk/externals/ggee/; revision=64
Diffstat (limited to 'gui/fatom.c')
-rw-r--r--gui/fatom.c364
1 files changed, 4 insertions, 360 deletions
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);
}