sclass RenderText { settable Color fg = Color.black; settable Color bg = Color.white; settable bool withLeading = true; settable Font font = sansSerifFont(20); settable float fontSize = 20; settable S text; FontMetrics fm; selfType setFont(S fontSnippetID) { ret setFont(loadFont_cached(fontSnippetID)); } Font scaledFont() { ret font.deriveFont(fontSize); } BufferedImage get(S text) { text(text); ret this!; } BufferedImage get() { fm = fontMetrics(font); int width = fm.stringWidth(text); if (width <= 0) null; int height = fm.getHeight(); int y = withLeading ? fm.getLeading() + fm.getMaxAscent() : fm.getAscent(); BufferedImage img = bufferedImageWithoutAlpha(width, height, bg); Graphics g = imageGraphics(img); g.setColor(foreground); g.setFont(scaledFont()); g.drawString(text, 0, y); g.dispose(); ret img; } }