// combines mousePressed, mouseDragged and mouseReleased // left button only // f : voidfunc(Pt) - point can be null, then mouse was released static void imageSurfaceOnMouseDrag(final ImageSurface is, final O f) { swing { MouseAdapter ma = new MouseAdapter { bool in; public void mouseDragged(MouseEvent e) { if (!in) ret; pcallF(f, is.pointFromEvent(e)); } public void mousePressed(MouseEvent e) { if (e.getButton() != MouseEvent.BUTTON1) ret; in = true; pcallF(f, is.pointFromEvent(e)); } public void mouseReleased(MouseEvent e) { if (e.getButton() != MouseEvent.BUTTON1) ret; if (!in) ret; in = false; pcallF(f, (Pt) null); } }; is.addMouseMotionListener(ma); is.addMouseListener(ma); } }