> The if() test should probably be:
> 
> 
> if( size.x <= event.GetX() || size.y <= event.GetY()
>      || event.GetX() < 0  || event.GetY() < 0 )


Fine, that works.

But let's remember that there are workspace limits defined by how many 
nanometers can fit
in a 32 bit integer workspace.

I don't think any of our solutions yet are optimal.

The mouse during the drag, can be in any of 4 corners of the block, no?

If the mouse is in lower right corner, and you drag the block up and to the 
left, there
are two problems:

a) you don't get a pan until the block is off client (and so is the mouse).

b) it is possible to position this block off workspace, such that you can no 
longer show
either the board nor the block if moved up and up and left and left to the 
extreme end of
mouse travel.  Since the mouse travel is used in workspace limit calculation, 
and not the
objects in the block, then the block ends up being positioned off the 
workspace, I guess
at a large negative number, less than -MAX_INT


There are going to be 4 variations on problem b), for the four corners of the 
block.

So a comprehensive solution is going to take more time.  We've got to always 
keep objects
in the allowed workspace coordinate system.  So panning needs more work.   At 
the place
where we ask the mouse to be centered, we do end of travel limit detection and 
enforce
limits.  In that same place, while dragging a block we have to use the 
appropriate block
corner instead of the the mouse position.


Dick








_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to