From 182b54ee371341a620072f2a6856cac1c8d2bb10 Mon Sep 17 00:00:00 2001 From: Ivica Ico Bukvic <ico@vt.edu> Date: Sat, 20 Apr 2013 20:41:18 -0400 Subject: [PATCH] added proper getrect support for comment objects --- pd/src/g_editor.c | 12 +++++++++++- pd/src/g_graph.c | 6 ++++-- pd/src/g_text.c | 29 ++++++++++++++++++++++++----- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c index 948ac3708..23224080a 100644 --- a/pd/src/g_editor.c +++ b/pd/src/g_editor.c @@ -174,8 +174,10 @@ int gobj_shouldvis(t_gobj *x, struct _glist *glist) gobj_getrect(x, glist, &gx1, &gy1, &gx2, &gy2); //fprintf(stderr,"gobj_shouldvis gop: %d %d %d %d || object %d %d %d %d\n", x1, x2, y1, y2, gx1, gx2, gy1, gy2); if (gx1 < x1 || gx1 > x2 || gx2 < x1 || gx2 > x2 || - gy1 < y1 || gy1 > y2 || gy2 < y1 || gy2 > y2) + gy1 < y1 || gy1 > y2 || gy2 < y1 || gy2 > y2) { + //fprintf(stderr,"does not fit within boundaries\n"); return (0); + } if (glist==glist_getcanvas(glist)) sys_vgui(".x%lx.c raise all_cords\n", glist_getcanvas(glist)); } @@ -185,6 +187,14 @@ int gobj_shouldvis(t_gobj *x, struct _glist *glist) boxes inside graphs---except comments, if we're doing the new (goprect) style. */ //fprintf(stderr,"pd_checkobject %lx\n", x); + /*fprintf(stderr,"pd_checkobject %d %d %d %d %d %d %d\n", + glist->gl_havewindow, + (ob->te_pd != canvas_class ? 1:0), + (ob->te_pd->c_wb != &text_widgetbehavior ? 1:0), + (ob->te_pd == canvas_class ? 1:0), + ((t_glist *)ob)->gl_isgraph, + glist->gl_goprect, + (ob->te_type == T_TEXT ? 1:0));*/ return (glist->gl_havewindow || (ob->te_pd != canvas_class && ob->te_pd->c_wb != &text_widgetbehavior) || diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c index aab1b50b4..b4d0a032d 100644 --- a/pd/src/g_graph.c +++ b/pd/src/g_graph.c @@ -1191,9 +1191,11 @@ static void graph_select(t_gobj *z, t_glist *glist, int state) t_gobj *g; //fprintf(stderr,"graph_select\n"); if (x->gl_list) - for (g = x->gl_list; g; g = g->g_next) - if (g && gobj_shouldvis(g, x) && (g->g_pd->c_wb->w_displacefnwtag != NULL || pd_class((t_pd *)g) == garray_class)) + for (g = x->gl_list; g; g = g->g_next) { + //fprintf(stderr,"shouldvis %d\n",gobj_shouldvis(g, x)); + if ((g && gobj_shouldvis(g, x) && (g->g_pd->c_wb->w_displacefnwtag != NULL) || (g && pd_class((t_pd *)g) == garray_class))) gobj_select(g, x, state); + } sys_vgui("pdtk_select_all_gop_widgets .x%lx %s %d\n", canvas, rtext_gettag(glist_findrtext(glist, &x->gl_obj)), state); } } diff --git a/pd/src/g_text.c b/pd/src/g_text.c index d21f6db04..c9f512ba1 100644 --- a/pd/src/g_text.c +++ b/pd/src/g_text.c @@ -1184,7 +1184,7 @@ static void gatom_properties(t_gobj *z, t_glist *owner) static void text_getrect(t_gobj *z, t_glist *glist, int *xp1, int *yp1, int *xp2, int *yp2) { - //fprintf(stderr,"text_getrect %d %d\n", (glist->gl_editor ? 1 : 0), (glist->gl_editor->e_rtext ? 1:0)); + //fprintf(stderr,"text_getrect\n"); t_text *x = (t_text *)z; int width, height, iscomment = (x->te_type == T_TEXT); t_float x1, y1, x2, y2; @@ -1194,10 +1194,23 @@ static void text_getrect(t_gobj *z, t_glist *glist, if (x->te_type == T_ATOM && x->te_width > 0) { + //fprintf(stderr," T_ATOM\n"); int font = glist_getfont(glist); int fontwidth = sys_fontwidth(font), fontheight = sys_fontheight(font); width = (x->te_width > 0 ? x->te_width : 6) * fontwidth + 2; height = fontheight + 3; /* borrowed from TMARGIN, etc, in g_rtext.c */ + } + else if (x->te_type == T_TEXT) + { + //fprintf(stderr," T_TEXT\n"); + t_rtext *y = glist_findrtext(glist, x); + if (y) { + width = rtext_width(y); + height = rtext_height(y); + } else { + width = height = 10; + } + //fprintf(stderr,"T_TEXT width=%d height=%d\n", width, height); } /* if we're invisible we don't know our size so we just lie about it. This is called on invisible boxes to establish order of inlets @@ -1219,7 +1232,7 @@ static void text_getrect(t_gobj *z, t_glist *glist, t_rtext *y = glist_findrtext(glist, x); width = rtext_width(y); - //fprintf(stderr,"width=%d\n", width); + //fprintf(stderr,"rtext_width=%d\n", width); /* now find if we have more inlets or outlets than what can comfortably fit and adjust accordingly @@ -1246,12 +1259,16 @@ static void text_getrect(t_gobj *z, t_glist *glist, } height = rtext_height(y) - (iscomment << 1); } - else width = height = 10; + else { + width = height = 10; + //fprintf(stderr," default\n"); + } x1 = text_xpix(x, glist); y1 = text_ypix(x, glist); x2 = x1 + width; y2 = y1 + height; - y1 += iscomment; + //x1 += iscomment*2; + //y1 += iscomment*6; *xp1 = x1; *yp1 = y1; *xp2 = x2; @@ -1418,7 +1435,7 @@ static void text_delete(t_gobj *z, t_glist *glist) static void text_vis(t_gobj *z, t_glist *glist, int vis) { - //fprintf(stderr,"text_vis\n"); + //fprintf(stderr,"text_vis %d\n", vis); t_text *x = (t_text *)z; #ifdef PDL2ORK @@ -1438,6 +1455,7 @@ static void text_vis(t_gobj *z, t_glist *glist, int vis) { if (gobj_shouldvis(&x->te_g, glist)) { + //fprintf(stderr," draw it\n"); t_rtext *y = glist_findrtext(glist, x); if (x->te_type == T_ATOM) glist_retext(glist, x); @@ -1451,6 +1469,7 @@ static void text_vis(t_gobj *z, t_glist *glist, int vis) t_rtext *y = glist_findrtext(glist, x); if (gobj_shouldvis(&x->te_g, glist)) { + //fprintf(stderr," erase it\n"); text_eraseborder(x, glist, rtext_gettag(y)); rtext_erase(y); } -- GitLab