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

Hans-Christoph Steiner eighthave at users.sourceforge.net
Wed Oct 31 08:12:13 CET 2007


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

Modified Files:
	cursor.c cursor-help.pd 
Log Message:
first working sketch of the cursor object getting data from the system mouse pointer;  It works, but it only reports for the current canvas, not all teh time.  I need to dive in deeper to Krzysztof's tricks

Index: cursor-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/cursor-help.pd,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** cursor-help.pd	17 Mar 2006 04:49:48 -0000	1.1
--- cursor-help.pd	31 Oct 2007 07:12:11 -0000	1.2
***************
*** 1,17 ****
! #N canvas 0 22 454 304 10;
! #X msg 178 124 start;
! #X msg 227 124 stop;
! #X obj 142 123 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
! 1;
! #X obj 157 151 cursor 80 80;
! #X floatatom 99 242 5 0 0 0 - - -;
! #X floatatom 239 242 5 0 0 0 - - -;
! #X obj 131 258 print LEFT;
  #X obj 226 265 print RIGHT;
! #X connect 0 0 3 0;
! #X connect 1 0 3 0;
! #X connect 2 0 3 0;
! #X connect 3 0 4 0;
! #X connect 3 0 6 0;
! #X connect 3 1 5 0;
! #X connect 3 1 7 0;
--- 1,39 ----
! #N canvas 446 305 462 312 10;
! #X obj 105 271 print LEFT;
  #X obj 226 265 print RIGHT;
! #X obj 151 96 symbol;
! #X msg 149 61 boat;
! #X msg 109 61 clock;
! #X msg 245 61 dot;
! #X msg 275 61 dotbox;
! #X msg 322 61 gumby;
! #X msg 365 61 gobbler;
! #X msg 366 130 pirate;
! #X msg 366 87 mouse;
! #X msg 366 109 target;
! #X msg 366 151 pencil;
! #X msg 184 61 coffee_mug;
! #X msg 151 121 cursor \$1;
! #X obj 49 230 pddp/print;
! #X obj 186 205 pddp/print;
! #X obj 55 132 tgl 15 0 empty empty empty 0 -6 0 10 -262144 -1 -1 0
! 1;
! #X obj 124 174 cursor;
! #X connect 2 0 14 0;
! #X connect 3 0 2 0;
! #X connect 4 0 2 0;
! #X connect 5 0 2 0;
! #X connect 6 0 2 0;
! #X connect 7 0 2 0;
! #X connect 8 0 2 0;
! #X connect 9 0 2 0;
! #X connect 10 0 2 0;
! #X connect 11 0 2 0;
! #X connect 12 0 2 0;
! #X connect 13 0 2 0;
! #X connect 14 0 18 0;
! #X connect 17 0 18 0;
! #X connect 18 0 0 0;
! #X connect 18 0 15 0;
! #X connect 18 1 1 0;
! #X connect 18 1 16 0;

Index: cursor.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/cursor.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** cursor.c	29 Oct 2007 18:58:42 -0000	1.2
--- cursor.c	31 Oct 2007 07:12:11 -0000	1.3
***************
*** 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);
  }
--- 1,120 ----
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <m_pd.h>
+ #include <g_canvas.h>
  
! static t_symbol *button_symbol;
! static t_symbol *motion_symbol;
! static t_symbol *wheel_symbol;
  
! static t_class *cursor_class;
  
! typedef struct _cursor
! {
!     t_object x_obj;
!     t_symbol *receive_symbol;
!     t_symbol *current_cursor;
!     t_canvas *parent_canvas;
!     t_outlet *data_outlet;
!     t_outlet *status_outlet;
!     t_int optionc;
!     char *optionv[];
  } t_cursor;
  
