Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1605
Modified Files: Tag: desiredata desire.c Log Message: fixed bugs in t_boxes and pd_scanargs; wrote some of t_gop_filtre
Index: desire.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v retrieving revision 1.1.2.217.2.231 retrieving revision 1.1.2.217.2.232 diff -C2 -d -r1.1.2.217.2.231 -r1.1.2.217.2.232 *** desire.c 19 Aug 2007 05:04:01 -0000 1.1.2.217.2.231 --- desire.c 20 Aug 2007 03:46:28 -0000 1.1.2.217.2.232 *************** *** 98,102 **** while (iter->second != x) iter++; iter++; ! return iter->second; } void add(t_gobj *x) {map.insert(KV(x->dix->index,x)); invariant();} --- 98,102 ---- while (iter->second != x) iter++; iter++; ! return iter == map.end() ? 0 : iter->second; } void add(t_gobj *x) {map.insert(KV(x->dix->index,x)); invariant();} *************** *** 111,114 **** --- 111,117 ---- }
+ void boxes_notice(t_boxes *self, t_gobj *origin, int argc, t_atom *argv) { + } + void boxes_free(t_boxes *self) {self->~t_boxes();}
*************** *** 120,131 ****
struct t_gop_filtre : t_gobj { };
! t_gobj *gop_filtre_new() { t_gop_filtre *self = (t_gop_filtre *)pd_new(gop_filtre_class); new(self) t_gop_filtre; return self; }
//-------------------------------------------------------------------------- // t_appendix: an extension to t_gobj made by matju so that all t_gobj's may have new fields --- 123,157 ----
struct t_gop_filtre : t_gobj { + t_canvas *canvas; };
! // test for half-open interval membership ! bool inside (int x, int x0, int x1) {return x0<=x && x<x1;} ! ! /* this method is always called when a canvas is in gop mode so we don't check for this */ ! /* it doesn't filtre out all that needs to be filtred out, but does not filtre out anything that has to stay */ ! void gop_filtre_notice(t_gop_filtre *self,t_gobj *origin, int argc, t_atom *argv) { ! /* here, assume that the canvas *is* a gop; else we wouldn't be in this method. */ ! t_object *o = (t_object *)origin; ! t_canvas *c = self->canvas; ! if (c->goprect) { ! if (!inside(o->x, c->xmargin, c->xmargin + c->pixwidth )) return; ! if (!inside(o->y, c->ymargin, c->ymargin + c->pixheight)) return; ! } else { ! ! } ! gobj_changed3(self,origin,argc,argv); ! } ! ! t_gobj *gop_filtre_new(t_canvas *canvas) { t_gop_filtre *self = (t_gop_filtre *)pd_new(gop_filtre_class); new(self) t_gop_filtre; + self->canvas = canvas; + gobj_subscribe(canvas->boxes,self); return self; }
+ void gop_filtre_free(t_boxes *self) {} + //-------------------------------------------------------------------------- // t_appendix: an extension to t_gobj made by matju so that all t_gobj's may have new fields *************** *** 2204,2224 **** }
- /* get the window location in pixels of a "text" object. The object's x and y positions are in pixels - when the canvas they're in is toplevel. Otherwise, if it's a new-style graph-on-parent (so goprect - is set) we use the offset into the framing subrectangle as an offset into the parent rectangle. - Finally, it might be an old, proportional-style GOP. In this case we do a coordinate transformation. */ - static int text_xpix(t_text *x, t_canvas *canvas) { - float width = canvas->x2-canvas->x1; - if (canvas->havewindow || !canvas->gop) return x->x; - if (canvas->goprect) return canvas->x+x->x-canvas->xmargin; - return canvas_xtopixels(canvas, canvas->x1 + width * x->x / (canvas->screenx2-canvas->screenx1)); - } - static int text_ypix(t_text *x, t_canvas *canvas) { - float height = canvas->y2-canvas->y1; - if (canvas->havewindow || !canvas->gop) return x->y; - if (canvas->goprect) return canvas->y+x->y-canvas->ymargin; - return canvas_ytopixels(canvas, canvas->y1 + height* x->y / (canvas->screeny2-canvas->screeny1)); - } - /* --------------------------- widget behavior ------------------- */ /* don't remove this code yet: has to be rewritten in tcl */ --- 2230,2233 ---- *************** *** 2298,2303 **** #endif
! /* get the graph's rectangle, not counting extra swelling for controls ! to keep them inside the graph. This is the "logical" pixel size. */ static void graph_graphrect(t_gobj *z, t_canvas *canvas, int *xp1, int *yp1, int *xp2, int *yp2) { t_canvas *x = (t_canvas *)z; --- 2307,2322 ---- #endif
! static int text_xpix(t_text *x, t_canvas *canvas) { ! float width = canvas->x2-canvas->x1; ! if (canvas->havewindow || !canvas->gop) return x->x; ! if (canvas->goprect) return canvas->x+x->x-canvas->xmargin; ! return canvas_xtopixels(canvas, canvas->x1 + width * x->x / (canvas->screenx2-canvas->screenx1)); ! } ! static int text_ypix(t_text *x, t_canvas *canvas) { ! float height = canvas->y2-canvas->y1; ! if (canvas->havewindow || !canvas->gop) return x->y; ! if (canvas->goprect) return canvas->y+x->y-canvas->ymargin; ! return canvas_ytopixels(canvas, canvas->y1 + height* x->y / (canvas->screeny2-canvas->screeny1)); ! } static void graph_graphrect(t_gobj *z, t_canvas *canvas, int *xp1, int *yp1, int *xp2, int *yp2) { t_canvas *x = (t_canvas *)z; *************** *** 5721,5739 **** int pd_vscanargs(int argc, t_atom *argv, char *fmt, va_list val) { int optional=0; ! int i; ! for (i=0; i<argc; i++) { switch (fmt[i]) { ! case 0 : goto err; /* too many args */ case '*': goto break1; /* rest is any type */ case 'F': case 'f': case 'd': case 'i': case 'c': case 'b': ! if (!IS_A_FLOAT(argv,i)) goto err; break; ! case 'S': case 's': if (!IS_A_SYMBOL(argv,i)) goto err; break; case '?': break; ! case 'a': if (!IS_A_FLOAT(argv,i) && !IS_A_SYMBOL(argv,i)) goto err; break; case ';': optional=1; break; ! default: post("WARNING: bug using pd_scanargs()"); goto err; /* WHAT? */ } } ! if (fmt[i]!=0 && !optional) goto err; /* not enough args */ break1: i=0; --- 5740,5763 ---- int pd_vscanargs(int argc, t_atom *argv, char *fmt, va_list val) { int optional=0; ! int i,j=0; ! for (i=0; fmt[i]; i++) { switch (fmt[i]) { ! case 0: error("too many args"); return 0; case '*': goto break1; /* rest is any type */ case 'F': case 'f': case 'd': case 'i': case 'c': case 'b': ! if (!IS_A_FLOAT(argv,j)) {error("expected float in $%d",i+1); return 0;} ! j++; break; ! case 'S': case 's': ! if (!IS_A_SYMBOL(argv,j)) {error("expected symbol in $%d",i+1); return 0;} ! j++; break; case '?': break; ! case 'a': ! if (!IS_A_FLOAT(argv,j) && !IS_A_SYMBOL(argv,j)) {error("expected float or symbol in $%d",i+1); return 0;} ! j++; break; case ';': optional=1; break; ! default: error("bad format string"); return 0; } } ! if (j<argc && !optional) {error("not enough args"); return 0;} break1: i=0; *************** *** 5760,5764 **** } break; ! default: post("WARNING: bug using pd_scanargs()"); goto err; /* WHAT? */ } i++; --- 5784,5788 ---- } break; ! default: post("WARNING: bug using pd_scanargs()"); return 0; /* hmm? */ } i++; *************** *** 5766,5773 **** break2: return 1; - err: - /* maybe it should fill in some default values */ - //post("WARNING: pd_scanargs failed; fmt=%s, i=%d",fmt,i); - return 0; }
--- 5790,5793 ---- *************** *** 6053,6057 **** bng_check_minmax(x); outlet_new(x, &s_bang); ! bng_reload(x,0,argc,argv); return x; } --- 6073,6077 ---- bng_check_minmax(x); outlet_new(x, &s_bang); ! if (argc) bng_reload(x,0,argc,argv); return x; } *************** *** 6828,6832 ****
extern "C" void boxes_init() { ! boxes_class = class_new2("__boxes",boxes_new,boxes_free,sizeof(t_boxes),CLASS_GOBJ,""); }
--- 6848,6856 ----
extern "C" void boxes_init() { ! t_class *c; ! c = boxes_class = class_new2("__boxes" ,0/*boxes_new*/ , boxes_free,sizeof(t_boxes),CLASS_GOBJ,""); ! class_setnotice(c,t_notice(boxes_notice)); ! c = gop_filtre_class = class_new2("__gop_filtre",0/*gop_filtre_new*/,gop_filtre_free,sizeof(t_boxes),CLASS_GOBJ,""); ! class_setnotice(c,t_notice(gop_filtre_notice)); }