Greetings

This is my annual mailing on this topic. I won't bore you with why I need to do this deprecated act, but I do.

Basically I need the pointer to refuse to move outside a rect, and just 'bounce' against the edge. No recoil or anything fancy, just stop until the user moves elsewhere with the rect. I had a script that worked in a standalone in 1.1.1. It was inelegant, but effectively. It became painfully slow and jerky in 2.x.

I posted to this list, and someone came up with a demon script (a variant of what follows). Can't remember who it was, but thanks again. I tested it in an empty stack, and it worked. Months later I come to actually implement it in my project, and can I get it to work?

The script is as follows:

on mouseMove X,Y
  --if button "constrain" is visible then
    put the rect of fld "container" into SrcImageRect
put globalloc((item 1 of SrcImageRect) & "," & (item 2 of SrcImageRect)), globalloc((item 3 of SrcImageRect) & "," & (item 4 of SrcImageRect)) into Fred
    put min (item 3 of Fred - 4, max (item 1 of Fred + 4, X)) into X
    put min (item 4 of Fred - 4, max (item 2 of Fred + 4, Y)) into Y
    get the localloc of (X,Y)
    set the screenMouseLoc to it
  --end if
end mouseMove


The explanation which accompanied the original script is :

> If the mouseLoc is within the specified rectangle, the mouse's X co-ord > will be less than item 3 of the rect, and greater than item 1 of the rect. Thus, > max (item 1 of rect, the mouse X) will always result in a number *at least* > as large as that item 1, and min (item 3 of rect, the mouse Y) will always > result in a number *no greater than* that item 3. Plug the results of the max into > a min (sorry about how that sounds, but you get the idea, right?), and you
> end up with a number that *must* be somewhere between item 1 of the
> rect and item 3 of the rect.Something similar applies to the mouse's Y co-ord, and items 2 and
> 4 of the rect.

There are 2 issues. The first is that if I uncomment the 'if then', whatever the visible of the button "constrain", nothing happens. Pointer moves freely about the screen.

Commenting out the 'if then' results in a pointer which won't enter the stack window (the field "container" is much smaller than the stack), but jumps to a localloc of 121,-2.

I have modified the original script by adding in the globalloc bit to get round a bug using the rect directly (thank you Mr Jimmieson). I think this was present in 2.2, and doesn't seem to be completely fixed in 2.7.2. if I miss the globalloc conversion out, the pointer dances around somewhere between the origin of the screen and the stack.

I have a hunch I am not properly disentangling local and global locs, but I can't see where.

Best Wishes,

David Glasgow
Carlton Glasgow Partnership

http://www.i-psych.co.uk
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to