! static void cursor_float(t_cursor *x, t_float f)
  {
+     if(f > 0)
+     {
+         sys_vgui("bind all <ButtonPress> {+pd [concat %s button %%b 1 \\;]}\n",
+             x->receive_symbol->s_name);
+         sys_vgui("bind all <ButtonRelease> {+pd [concat %s button %%b 0 \\;]}\n",
+             x->receive_symbol->s_name);
+         sys_vgui("bind all <Motion> {+pd [concat %s motion %%x %%y \\;]}\n",
+             x->receive_symbol->s_name);
+         sys_vgui("bind all <MouseWheel> {+pd [concat %s wheel %%D \\;]}\n",
+             x->receive_symbol->s_name);
+     }
+     else
+     {
+     }
+ }
  
+ static void cursor_cursor(t_cursor *x, t_symbol *s)
+ {
+     post("setting cursor: %s", s->s_name);
+     x->current_cursor = s;
+     post("set parent%lx [winfo parent .x%lx.c]; $parent%lx configure -cursor %s \n",
+              x, x->parent_canvas, x, s->s_name);
+     sys_vgui("set parent%lx [winfo parent .x%lx.c]; $parent%lx configure -cursor %s \n",
+              x, x->parent_canvas, x, s->s_name);
  }
  
! static void cursor_button_callback(t_cursor *x, t_float button, t_float state)
  {
+     t_atom output_atoms[2];
+     
+     SETFLOAT(output_atoms, button);
+     SETFLOAT(output_atoms + 1, state);
+     outlet_anything(x->data_outlet, button_symbol, 2, output_atoms);
+ }
  
+ static void cursor_motion_callback(t_cursor *x, t_float x_position, t_float y_position)
+ {
+     t_atom output_atoms[2];
+     
+     SETFLOAT(output_atoms, x_position);
+     SETFLOAT(output_atoms + 1, y_position);
+     outlet_anything(x->data_outlet, motion_symbol, 2, output_atoms);
  }
  
! static void cursor_wheel_callback(t_cursor *x, t_float f)
  {
+     t_atom output_atom;
+     
+     SETFLOAT(&output_atom, f);
+     outlet_anything(x->data_outlet, wheel_symbol, 1, &output_atom);
+ }
  
+ static void cursor_free(t_cursor *x)
+ {
+     pd_unbind(&x->x_obj.ob_pd, x->receive_symbol);
  }
  
  static void *cursor_new(t_symbol *s, int argc, t_atom *argv)
  {
+     char buf[MAXPDSTRING];
      t_cursor *x = (t_cursor *)pd_new(cursor_class);
  
+     x->parent_canvas = canvas_getcurrent();
  
!     sprintf(buf, "#%lx", (t_int)x);
!     x->receive_symbol = gensym(buf);
!     pd_bind(&x->x_obj.ob_pd, x->receive_symbol);
! 	x->data_outlet = outlet_new(&x->x_obj, 0);
! 	x->status_outlet = outlet_new(&x->x_obj, 0);
  
+     return(x);
  }
  
  void cursor_setup(void)
  {
!     cursor_class = class_new(gensym("cursor"),
!         (t_newmethod)cursor_new, (t_method)cursor_free,
!         sizeof(t_cursor), 0, 0);
  
!     class_addfloat(cursor_class, (t_method)cursor_float);
! 
!     class_addmethod(cursor_class, (t_method)cursor_cursor, 
!                     gensym("cursor"), A_DEFSYMBOL, 0);
!     class_addmethod(cursor_class, (t_method)cursor_button_callback, 
!                     gensym("button"), A_DEFFLOAT, A_DEFFLOAT, 0);
!     class_addmethod(cursor_class, (t_method)cursor_motion_callback, 
!                     gensym("motion"), A_DEFFLOAT, A_DEFFLOAT, 0);
!     class_addmethod(cursor_class, (t_method)cursor_wheel_callback, 
!                     gensym("wheel"), A_DEFFLOAT, 0);
! 
!     button_symbol = gensym("button");
!     motion_symbol = gensym("motion");
!     wheel_symbol = gensym("wheel");
  }





More information about the Pd-cvs mailing list