Aha, sorry I didn't realise that you meant the pointer on the screen.

/Stefan

On Thu, Oct 23, 2008 at 10:05 AM, Joel Matthys <jwmatthys@yahoo.com> wrote:
Actually, this is an interesting question. Hid tracks mouse motion rather than mouse position, so it's not so easy to create a ChucK patch that depends on the mouse's position on the screen. (ie trigger a sound when the mouse is in the upper left hand corner.)

I modified the mouse.ck example below. It prompts you to enter the screen size (one could easily set this up as an argument; is there any way for ChucK to access this property without user input?) and calibrates the mouse position from the upper left hand corner.

This works fine if I move the mouse slowly, but it's not absolutely correlative to the pointer position on the screen. Any suggestions on how to refine this?

Joel

Chuck code follows:

// mouse-pos.ck

// make HidIn and HidMsg
Hid hi;
HidMsg msg;
// make ConsoleInput
ConsoleInput in;

// which mouse
0 => int device;
// get from command line
if( me.args() ) me.arg(0) => Std.atoi => device;

// open mouse 0, exit on fail
if( !hi.openMouse( device ) ) me.exit();
<<< "mouse '" + hi.name() + "' ready", "" >>>;

int atZero, mouseX, mouseY, screenWidth, screenHeight;

// prompt user to enter screen size
in.prompt( "enter screen width:" ) => now;
in.getLine() => Std.atoi => screenWidth;
in.prompt( "enter screen height:" ) => now;
in.getLine() => Std.atoi => screenHeight;
in.prompt( "mouse mouse to upper left corner and press enter.") => now;

/* alternative method - calibrate via mouse click

<<< "Move mouse to upper left corner and click" >>>;

while (!atZero)
{
  hi => now;
  while( hi.recv( msg ) )
  {
      if( msg.isButtonDown() )
      {
          1 => atZero;
      }
  }
}*/

// infinite event loop
while( true )
{
  // wait on HidIn as event
  hi => now;

  // messages received
  while( hi.recv( msg ) )
  {
      // mouse motion
      if( msg.isMouseMotion() )
      {
          if( msg.deltaX )
          {
              msg.deltaX +=> mouseX;
          }
          if( msg.deltaY )
          {
              msg.deltaY +=> mouseY;
          }
      }
            // keep values within area of screen
      constrain(mouseX, 0, screenWidth) $ int => mouseX;
      constrain(mouseY, 0, screenHeight) $ int => mouseY;
            <<< "Mouse Position:",mouseX,mouseY>>>;
  }
}

fun float constrain (float test, float v1, float v2)
{
  Math.min (v1,v2) => float bottom;
  Math.max (v1,v2) => float top;
  Math.max (test, bottom) => test;
  Math.min (test, top) => test;
  return test;
}

// end of mouse-pos.ck


eduard aylon wrote:
Hello list,

is there a way to track y-position of the mouse pointer. It's not in the manual.
I know I can track the x-position with HidMsg.fdata

thanks,

eduard
_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users



_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users



--
Release me, insect, or I will destroy the Cosmos!