public void processMouseReleased(int x, int y)
    {
        // ARE WE COMPLETE MAKING OUR SHAPE?
        if (state == PoseurState.COMPLETE_SHAPE_STATE)
        {
            // WE HAVE TO USE POSE SPACE COORDINATES
            Rectangle2D poseArea = zoomableCanvasState.getPoseArea();
            float zoomLevel = zoomableCanvasState.getZoomLevel();
            int poseSpaceX = (int)((x - poseArea.getX()) / zoomLevel);
            int poseSpaceY = (int)((y - poseArea.getY()) / zoomLevel);
            lastMouseDraggedX = x;
            lastMouseDraggedY = y;
        
            // IF WE'RE NOT IN THE POSE AREA, WE'RE NOT MAKING A SHAPE
            if (    (poseSpaceX < 0) ||
                    (poseSpaceY < 0) ||
                    (poseSpaceX > poseArea.getWidth()) ||
                    (poseSpaceY > poseArea.getHeight()))
            {
                setState(PoseurState.CREATE_SHAPE_STATE);
                shapeInProgress = null;
                return;
            }

            // ASK THE SHAPE TO UPDATE ITSELF BASE ON WHERE ON
            // THE POSE THE MOUSE BUTTON WAS RELEASED
            if (!shapeInProgress.completesValidShape(poseSpaceX, poseSpaceY))
            {
                shapeInProgress = null;
                setState(PoseurState.CREATE_SHAPE_STATE);
            }
            else
            {
                // OUR LITTLE SHAPE HAS GROWN UP
                pose.addShape(shapeInProgress);
                selectedShape = shapeInProgress;
                shapeInProgress = null;
                
                // WE CAN DRAW ANOTHER ONE NOW
                setState(PoseurState.CREATE_SHAPE_STATE);
                
                // REPAINT OF COURSE
                repaintCanvases();
            }
        } 
        else if (state == PoseurState.DRAG_SHAPE_STATE)
        {
            setState(PoseurState.SHAPE_SELECTED_STATE);
        }
    }