sinterface Renderable extends MakesBufferedImage, G2Drawable { void renderOn(Graphics2D g, int w, int h); default Pt preferredSize() { ret pt(640, 480); } default int getWidth() { ret preferredSize().x; } default int getHeight() { ret preferredSize().y; } default BufferedImage getBufferedImage aka render() { ret renderableToImage(this); } // unknown size default void drawOn(Graphics2D g) { renderOn(g, -1, -1); } }