// 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, (RGB) null); else callF(onColor, bufferedImage_getRGB(is.getImage(), is.pointFromEvent(e))); } }; is.addMouseMotionListener(ma); is.addMouseListener(ma); } }