package automenta.vivisect.swing; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.RenderingHints; import java.awt.image.BufferedImage; /** * Renders to Swing BufferedImage */ public class SCanvas extends Canvas { protected RenderingHints renderHints; protected BufferedImage image = null; protected Color backgroundClearColor = Color.BLACK; @Override public void paint(Graphics g) { } protected final Graphics2D getBufferGraphics() { if (!updateDoubleBuffer()) return null; return (Graphics2D)image.getGraphics(); } protected final void showBuffer(final Graphics2D g) { Graphics localGraphics = getGraphics(); localGraphics.drawImage(image, 0, 0, null); g.dispose(); localGraphics.dispose(); } private final boolean updateDoubleBuffer() { int w = getWidth(); int h = getHeight(); if ((w == 0) || (h == 0)) { return false; } /* * if image is already compatible and optimized for current system * settings, simply return it */ if ((image != null) && /*(image.getColorModel().equals(gfx_config.getColorModel())) &&*/ (image.getWidth() == w) && (image.getHeight() == h)) { //use existing image } else { // obtain the current system graphical settings GraphicsConfiguration gfx_config = GraphicsEnvironment. getLocalGraphicsEnvironment().getDefaultScreenDevice(). getDefaultConfiguration(); image = gfx_config.createCompatibleImage(w, h); } return true; } }