@Override
    public void moveShape(  int incX, int incY, 
                            Rectangle2D.Double poseArea) 
    {
        // MOVE THE SHAPE
        geometry.x1 += incX;
        geometry.y1 += incY;
        geometry.x2 += incX;
        geometry.y2 += incY;
        
        // AND NOW CLAMP IT SO IT DOESN'T GO OFF THE EDGE
        
        // CLAMP ON LEFT SIDE
        if (geometry.x1 < 0)
        {
            geometry.x1 = 0;
            geometry.x2 -= incX; //undo change
            geometry.y2 -= incY;
            geometry.y1 -= incY;
        }
        if (geometry.x2 < 0) 
        {
            geometry.x2 = 0;
            geometry.y1 -= incY;
            geometry.x1 -= incX;
            geometry.y2 -= incY;
        }
        // CLAMP ON RIGHT
        if (geometry.x1 > poseArea.width)
        {
            geometry.x1 = poseArea.width;
            geometry.x2 -= incX; //undo change
            geometry.y2 -= incY;
            geometry.y1 -= incY;
        }
        if (geometry.x2 > poseArea.width)
        {
            geometry.x2 = poseArea.width;
            geometry.y1 -= incY;
            geometry.x1 -= incX;
            geometry.y2 -= incY;
        }
        // CLAMP ON TOP
        if (geometry.y1 < 0)
        {
            geometry.y1 = 0;
            geometry.y2 -= incY;
            geometry.x1 -= incX;
            geometry.x2 -= incX;
        }
        if (geometry.y2 < 0 )
        {
            geometry.y2 = 0;
            geometry.y1 -= incY;
            geometry.x1 -= incX;
            geometry.x2 -= incX;
        }
        // CLAMP ON BOTTOM
        if (geometry.y1 > poseArea.height)
        {
            geometry.y1 = poseArea.height;
            geometry.y2 -= incY;
            geometry.x1 -= incX;
            geometry.x2 -= incX;
        }
        if (geometry.y2 > poseArea.height)
        {
            geometry.y2 = poseArea.height;
            geometry.y1 -= incY;
            geometry.x1 -= incX;
            geometry.x2 -= incX;
        }
    }