diff --git a/core/src/main/java/edu/umd/cs/piccolo/POffscreenCanvas.java b/core/src/main/java/edu/umd/cs/piccolo/POffscreenCanvas.java index 87dd99e..bf37269 100644 --- a/core/src/main/java/edu/umd/cs/piccolo/POffscreenCanvas.java +++ b/core/src/main/java/edu/umd/cs/piccolo/POffscreenCanvas.java @@ -28,6 +28,7 @@ */ package edu.umd.cs.piccolo; +import java.awt.Color; import java.awt.Cursor; import java.awt.Graphics2D; @@ -42,6 +43,9 @@ */ public final class POffscreenCanvas implements PComponent { + /** Default render quality, PPaintContext.HIGH_QUALITY_RENDERING. */ + static final int DEFAULT_RENDER_QUALITY = PPaintContext.HIGH_QUALITY_RENDERING; + /** Bounds of this offscreen canvas. */ private final PBounds bounds; @@ -51,9 +55,11 @@ /** Render quality. */ private int renderQuality = DEFAULT_RENDER_QUALITY; - /** Default render quality, PPaintContext.HIGH_QUALITY_RENDERING. */ - static final int DEFAULT_RENDER_QUALITY = PPaintContext.HIGH_QUALITY_RENDERING; + /** Whether this node's background color should be drawn when rendering. */ + private boolean opaque; + /** Background color to paint before the contents of the scene are rendered. */ + private Color backgroundColor; /** * Create a new offscreen canvas the specified width and height. @@ -70,6 +76,9 @@ } bounds = new PBounds(0.0d, 0.0d, width, height); setCamera(PUtil.createBasicScenegraph()); + + opaque = false; + backgroundColor = null; } /** @@ -82,6 +91,12 @@ if (graphics == null) { throw new IllegalArgumentException("graphics must not be null"); } + + if (opaque && backgroundColor != null) { + graphics.setBackground(backgroundColor); + graphics.clearRect(0, 0, (int)bounds.getWidth(), (int)bounds.getHeight()); + } + final PPaintContext paintContext = new PPaintContext(graphics); paintContext.setRenderQuality(renderQuality); camera.fullPaint(paintContext); @@ -164,4 +179,29 @@ public void setInteracting(final boolean interacting) { // empty } + + /** + * Return the root of the scene this POffscreenCanvas is viewing. + * + * @return root element of the scene being viewed + */ + public PRoot getRoot() { + return camera.getRoot(); + } + + public boolean isOpaque() { + return opaque; + } + + public void setOpaque(boolean opaque) { + this.opaque = opaque; + } + + public Color getBackground() { + return backgroundColor; + } + + public void setBackground(Color backgroundColor) { + this.backgroundColor = backgroundColor; + } } \ No newline at end of file