[PD-cvs] externals/hcs cursor.c,1.1,1.2

Hans-Christoph Steiner eighthave at users.sourceforge.net
Mon Oct 29 19:58:44 CET 2007


Update of /cvsroot/pure-data/externals/hcs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1599/hcs

Modified Files:
	cursor.c 
Log Message:


Following this thread:

http://lists.puredata.info/pipermail/pd-dev/2007-10/009797.html

I have changed the save functions so that they will save the name of the
object that it was actually instantiated with.  This allows objects with
savefns to work properly with namespaces.

This is a fix for this bug:
http://sourceforge.net/tracker/index.php?&aid=1818219&group_id=55736&atid=478070



Index: cursor.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/cursor.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** cursor.c	17 Mar 2006 04:49:48 -0000	1.1
--- cursor.c	29 Oct 2007 18:58:42 -0000	1.2
***************
*** 1,286 ****
- /* (C) Guenter Geiger <geiger at xdv.org> */
- 
- 
- #include <m_pd.h>
- #include "g_canvas.h"
  
! /* ------------------------ cursor ----------------------------- */
! 
! 
! #define BACKGROUNDCOLOR "grey"
  
! #define DEFAULTSIZE 80
  
! static t_class *cursor_class;
  
! typedef struct _cursor
! {
!      t_object x_obj;
!      t_glist * x_glist;
!      t_outlet* out2;
!      int x_width;
!      int x_height;
!      int x;
!      int y;
  } t_cursor;
  
! /* widget helper functions */
! 
! void cursor_drawme(t_cursor *x, t_glist *glist, int firsttime)
! {
!      if (firsttime) {
! 	  sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xS -fill %s\n",
! 		   glist_getcanvas(glist),
! 		   x->x_obj.te_xpix, x->x_obj.te_ypix,
! 		   x->x_obj.te_xpix + x->x_width, x->x_obj.te_ypix + x->x_height,
! 		   x,BACKGROUNDCOLOR);
!      }     
!      else {
! 	  sys_vgui(".x%x.c coords %xS \
! %d %d %d %d\n",
! 		   glist_getcanvas(glist), x,
! 		   x->x_obj.te_xpix, x->x_obj.te_ypix,
! 		   x->x_obj.te_xpix + x->x_width, x->x_obj.te_ypix + x->x_height);
!      }
! 
!      {
!        /* outlets */
! 	  int n = 2;
! 	  int nplus, i;
! 	  nplus = (n == 1 ? 1 : n-1);
! 	  for (i = 0; i < n; i++)
! 	  {
! 	       int onset = x->x_obj.te_xpix + (x->x_width - IOWIDTH) * i / nplus;
! 	       if (firsttime)
! 		    sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xo%d\n",
! 			     glist_getcanvas(glist),
! 			     onset, x->x_obj.te_ypix + x->x_height - 1,
! 			     onset + IOWIDTH, x->x_obj.te_ypix + x->x_height,
! 			     x, i);
! 	       else
! 		    sys_vgui(".x%x.c coords %xo%d %d %d %d %d\n",
! 			     glist_getcanvas(glist), x, i,
! 			     onset, x->x_obj.te_ypix + x->x_height - 1,
! 			     onset + IOWIDTH, x->x_obj.te_ypix + x->x_height);
! 	  }
! 	  /* inlets */
! 	  n = 0; 
! 	  nplus = (n == 1 ? 1 : n-1);
! 	  for (i = 0; i < n; i++)
! 	  {
! 	       int onset = x->x_obj.te_xpix + (x->x_width - IOWIDTH) * i / nplus;
! 	       if (firsttime)
! 		    sys_vgui(".x%x.c create rectangle %d %d %d %d -tags %xi%d\n",
! 			     glist_getcanvas(glist),
! 			     onset, x->x_obj.te_ypix,
! 			     onset + IOWIDTH, x->x_obj.te_ypix + 1,
! 			     x, i);
! 	       else
! 		    sys_vgui(".x%x.c coords %xi%d %d %d %d %d\n",
! 			     glist_getcanvas(glist), x, i,
! 			     onset, x->x_obj.te_ypix,
! 			     onset + IOWIDTH, x->x_obj.te_ypix + 1);
! 	       
! 	  }
!      }
! 
! }
! 
! 
! 
! 
! void cursor_erase(t_cursor* x,t_glist* glist)
! {
!      int n;
!      sys_vgui(".x%x.c delete %xS\n",
! 	      glist_getcanvas(glist), x);
!      n = 2;
!      while (n--) {
! 	  sys_vgui(".x%x.c delete %xo%d\n",glist_getcanvas(glist),x,n);
!      }
! }
! 	
! 
! 
! /* ------------------------ cursor widgetbehaviour----------------------------- */
! 
! 
! static void cursor_getrect(t_gobj *z, t_glist *owner,
!     int *xp1, int *yp1, int *xp2, int *yp2)
! {
!     int width, height;
!     t_cursor* s = (t_cursor*)z;
! 
! 
!     width = s->x_width;
!     height = s->x_height;
!     *xp1 = s->x_obj.te_xpix;
!     *yp1 = s->x_obj.te_ypix;
!     *xp2 = s->x_obj.te_xpix + width;
!     *yp2 = s->x_obj.te_ypix + height;
! }
! 
! static void cursor_displace(t_gobj *z, t_glist *glist,
!     int dx, int dy)
! {
!     t_cursor *x = (t_cursor *)z;
!     x->x_obj.te_xpix += dx;
!     x->x_obj.te_ypix += dy;
!     cursor_drawme(x, glist, 0);
!     canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
! }
! 
! static void cursor_select(t_gobj *z, t_glist *glist, int state)
! {
!      t_cursor *x = (t_cursor *)z;
!      sys_vgui(".x%x.c itemconfigure %xS -fill %s\n", glist, 
! 	     x, (state? "blue" : BACKGROUNDCOLOR));
! }
  
  static void cursor_motion(t_cursor *x, t_floatarg dx, t_floatarg dy)
  {
-   x->x += dx;
-   x->y += dy;
-   outlet_float(x->out2,x->y);
-   outlet_float(x->x_obj.ob_outlet,x->x);
- }
- 
- static void cursor_start(t_cursor *x)
- {
- 	glist_grab(x->x_glist, &x->x_obj.te_g, (t_glistmotionfn) cursor_motion,
- 			   (t_glistkeyfn) NULL, NULL, NULL);
- 	
- /*     x->x = xpos - x->x_obj.te_xpix; */
- /*     x->y = ypos - x->x_obj.te_ypix; */
- /*     outlet_float(x->out2,x->y); */
- /*     outlet_float(x->x_obj.ob_outlet,x->x); */
- }
- 
- static void cursor_activate(t_gobj *z, t_glist *glist, int state)
- {
- /*    t_text *x = (t_text *)z;
-     t_rtext *y = glist_findrtext(glist, x);
-     if (z->g_pd != gatom_class) rtext_activate(y, state);*/
- 	t_cursor *x = (t_cursor *) z;
- 	cursor_start(x);
- }
  
