sclass ImageSurfaceScribbleTool extends ImageSurfaceMouseHandler { settable Stroke stroke = new BasicStroke(5); settable Color color = Color.black; Pt lastPt; *(ImageSurface is) { if (containsInstance(is.tools, ImageSurfaceSelector)) ret; register(is); } public void mousePressed(MouseEvent evt) { if (verbose) print("mousePressed"); if (evt.getButton() != MouseEvent.BUTTON1) return; lastPt = getPt(evt); drawPoint(lastPt); } public void mouseDragged aka mouseReleased(MouseEvent e) { if (lastPt == null) ret; Pt p = getPt(e); if (!eq(p, lastP)) drawLine(lastPt, p); lastPt = p; is.repaint(); // That's gonna be slow... } void drawPoint(Pt p) { drawLine(p, p); } void drawLine(Pt a, Pt b) { Graphics2D g = getImage().createGraphics(); g.setStroke(stroke); g.setColor(color); g.drawLine(a, b); g.dispose(); } }