aboutsummaryrefslogtreecommitdiff
path: root/pd/src/g_array.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_array.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_array.c')
-rw-r--r--pd/src/g_array.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/pd/src/g_array.c b/pd/src/g_array.c
index 14854f0a..fb11715b 100644
--- a/pd/src/g_array.c
+++ b/pd/src/g_array.c
@@ -552,7 +552,7 @@ void array_redraw(t_array *a, t_glist *glist)
{
while (a->a_gp.gp_stub->gs_which == GP_ARRAY)
a = a->a_gp.gp_stub->gs_un.gs_array;
- gobj_redraw(&a->a_gp.gp_un.gp_scalar->sc_gobj, glist);
+ scalar_redraw(a->a_gp.gp_un.gp_scalar, glist);
}
/* routine to get screen coordinates of a point in an array */
@@ -615,7 +615,7 @@ static void array_motion(void *z, t_floatarg dx, t_floatarg dy)
array_motion_ycumulative += dy * array_motion_yperpix;
if (array_motion_xfield)
{
- /* it's an x, y plot; can drag many points at once */
+ /* it's an x, y plot */
int i;
for (i = 0; i < array_motion_npoints; i++)
{
@@ -653,7 +653,7 @@ static void array_motion(void *z, t_floatarg dx, t_floatarg dy)
else if (array_motion_yfield)
{
/* a y-only plot. */
- int thisx = array_motion_initx + array_motion_xcumulative, x2;
+ int thisx = array_motion_initx + array_motion_xcumulative + 0.5, x2;
int increment, i, nchange;
float newy = array_motion_ycumulative,
oldy = fielddesc_getcoord(array_motion_yfield,
@@ -680,8 +680,7 @@ static void array_motion(void *z, t_floatarg dx, t_floatarg dy)
array_motion_lastx = thisx;
}
if (array_motion_scalar)
- sys_queuegui(&array_motion_scalar->sc_gobj,
- array_motion_glist, gobj_redraw);
+ scalar_redraw(array_motion_scalar, array_motion_glist);
if (array_motion_array)
array_redraw(array_motion_array, array_motion_glist);
}
@@ -703,6 +702,7 @@ static int array_doclick_element(t_array *array, t_glist *glist,
t_canvas *elemtemplatecanvas;
t_template *elemtemplate;
int elemsize, yonset, wonset, xonset, i, incr, hit;
+ float xsum;
if (elemtemplatesym == &s_float)
return (0);
@@ -714,12 +714,21 @@ static int array_doclick_element(t_array *array, t_glist *glist,
if (array->a_n < 2000)
incr = 1;
else incr = array->a_n / 300;
- for (i = 0; i < array->a_n; i += incr)
+ for (i = 0, xsum = 0; i < array->a_n; i += incr)
{
+ float usexloc, useyloc;
+ if (xonset >= 0)
+ usexloc = xloc + fielddesc_cvttocoord(xfield,
+ *(float *)(((char *)(array->a_vec) + elemsize * i) + xonset));
+ else usexloc = xloc + xsum, xsum += xinc;
+ useyloc = yloc + (yonset >= 0 ? fielddesc_cvttocoord(yfield,
+ *(float *)(((char *)(array->a_vec) + elemsize * i) + yonset)) : 0);
+
if (hit = scalar_doclick(
(t_word *)((char *)(array->a_vec) + i * elemsize),
elemtemplate, 0, array,
- glist, xloc, yloc, xpix, ypix, shift, alt, dbl, doit))
+ glist, usexloc, useyloc,
+ xpix, ypix, shift, alt, dbl, doit))
return (hit);
}
return (0);
@@ -850,8 +859,10 @@ int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap,
array_motion_xcumulative =
fielddesc_getcoord(xfield, array_motion_template,
(t_word *)(elem + i * elemsize), 1);
- array_motion_wp = (t_word *)(elem + i * elemsize);
- array_motion_npoints = array->a_n - i;
+ array_motion_wp = (t_word *)(elem + i * elemsize);
+ if (shift)
+ array_motion_npoints = array->a_n - i;
+ else array_motion_npoints = 1;
}
else
{