- static void cursor_delete(t_gobj *z, t_glist *glist)
- {
-     t_text *x = (t_text *)z;
-     canvas_deletelinesfor(glist_getcanvas(glist), x);
  }
  
!        
! static void cursor_vis(t_gobj *z, t_glist *glist, int vis)
! {
!     t_cursor* s = (t_cursor*)z;
!     if (vis)
! 	 cursor_drawme(s, glist, 1);
!     else
! 	 cursor_erase(s,glist);
! }
! 
! /* can we use the normal text save function ?? */
! 
! static void cursor_save(t_gobj *z, t_binbuf *b)
  {
-     t_cursor *x = (t_cursor *)z;
-     binbuf_addv(b, "ssiisii", gensym("#X"),gensym("obj"),
- 		(t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix,  
- 		gensym("cursor"),x->x_width,x->x_height);
-     binbuf_addv(b, ";");
- }
- 
- 
- t_widgetbehavior   cursor_widgetbehavior;
  
- void cursor_key(t_cursor *x, t_floatarg f)
- {
-   post("key");
  }
  
! 
! 
! static void cursor_click(t_cursor *x,
!     t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl,
!     t_floatarg alt)
  {
-     glist_grab(x->x_glist, &x->x_obj.te_g, (t_glistmotionfn) cursor_motion,
- 		(t_glistkeyfn) NULL, xpos, ypos);
  
-     x->x = xpos - x->x_obj.te_xpix;
-     x->y = ypos - x->x_obj.te_ypix;
-     outlet_float(x->out2,x->y);
-     outlet_float(x->x_obj.ob_outlet,x->x);
  }
  
! static int cursor_newclick(t_gobj *z, struct _glist *glist,
!     int xpix, int ypix, int shift, int alt, int dbl, int doit)
  {
!     	if (doit)
! 	    cursor_click((t_cursor *)z, (t_floatarg)xpix, (t_floatarg)ypix,
! 	    	(t_floatarg)shift, 0, (t_floatarg)alt);
! 	return (1);
! }
  
- void cursor_size(t_cursor* x,t_floatarg w,t_floatarg h) {
-      x->x_width = w;
-      x->x_height = h;
-      cursor_drawme(x, x->x_glist, 0);
- }
  
! static void cursor_setwidget(void)
! {
!     cursor_widgetbehavior.w_getrectfn =     cursor_getrect;
!     cursor_widgetbehavior.w_displacefn =    cursor_displace;
!     cursor_widgetbehavior.w_selectfn =   cursor_select;
!     cursor_widgetbehavior.w_activatefn =   cursor_activate;
!     cursor_widgetbehavior.w_deletefn =   cursor_delete;
!     cursor_widgetbehavior.w_visfn =   cursor_vis;
!     cursor_widgetbehavior.w_clickfn = cursor_newclick;
  }
  
! 
! static void *cursor_new(t_floatarg h,t_floatarg o)
  {
-     t_cursor *x = (t_cursor *)pd_new(cursor_class);
- 
-     x->x_glist = (t_glist*) canvas_getcurrent();
-     if (h) x->x_width = h;
-     else
- 	 x->x_width = DEFAULTSIZE;
- 
-     if (o) x->x_height = o;
-     else
- 	 x->x_height = DEFAULTSIZE;
  
-     outlet_new(&x->x_obj, &s_float);
-     x->out2 = outlet_new(&x->x_obj, &s_float);
- 	
-     return (x);
  }
  
  void cursor_setup(void)
  {
!     cursor_class = class_new(gensym("cursor"), (t_newmethod)cursor_new, 0,
! 				sizeof(t_cursor),0, A_DEFFLOAT,A_DEFFLOAT,0);
! 
!     class_addcreator((t_newmethod)cursor_new,gensym("bng"),A_DEFSYM,A_DEFFLOAT,A_DEFFLOAT,A_GIMME,0);
! 
!     class_addmethod(cursor_class, (t_method)cursor_click, gensym("click"),
!     	A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
!     class_addmethod(cursor_class, (t_method)cursor_size, gensym("size"),
!     	A_FLOAT, A_FLOAT, 0);
! 
! 	class_addmethod(cursor_class,(t_method) cursor_start,gensym("start"),0);
! /* 	class_addfloat(cursor_class,(t_method) cursor_float); */
  
!     cursor_setwidget();
!     class_setwidget(cursor_class,&cursor_widgetbehavior);
! #if PD_MINOR_VERSION >= 37
!     class_setsavefn(cursor_class,&cursor_save);
! #endif
  }
- 
- 
--- 1,63 ----
  
! /* this object should probably register a e_motionfn callback with the root
!  * canvas so that it is guaranteed to get the mouse motion data regardless of
!  * whether the current canvas is visible.  Check g_canvas.h for info.*/
  
! // list of Tk cursors: http://www.die.net/doc/linux/man/mann/cursors.n.html
  
! #include "m_pd.h"
! #include "g_canvas.h"
  
! typedef struct _cursor {
! 	t_object            x_obj;
! 	t_outlet            *x_data_outlet;
! 	t_outlet            *x_status_outlet;
  } t_cursor;
  
! t_widgetbehavior cursor_widgetbehavior;
! static t_class *cursor_class;
  
  static void cursor_motion(t_cursor *x, t_floatarg dx, t_floatarg dy)
  {
  
  }
  
! static void cursor_bang(t_cursor *x)
  {
  
  }
  
! static void cursor_float(t_cursor *x, t_floatarg f)
  {
  
  }
  
! static void *cursor_new(t_symbol *s, int argc, t_atom *argv)
  {
!     t_cursor *x = (t_cursor *)pd_new(cursor_class);
  
  
!     return (x);
  }
  
! static void cursor_free(t_cursor *x)
  {
  
  }
  
  void cursor_setup(void)
  {
!     cursor_class = class_new(gensym("cursor"), (t_newmethod)cursor_new,
!                               (t_method)cursor_free, sizeof(t_cursor), 0, A_GIMME, 0);
!     class_addbang(cursor_class, cursor_bang);
!     class_addfloat(cursor_class, cursor_float);
  
!     cursor_widgetbehavior.w_getrectfn =    NULL;
!     cursor_widgetbehavior.w_displacefn =   NULL;
!     cursor_widgetbehavior.w_selectfn =     NULL;
!     cursor_widgetbehavior.w_activatefn =   NULL;
!     cursor_widgetbehavior.w_deletefn =     NULL;
!     cursor_widgetbehavior.w_visfn =        NULL;
!     cursor_widgetbehavior.w_clickfn =      NULL;
!     class_setwidget(cursor_class, &cursor_widgetbehavior);
  }





More information about the Pd-cvs mailing list