// onHover is called with null value when mouse moves outside of image surface // onHover receives image coordinates svoid imageSurfaceOnHover(ImageSurface is, VF1 onHover) { if (is == null || onHover == null) ret; swing { MouseAdapter ma = new MouseAdapter { public void mouseMoved(MouseEvent e) { pick(e); } public void mouseEntered(MouseEvent e) { pick(e); } public void mouseExited(MouseEvent e) { pick(null); } void pick(MouseEvent e) pcall { callF(onHover, e == null ? (Pt) null : is.pointFromEvent(e)); } }; is.addMouseMotionListener(ma); is.addMouseListener(ma); } } svoid imageSurfaceOnHover(ImageSurface is, IVF1 onHover) { imageSurfaceOnHover(is, toVF1(onHover)); }