Commit 615c553a authored by Ivica Bukvic's avatar Ivica Bukvic
Browse files

additional improvements and fixes for regressions introduced in the last...

additional improvements and fixes for regressions introduced in the last mega-patch by Jonathan Wilkes
parent ffed7406
......@@ -159,6 +159,29 @@ extern void template_notifyforscalar(t_template *template, t_glist *owner,
static int sc_isentered = 0;
static t_scalar *sc_entered = 0;
static void scalar_leave(t_scalar *x, t_glist *owner, t_template *template,
int force_leave)
{
/* hack for enter/leave struct notifications */
if (sc_isentered == 1)
{
/* change value to see if there's a call
to scalar_click the next time around. Of
course it will be too late so we'll be
one pixel off, but it's better than nothing.
*/
sc_isentered = -1;
}
else if (sc_isentered == -1 || force_leave)
{
t_atom at[1];
template_notifyforscalar(template, owner, x, gensym("leave"), 1, at);
sc_entered = 0;
sc_isentered = 0;
}
}
static void scalar_getrect(t_gobj *z, t_glist *owner,
int *xp1, int *yp1, int *xp2, int *yp2)
{
......@@ -170,26 +193,8 @@ static void scalar_getrect(t_gobj *z, t_glist *owner,
t_gobj *y;
t_float basex, basey;
/* hack for enter/leave struct notifications */
if (sc_entered == x)
{
if (sc_isentered == 1)
{
/* change value to see if there's a call
to scalar_click the next time around. Of
course it will be too late so we'll be
one pixel off, but it's better than nothing.
*/
sc_isentered = -1;
}
else if (sc_isentered == -1)
{
t_atom at[1];
template_notifyforscalar(template, owner, x, gensym("leave"), 1, at);
sc_entered = 0;
sc_isentered = 0;
}
}
scalar_leave(x, owner, template, 0);
// EXPERIMENTAL: we assume that entire canvas is withing the rectangle--this is for arrays
// with "jump on click" enabled TODO: test for other regressions (there shouuld not be any
......@@ -444,21 +449,22 @@ static void scalar_delete(t_gobj *z, t_glist *glist)
/* nothing to do */
}
/* At preset, scalars have a three-level hierarchy in tkpath,
with two levels accessible from within Pd:
scalar - tkpath group with a matrix based on x/y fields,
| gop basexy, and gop/parent canvas scaling values.
| This group is not configurable by the user. This
| way [draw group] doesn't need extra code to include
| basexy and gop settings.
/* At present, scalars have a three-level hierarchy in tkpath,
with two levels accessible by the user from within Pd:
scalar - tkpath group with matrix derived from x/y fields,
| gop basexy, and gop scaling values. This group is
| not configurable by the user. This means that the
| [draw group] below can ignore basexy and gop junk
| when computing the transform matrix.
v
dgroup - user-facing group that is parent to all the scalar's
| drawing instructions. Its matrix and options can be
| accessed from [draw group]
dgroup - user-facing group which is the parent for all the
| scalar's drawing commands. Its matrix and options
| can be accessed from the [draw group] object (one
| per templatecanvas).
v
draw - various drawing instructions (rectangles, paths, etc.).
Each has its own matrix and options that can be
accessed from the corresponding [draw] instruction.
draw - the actual drawing command: rectangle, path, etc.
Each has its own matrix and options which can set
with messages to the corresponding [draw] object.
The tag "blankscalar" is for scalars that don't have a visual
representation, but maybe this can just be merged with "scalar"
......@@ -587,10 +593,20 @@ static int scalar_click(t_gobj *z, struct _glist *owner,
t_scalar *x = (t_scalar *)z;
t_template *template = template_findbyname(x->sc_template);
/* hack for enter/leave notifications */
if (sc_isentered == 0)
/* hack for enter/leave notifications. The second part
of the conditional is to catch edge cases where the
pointer enters a scalar in one window then moves to
an overlapping window before leaving the first one.
There is an edge case with this hack-- if the mouse
is inside a scalar in one window and then moves to
*/
if (sc_isentered == 0 ||
(sc_entered && sc_entered != x))
{
t_atom at[1];
if (sc_entered && sc_entered !=x)
scalar_leave(sc_entered, owner, template, 1);
template_notifyforscalar(template, owner, x, gensym("enter"), 1, at);
sc_isentered = 1;
sc_entered = x;
......
......@@ -1123,10 +1123,11 @@ static void *draw_new(t_symbol *classsym, t_int argc, t_atom *argv)
if (argc && x->x_drawtype == gensym("path"))
{
if (argv->a_type != A_SYMBOL ||
atom_getsymbol(argv) != gensym("M"))
(atom_getsymbol(argv) != gensym("M") &&
atom_getsymbol(argv) != gensym("m")))
{
pd_error(x, "draw path: path data must start "
"with a moveto command (M)");
"with a moveto command (M or m)");
return 0;
}
}
......@@ -1412,8 +1413,7 @@ void draw_fill(t_draw *x, t_symbol *s, t_int argc, t_atom *argv)
}
if (argc && (argv->a_type == A_FLOAT || argv->a_type == A_SYMBOL))
{
draw_fillopacity(x, s, argc, argv);
return;
draw_fillopacity(x, gensym("fill-opacity"), argc, argv);
}
}
draw_update(x, s);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment