// onColor is called with null value when mouse moves outside of image surface svoid imageSurfaceColorPicker(ImageSurface is, VF1 onColor) { if (is == null || onColor == 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) { if (e == null) callF(onColor, null); else callF(onColor, getImage(is.pointFromEvent(e)); } }; c.addMouseMotionListener(ma); c.addMouseListener(ma); } }