Commit 067d167b authored by Ivica Bukvic's avatar Ivica Bukvic
Browse files

backported comment resize marker, updated it to support pd-l2ork and selection...

backported comment resize marker, updated it to support pd-l2ork and selection colors, added fix to the resizable objects to support abstractions and subcanvases.
parent 6fbc5a11
......@@ -1235,6 +1235,7 @@ static void *subcanvas_new(t_symbol *s)
{
t_atom a[6];
t_canvas *x, *z = canvas_getcurrent();
fprintf(stderr,"subcanvas_new current canvas .x%lx\n", (t_int)z);
if (!*s->s_name) s = gensym("/SUBPATCH/");
SETFLOAT(a, 0);
SETFLOAT(a+1, GLIST_DEFCANVASYLOC);
......@@ -1810,6 +1811,8 @@ int canvas_open(t_canvas *x, const char *name, const char *ext,
static void canvas_f(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
{
static int warned;
//fprintf(stderr,"canvas_f .x%lx\n", (t_int)x);
t_canvas *xp = x; //parent window for a special case dealing with subpatches
t_gobj *g, *g2;
t_object *ob;
if (argc > 1 && !warned)
......@@ -1817,17 +1820,30 @@ static void canvas_f(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
post("** ignoring width or font settings from future Pd version **");
warned = 1;
}
if (!x->gl_list)
return;
if (!x->gl_list) {
if (x->gl_owner && !x->gl_isgraph) {
// this means that we are a canvas that was just created
// and that our width applies to our appearance on our parent
xp = x->gl_owner;
for (g = xp->gl_list; g != (t_gobj *)x; g = g->g_next) {
//fprintf(stderr,".x%lx .x%lx\n", (t_int)g, (t_int)x);
;
}
//fprintf(stderr,"done %d\n", (g != NULL ? 1: 0));
} else return;
} else {
for (g = x->gl_list; g2 = g->g_next; g = g2)
;
if (ob = pd_checkobject(&g->g_pd))
}
//fprintf(stderr,"is canvas_class? %d\n", (pd_class(&g->g_pd) == canvas_class ? 1:0));
if ((ob = pd_checkobject(&g->g_pd)) || pd_class(&g->g_pd) == canvas_class)
{
//fprintf(stderr,"f received\n");
ob->te_width = atom_getfloatarg(0, argc, argv);
if (glist_isvisible(x))
if (glist_isvisible(xp))
{
gobj_vis(g, x, 0);
gobj_vis(g, x, 1);
gobj_vis(g, xp, 0);
gobj_vis(g, xp, 1);
}
}
}
......
......@@ -6366,8 +6366,17 @@ void canvas_editmode(t_canvas *x, t_floatarg fyesplease)
x->gl_edit = !x->gl_edit;
if (x->gl_edit && glist_isvisible(x) && glist_istoplevel(x)){
//dpsaha@vt.edu add the resize blobs on GOP
t_gobj *g;
t_object *ob;
if (x->gl_goprect) canvas_draw_gop_resize_hooks(x);
canvas_setcursor(x, CURSOR_EDITMODE_NOTHING);
for (g = x->gl_list; g; g = g->g_next)
if ((ob = pd_checkobject(&g->g_pd)) && ob->te_type == T_TEXT)
{
t_rtext *y = glist_findrtext(x, ob);
text_drawborder(ob, x,
rtext_gettag(y), rtext_width(y), rtext_height(y), 1);
}
}
else
{
......@@ -6375,6 +6384,11 @@ void canvas_editmode(t_canvas *x, t_floatarg fyesplease)
glist_noselect(x);
if (glist_isvisible(x) && glist_istoplevel(x))
{
if (glist_isvisible(x) && glist_istoplevel(x))
{
canvas_setcursor(x, CURSOR_RUNMODE_NOTHING);
sys_vgui(".x%lx.c delete commentbar\n", glist_getcanvas(x));
}
// jsarlo
if (x->gl_editor->canvas_cnct_inlet_tag[0] != 0)
{
......
......@@ -105,7 +105,7 @@ void glist_text(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
extern t_pd *newest;
void canvas_getargs(int *argcp, t_atom **argvp);
static void canvas_objtext(t_glist *gl, int xpix, int ypix, int selected,
static void canvas_objtext(t_glist *gl, int xpix, int ypix, int width, int selected,
t_binbuf *b)
{
//fprintf(stderr,"canvas_objtext\n");
......@@ -167,7 +167,7 @@ static void canvas_objtext(t_glist *gl, int xpix, int ypix, int selected,
x->te_xpix = xpix;
x->te_ypix = ypix;
x->te_width = 0;
x->te_width = width;
x->te_type = T_OBJECT;
/* let's see if iemgui objects did not already set the value to 1, otherwise set it explicitly to 0 */
if (x->te_iemgui != 1)
......@@ -275,7 +275,7 @@ void canvas_obj(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
t_binbuf *b = binbuf_new();
binbuf_restore(b, argc-2, argv+2);
canvas_objtext(gl, atom_getintarg(0, argc, argv),
atom_getintarg(1, argc, argv), 0, b);
atom_getintarg(1, argc, argv), 0, 0, b);
}
/* JMZ: don't go into interactive mode in a closed canvas */
else if (!glist_isvisible(gl))
......@@ -287,7 +287,7 @@ void canvas_obj(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
int connectme, xpix, ypix, indx, nobj;
canvas_howputnew(gl, &connectme, &xpix, &ypix, &indx, &nobj);
pd_vmess(&gl->gl_pd, gensym("editmode"), "i", 1);
canvas_objtext(gl, xpix, ypix, 1, b);
canvas_objtext(gl, xpix, ypix, 0, 1, b);
if (connectme == 1) {
//fprintf(stderr,"canvas_obj calls canvas_connect\n");
connect_exception = 1;
......@@ -323,7 +323,7 @@ void canvas_obj_abstraction_from_menu(t_glist *gl, t_symbol *s, int argc, t_atom
if (sys_k12_mode)
pd_vmess (&gl->gl_pd, gensym("tooltips"), "i", 1);
#endif
canvas_objtext(gl, xpix+atom_getintarg(1, argc, argv), ypix+atom_getintarg(2, argc, argv), 1, b);
canvas_objtext(gl, xpix+atom_getintarg(1, argc, argv), ypix+atom_getintarg(2, argc, argv), 0, 1, b);
// the object is now the last on the glist so we locate it and send it loadbang
// we know we have at least one object since we just created one so we don't check for y being valid
......@@ -375,7 +375,7 @@ void canvas_iemguis(t_glist *gl, t_symbol *guiobjname)
glist_noselect(gl);
SETSYMBOL(&at, guiobjname);
binbuf_restore(b, 1, &at);
canvas_objtext(gl, xpix, ypix, 1, b);
canvas_objtext(gl, xpix, ypix, 0, 1, b);
if (connectme == 1)
canvas_connect(gl, indx, 0, nobj, 0);
//glist_getnextxy(gl, &xpix, &ypix);
......@@ -1375,10 +1375,13 @@ static void text_select(t_gobj *z, t_glist *glist, int state)
t_rtext *y = glist_findrtext(glist, x);
char *outline;
rtext_select(y, state);
//fprintf(stderr,"text_select %s\n", rtext_gettag(y));
if (pd_class(&x->te_pd) == text_class)
//fprintf(stderr,"text_select %s %d\n", rtext_gettag(y), state);
// text_class is either a comment or an object that failed to creates
// so we distinguish between it and comment using T_TEXT type check
if (pd_class(&x->te_pd) == text_class && x->te_type != T_TEXT) {
outline = "$dash_outline";
else
} else
outline = "$box_outline";
//fprintf(stderr,"text_select isvisible=%d shouldvis=%d istoplevel=%d\n", glist_isvisible(glist), gobj_shouldvis(&x->te_g, glist), glist_istoplevel(glist));
if (gobj_shouldvis(&x->te_g, glist)) {
......@@ -1886,6 +1889,21 @@ void text_drawborder(t_text *x, t_glist *glist,
glist_getcanvas(glist), tag,
x1, y1, x2-4, y1, x2, y1+4, x2, y2, x1, y2, x1, y1);
}
/* for comments, just draw a bar on RHS if unlocked; when a visible
canvas is unlocked we have to call this anew on all comments, and when
locked we erase them all via the annoying "commentbar" tag. */
else if (x->te_type == T_TEXT && glist->gl_edit)
{
if (firsttime) {
sys_vgui(".x%lx.c create pline\
%d %d %d %d -tags [list %sR commentbar] -stroke $obj_box_fill\n",
glist_getcanvas(glist),
x2, y1, x2, y2, tag);
} else {
sys_vgui(".x%lx.c coords %sR %d %d %d %d\n",
glist_getcanvas(glist), tag, x2, y1, x2, y2);
}
}
/* draw inlets/outlets */
if (ob = pd_checkobject(&x->te_pd)) {
......@@ -1955,6 +1973,21 @@ void text_drawborder_withtag(t_text *x, t_glist *glist,
x1, y1, x2-atom_draw_const, y1, x2, y1+atom_draw_const,
x2, y2, x1, y2, x1, y1,
tag, tag);
}
/* for comments, just draw a bar on RHS if unlocked; when a visible
canvas is unlocked we have to call this anew on all comments, and when
locked we erase them all via the annoying "commentbar" tag. */
else if (x->te_type == T_TEXT && glist->gl_edit)
{
if (firsttime) {
sys_vgui(".x%lx.c create pline\
%d %d %d %d -tags [list %sR commentbar] -stroke $obj_box_fill\n",
glist_getcanvas(glist),
x2, y1, x2, y2, tag);
} else {
sys_vgui(".x%lx.c coords %sR %d %d %d %d\n",
glist_getcanvas(glist), tag, x2, y1, x2, y2);
}
}
/* draw inlets/outlets */
......@@ -1985,7 +2018,7 @@ void glist_eraseiofor(t_glist *glist, t_object *ob, char *tag)
void text_eraseborder(t_text *x, t_glist *glist, char *tag)
{
if (x->te_type == T_TEXT) return;
//if (x->te_type == T_TEXT) return;
sys_vgui(".x%lx.c delete %sR\n",
glist_getcanvas(glist), tag);
glist_eraseiofor(glist, x, tag);
......@@ -2003,7 +2036,7 @@ void text_setto(t_text *x, t_glist *glist, char *buf, int bufsize, int pos)
if (x->te_type == T_OBJECT)
{
t_binbuf *b = binbuf_new();
int natom1, natom2;
int natom1, natom2, widthwas = x->te_width;
t_atom *vec1, *vec2;
binbuf_text(b, buf, bufsize);
natom1 = binbuf_getnatom(x->te_binbuf);
......@@ -2047,7 +2080,7 @@ void text_setto(t_text *x, t_glist *glist, char *buf, int bufsize, int pos)
int xwas = x->te_xpix, ywas = x->te_ypix;
canvas_eraselinesfor(glist, x);
glist_delete(glist, &x->te_g);
canvas_objtext(glist, xwas, ywas, 0, b);
canvas_objtext(glist, xwas, ywas, widthwas, 0, b);
/* if it's an abstraction loadbang it here */
if (newest && pd_class(newest) == canvas_class)
canvas_loadbang((t_canvas *)newest);
......
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