sclass ImageSurfaceDragger extends MouseAdapter { sbool debug = true; ImageSurface is; int dx, dy; *(ImageSurface *is) { if (containsInstance(is.tools, ImageSurfaceDragger)) ret; print("Loading ImageSurfaceDragger"); ifclass ImageSurfaceSelector for (ImageSurfaceSelector s : collectInstances(is.tools, ImageSurfaceSelector)) { is.removeMouseListener(s); is.removeMouseMotionListener(this); is.tools.remove(s); } endif is.tools.add(this); is.addMouseListener(this); is.addMouseMotionListener(this); } public void mousePressed(MouseEvent e) { if (debug) print("ImageSurfaceDragger: btn " + e.getButton()); if (e.getButton() == MouseEvent.BUTTON1) { Pt p = is.pointFromEvent(e); dx = p.x; dy = p.y; if (debug) print("ImageSurfaceDragger: " + dx + "/" + dy); } } public void mouseDragged(MouseEvent e) { JScrollPane sp = enclosingScrollPane(is); if (sp == null) ret; Pt p = is.pointFromEvent(e); if (debug) print("ImageSurfaceDragger: drag " + p.x + "/" + p.y); sp.getHorizontalScrollBar().setValue(dx-p.x); sp.getVerticalScrollBar().setValue(dy-p.y); } public void mouseReleased(MouseEvent e) { mouseDragged(e); } }