aboutsummaryrefslogtreecommitdiff
path: root/pd/src/g_traversal.c
diff options
context:
space:
mode:
authorMiller Puckette <millerpuckette@users.sourceforge.net>2005-08-16 04:06:28 +0000
committerMiller Puckette <millerpuckette@users.sourceforge.net>2005-08-16 04:06:28 +0000
commit8892fb6aabcbfd2c4695c154c22751b5fe5c9004 (patch)
treebd44e093cbc928e32560f70d4ca64fd593d5dc3c /pd/src/g_traversal.c
parentccd93386bb8edff9991df8d8cabf71b73039c5e3 (diff)
Configure.in was broken. Also, better GUI update queueing for
IEM guis and for 'data' (which should affect arrays.) svn path=/trunk/; revision=3430
Diffstat (limited to 'pd/src/g_traversal.c')
-rw-r--r--pd/src/g_traversal.c37
1 files changed, 32 insertions, 5 deletions
diff --git a/pd/src/g_traversal.c b/pd/src/g_traversal.c
index c99a125c..375b5123 100644
--- a/pd/src/g_traversal.c
+++ b/pd/src/g_traversal.c
@@ -273,7 +273,6 @@ static void ptrobj_next(t_ptrobj *x)
{
ptrobj_vnext(x, 0);
}
-
static void ptrobj_sendwindow(t_ptrobj *x, t_symbol *s, int argc, t_atom *argv)
{
t_scalar *sc;
@@ -334,6 +333,32 @@ static void ptrobj_pointer(t_ptrobj *x, t_gpointer *gp)
ptrobj_bang(x);
}
+
+static void ptrobj_rewind(t_ptrobj *x)
+{
+ t_scalar *sc;
+ t_symbol *templatesym;
+ int n;
+ t_typedout *to;
+ t_glist *glist;
+ t_pd *canvas;
+ t_gstub *gs;
+ if (!gpointer_check(&x->x_gp, 1))
+ {
+ pd_error(x, "pointer_rewind: empty pointer");
+ return;
+ }
+ gs = x->x_gp.gp_stub;
+ if (gs->gs_which != GP_GLIST)
+ {
+ pd_error(x, "pointer_rewind: sorry, unavailable for arrays");
+ return;
+ }
+ glist = gs->gs_un.gs_glist;
+ gpointer_setglist(&x->x_gp, glist, 0);
+ ptrobj_bang(x);
+}
+
static void ptrobj_free(t_ptrobj *x)
{
freebytes(x->x_typedout, x->x_ntypedout * sizeof (*x->x_typedout));
@@ -351,6 +376,8 @@ static void ptrobj_setup(void)
A_DEFFLOAT, 0);
class_addmethod(ptrobj_class, (t_method)ptrobj_sendwindow,
gensym("send-window"), A_GIMME, 0);
+ class_addmethod(ptrobj_class, (t_method)ptrobj_rewind,
+ gensym("rewind"), 0);
class_addpointer(ptrobj_class, ptrobj_pointer);
class_addbang(ptrobj_class, ptrobj_bang);
}
@@ -541,14 +568,14 @@ static void set_bang(t_set *x)
else for (i = 0, vp = x->x_variables; i < nitems; i++, vp++)
template_setfloat(template, vp->gv_sym, vec, vp->gv_w.w_float, 1);
if (gs->gs_which == GP_GLIST)
- glist_redrawitem(gs->gs_un.gs_glist, (t_gobj *)(gp->gp_un.gp_scalar));
+ scalar_redraw(gp->gp_un.gp_scalar, gs->gs_un.gs_glist);
else
{
t_array *owner_array = gs->gs_un.gs_array;
while (owner_array->a_gp.gp_stub->gs_which == GP_ARRAY)
owner_array = owner_array->a_gp.gp_stub->gs_un.gs_array;
- glist_redrawitem(owner_array->a_gp.gp_stub->gs_un.gs_glist,
- (t_gobj *)(owner_array->a_gp.gp_un.gp_scalar));
+ scalar_redraw(owner_array->a_gp.gp_un.gp_scalar,
+ owner_array->a_gp.gp_stub->gs_un.gs_glist);
}
}
@@ -1019,7 +1046,7 @@ static void append_float(t_append *x, t_float f)
template_setfloat(template, vp->gv_sym, vec, vp->gv_f, 1);
}
- glist_redrawitem(glist, (t_gobj *)sc);
+ scalar_redraw(sc, glist);
outlet_pointer(x->x_obj.ob_outlet, gp);
}