diff --git a/core/src/main/java/edu/umd/cs/piccolo/POffscreenCanvas.java b/core/src/main/java/edu/umd/cs/piccolo/POffscreenCanvas.java new file mode 100644 index 0000000..4348b6f --- /dev/null +++ b/core/src/main/java/edu/umd/cs/piccolo/POffscreenCanvas.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2008-2009, Piccolo2D project, http://piccolo2d.org + * Copyright (c) 1998-2008, University of Maryland + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions + * and the following disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its + * contributors may be used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package edu.umd.cs.piccolo; + +import java.awt.Cursor; +import java.awt.Graphics2D; + +import edu.umd.cs.piccolo.PCamera; +import edu.umd.cs.piccolo.PComponent; +import edu.umd.cs.piccolo.util.PBounds; +import edu.umd.cs.piccolo.util.PPaintContext; +import edu.umd.cs.piccolo.util.PUtil; + +/** + * Offscreen canvas. + */ +public final class POffscreenCanvas implements PComponent { + + /** Bounds of this offscreen canvas. */ + private final PBounds bounds; + + /** Camera for this offscreen canvas. */ + private PCamera camera; + + /** 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; + + + /** + * Create a new offscreen canvas the specified width and height. + * + * @param width width of this offscreen canvas, must be at least zero + * @param height height of this offscreen canvas, must be at least zero + */ + public POffscreenCanvas(final int width, final int height) { + if (width < 0) { + throw new IllegalArgumentException("width must be at least zero, was " + width); + } + if (height < 0) { + throw new IllegalArgumentException("height must be at least zero, was " + height); + } + bounds = new PBounds(0.0d, 0.0d, width, height); + setCamera(PUtil.createBasicScenegraph()); + } + + /** + * Render this offscreen canvas to the specified graphics. + * + * @param graphics graphics to render this offscreen canvas to, must not be + * null + */ + public void render(final Graphics2D graphics) { + if (graphics == null) { + throw new IllegalArgumentException("graphics must not be null"); + } + final PPaintContext paintContext = new PPaintContext(graphics); + paintContext.setRenderQuality(renderQuality); + camera.fullPaint(paintContext); + } + + /** + * Set the camera for this offscreen canvas to camera. + * + * @param camera camera for this offscreen canvas + */ + public void setCamera(final PCamera camera) { + if (this.camera != null) { + this.camera.setComponent(null); + } + this.camera = camera; + if (camera != null) { + camera.setComponent(this); + camera.setBounds((PBounds) bounds.clone()); + } + } + + /** + * Return the camera for this offscreen canvas. + * + * @return the camera for this offscreen canvas + */ + public PCamera getCamera() { + return camera; + } + + /** + * Set the render quality hint for this offscreen canvas to + * renderQuality. + * + * @param renderQuality render quality hint, must be one of + * PPaintContext.HIGH_QUALITY_RENDERING or + * PPaintContext.LOW_QUALITY_RENDERING + */ + public void setRenderQuality(final int renderQuality) { + if (renderQuality == PPaintContext.HIGH_QUALITY_RENDERING + || renderQuality == PPaintContext.LOW_QUALITY_RENDERING) { + this.renderQuality = renderQuality; + } + else { + throw new IllegalArgumentException("renderQuality must be one of PPaintContext.HIGH_QUALITY_RENDERING" + + " or PPaintContext.LOW_QUALITY_RENDERING, was " + renderQuality); + } + } + + /** + * Return the render quality hint for this offscreen canvas. + * + * @return the render quality hint for this offscreen canvas + */ + public int getRenderQuality() { + return renderQuality; + } + + /** {@inheritDoc} */ + public void paintImmediately() { + // empty + } + + /** {@inheritDoc} */ + public void popCursor() { + // empty + } + + /** {@inheritDoc} */ + public void pushCursor(final Cursor cursor) { + // empty + } + + /** {@inheritDoc} */ + public void repaint(final PBounds repaintBounds) { + // empty + } + + /** {@inheritDoc} */ + public void setInteracting(final boolean interacting) { + // empty + } +} \ No newline at end of file diff --git a/core/src/test/java/edu/umd/cs/piccolo/POffscreenCanvasTest.java b/core/src/test/java/edu/umd/cs/piccolo/POffscreenCanvasTest.java new file mode 100644 index 0000000..fc53f01 --- /dev/null +++ b/core/src/test/java/edu/umd/cs/piccolo/POffscreenCanvasTest.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2008-2009, Piccolo2D project, http://piccolo2d.org + * Copyright (c) 1998-2008, University of Maryland + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions + * and the following disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its + * contributors may be used to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package edu.umd.cs.piccolo; + +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; + +import junit.framework.TestCase; +import edu.umd.cs.piccolo.PCamera; +import edu.umd.cs.piccolo.nodes.PPath; +import edu.umd.cs.piccolo.util.PPaintContext; + +/** + * Unit test for POffscreenCanvas. + */ +public class POffscreenCanvasTest extends TestCase { + + public void testConstructor() { + final POffscreenCanvas canvas0 = new POffscreenCanvas(100, 100); + assertNotNull(canvas0); + final POffscreenCanvas canvas1 = new POffscreenCanvas(0, 0); + assertNotNull(canvas1); + final POffscreenCanvas canvas2 = new POffscreenCanvas(0, 100); + assertNotNull(canvas2); + final POffscreenCanvas canvas3 = new POffscreenCanvas(100, 0); + assertNotNull(canvas3); + + try { + new POffscreenCanvas(-1, 100); + fail("ctr(-1, 100) expected IllegalArgumentException"); + } + catch (final IllegalArgumentException e) { + // expected + } + try { + new POffscreenCanvas(100, -1); + fail("ctr(100, -1) expected IllegalArgumentException"); + } + catch (final IllegalArgumentException e) { + // expected + } + try { + new POffscreenCanvas(-1, -1); + fail("ctr(-1, -1) expected IllegalArgumentException"); + } + catch (final IllegalArgumentException e) { + // expected + } + } + + public void testCamera() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + assertNotNull(canvas); + final PCamera camera = canvas.getCamera(); + assertNotNull(camera); + assertEquals(canvas, camera.getComponent()); + final PCamera camera1 = new PCamera(); + canvas.setCamera(camera1); + assertEquals(camera1, canvas.getCamera()); + assertEquals(null, camera.getComponent()); + assertEquals(canvas, camera1.getComponent()); + canvas.setCamera(null); + assertEquals(null, camera1.getComponent()); + assertEquals(null, canvas.getCamera()); + } + + public void testRenderEmpty() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + final BufferedImage image = new BufferedImage(100, 200, BufferedImage.TYPE_INT_ARGB); + final Graphics2D graphics = image.createGraphics(); + canvas.render(graphics); + for (int x = 0; x < 100; x++) { + for (int y = 0; y < 200; y++) { + assertEquals(0, image.getRGB(x, y)); + } + } + } + + public void testRenderFull() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + final PPath rect = PPath.createRectangle(0.0f, 0.0f, 200.0f, 300.0f); + rect.setPaint(new Color(255, 0, 0)); + rect.setStroke(null); + rect.offset(-100.0d, -100.0d); + canvas.getCamera().getLayer(0).addChild(rect); + final BufferedImage image = new BufferedImage(100, 200, BufferedImage.TYPE_INT_ARGB); + final Graphics2D graphics = image.createGraphics(); + canvas.render(graphics); + for (int x = 0; x < 100; x++) { + for (int y = 0; y < 200; y++) { + // red pixel, RGBA is 255, 0, 0, 255 + assertEquals(-65536, image.getRGB(x, y)); + } + } + } + + public void testRenderNull() { + try { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + canvas.render(null); + fail("render(null) expected IllegalArgumentException"); + } + catch (final IllegalArgumentException e) { + // expected + } + } + + public void testRenderQuality() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + assertEquals(POffscreenCanvas.DEFAULT_RENDER_QUALITY, canvas.getRenderQuality()); + canvas.setRenderQuality(PPaintContext.HIGH_QUALITY_RENDERING); + assertEquals(PPaintContext.HIGH_QUALITY_RENDERING, canvas.getRenderQuality()); + canvas.setRenderQuality(PPaintContext.LOW_QUALITY_RENDERING); + assertEquals(PPaintContext.LOW_QUALITY_RENDERING, canvas.getRenderQuality()); + + try { + canvas.setRenderQuality(-1); + } + catch (final IllegalArgumentException e) { + // expected + } + } + + public void testPaintImmediately() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + canvas.paintImmediately(); + } + + public void testPopCursor() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + canvas.popCursor(); + } + + public void testPushCursor() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + canvas.pushCursor(null); + canvas.pushCursor(Cursor.getDefaultCursor()); + } + + public void testInteracting() { + final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); + canvas.setInteracting(true); + canvas.setInteracting(false); + } +} \ No newline at end of file diff --git a/examples/src/main/java/edu/umd/cs/piccolo/examples/OffscreenCanvasExample.java b/examples/src/main/java/edu/umd/cs/piccolo/examples/OffscreenCanvasExample.java index 64028a9..8fbf7ca 100755 --- a/examples/src/main/java/edu/umd/cs/piccolo/examples/OffscreenCanvasExample.java +++ b/examples/src/main/java/edu/umd/cs/piccolo/examples/OffscreenCanvasExample.java @@ -38,10 +38,10 @@ import java.awt.geom.Rectangle2D; import java.awt.image.BufferStrategy; +import edu.umd.cs.piccolo.POffscreenCanvas; import edu.umd.cs.piccolo.activities.PActivity; import edu.umd.cs.piccolo.nodes.PPath; import edu.umd.cs.piccolo.nodes.PText; -import edu.umd.cs.piccolox.POffscreenCanvas; /** * Offscreen canvas example. diff --git a/extras/src/main/java/edu/umd/cs/piccolox/POffscreenCanvas.java b/extras/src/main/java/edu/umd/cs/piccolox/POffscreenCanvas.java deleted file mode 100755 index 2f86323..0000000 --- a/extras/src/main/java/edu/umd/cs/piccolox/POffscreenCanvas.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2008-2009, Piccolo2D project, http://piccolo2d.org - * Copyright (c) 1998-2008, University of Maryland - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided - * that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions - * and the following disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its - * contributors may be used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package edu.umd.cs.piccolox; - -import java.awt.Cursor; -import java.awt.Graphics2D; - -import edu.umd.cs.piccolo.PCamera; -import edu.umd.cs.piccolo.PComponent; -import edu.umd.cs.piccolo.util.PBounds; -import edu.umd.cs.piccolo.util.PPaintContext; -import edu.umd.cs.piccolo.util.PUtil; - -/** - * Offscreen canvas. - */ -public final class POffscreenCanvas implements PComponent { - - /** Bounds of this offscreen canvas. */ - private final PBounds bounds; - - /** Camera for this offscreen canvas. */ - private PCamera camera; - - /** 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; - - /** - * Create a new offscreen canvas the specified width and height. - * - * @param width width of this offscreen canvas, must be at least zero - * @param height height of this offscreen canvas, must be at least zero - */ - public POffscreenCanvas(final int width, final int height) { - if (width < 0) { - throw new IllegalArgumentException("width must be at least zero, was " + width); - } - if (height < 0) { - throw new IllegalArgumentException("height must be at least zero, was " + height); - } - bounds = new PBounds(0.0d, 0.0d, width, height); - setCamera(PUtil.createBasicScenegraph()); - } - - /** - * Render this offscreen canvas to the specified graphics. - * - * @param graphics graphics to render this offscreen canvas to, must not be - * null - */ - public void render(final Graphics2D graphics) { - if (graphics == null) { - throw new IllegalArgumentException("graphics must not be null"); - } - final PPaintContext paintContext = new PPaintContext(graphics); - paintContext.setRenderQuality(renderQuality); - camera.fullPaint(paintContext); - } - - /** - * Set the camera for this offscreen canvas to camera. - * - * @param camera camera for this offscreen canvas - */ - public void setCamera(final PCamera camera) { - if (this.camera != null) { - this.camera.setComponent(null); - } - this.camera = camera; - if (camera != null) { - camera.setComponent(this); - camera.setBounds((PBounds) bounds.clone()); - } - } - - /** - * Return the camera for this offscreen canvas. - * - * @return the camera for this offscreen canvas - */ - public PCamera getCamera() { - return camera; - } - - /** - * Set the render quality hint for this offscreen canvas to - * renderQuality. - * - * @param renderQuality render quality hint, must be one of - * PPaintContext.HIGH_QUALITY_RENDERING or - * PPaintContext.LOW_QUALITY_RENDERING - */ - public void setRenderQuality(final int renderQuality) { - if (renderQuality == PPaintContext.HIGH_QUALITY_RENDERING - || renderQuality == PPaintContext.LOW_QUALITY_RENDERING) { - this.renderQuality = renderQuality; - } - else { - throw new IllegalArgumentException("renderQuality must be one of PPaintContext.HIGH_QUALITY_RENDERING" - + " or PPaintContext.LOW_QUALITY_RENDERING, was " + renderQuality); - } - } - - /** - * Return the render quality hint for this offscreen canvas. - * - * @return the render quality hint for this offscreen canvas - */ - public int getRenderQuality() { - return renderQuality; - } - - /** {@inheritDoc} */ - public void paintImmediately() { - // empty - } - - /** {@inheritDoc} */ - public void popCursor() { - // empty - } - - /** {@inheritDoc} */ - public void pushCursor(final Cursor cursor) { - // empty - } - - /** {@inheritDoc} */ - public void repaint(final PBounds repaintBounds) { - // empty - } - - /** {@inheritDoc} */ - public void setInteracting(final boolean interacting) { - // empty - } -} \ No newline at end of file diff --git a/extras/src/test/java/edu/umd/cs/piccolox/POffscreenCanvasTest.java b/extras/src/test/java/edu/umd/cs/piccolox/POffscreenCanvasTest.java deleted file mode 100755 index 10d2694..0000000 --- a/extras/src/test/java/edu/umd/cs/piccolox/POffscreenCanvasTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2008-2009, Piccolo2D project, http://piccolo2d.org - * Copyright (c) 1998-2008, University of Maryland - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided - * that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of conditions - * and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions - * and the following disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its - * contributors may be used to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package edu.umd.cs.piccolox; - -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; - -import junit.framework.TestCase; -import edu.umd.cs.piccolo.PCamera; -import edu.umd.cs.piccolo.nodes.PPath; -import edu.umd.cs.piccolo.util.PPaintContext; - -/** - * Unit test for POffscreenCanvas. - */ -public class POffscreenCanvasTest extends TestCase { - - public void testConstructor() { - final POffscreenCanvas canvas0 = new POffscreenCanvas(100, 100); - assertNotNull(canvas0); - final POffscreenCanvas canvas1 = new POffscreenCanvas(0, 0); - assertNotNull(canvas1); - final POffscreenCanvas canvas2 = new POffscreenCanvas(0, 100); - assertNotNull(canvas2); - final POffscreenCanvas canvas3 = new POffscreenCanvas(100, 0); - assertNotNull(canvas3); - - try { - new POffscreenCanvas(-1, 100); - fail("ctr(-1, 100) expected IllegalArgumentException"); - } - catch (final IllegalArgumentException e) { - // expected - } - try { - new POffscreenCanvas(100, -1); - fail("ctr(100, -1) expected IllegalArgumentException"); - } - catch (final IllegalArgumentException e) { - // expected - } - try { - new POffscreenCanvas(-1, -1); - fail("ctr(-1, -1) expected IllegalArgumentException"); - } - catch (final IllegalArgumentException e) { - // expected - } - } - - public void testCamera() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - assertNotNull(canvas); - final PCamera camera = canvas.getCamera(); - assertNotNull(camera); - assertEquals(canvas, camera.getComponent()); - final PCamera camera1 = new PCamera(); - canvas.setCamera(camera1); - assertEquals(camera1, canvas.getCamera()); - assertEquals(null, camera.getComponent()); - assertEquals(canvas, camera1.getComponent()); - canvas.setCamera(null); - assertEquals(null, camera1.getComponent()); - assertEquals(null, canvas.getCamera()); - } - - public void testRenderEmpty() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - final BufferedImage image = new BufferedImage(100, 200, BufferedImage.TYPE_INT_ARGB); - final Graphics2D graphics = image.createGraphics(); - canvas.render(graphics); - for (int x = 0; x < 100; x++) { - for (int y = 0; y < 200; y++) { - assertEquals(0, image.getRGB(x, y)); - } - } - } - - public void testRenderFull() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - final PPath rect = PPath.createRectangle(0.0f, 0.0f, 200.0f, 300.0f); - rect.setPaint(new Color(255, 0, 0)); - rect.setStroke(null); - rect.offset(-100.0d, -100.0d); - canvas.getCamera().getLayer(0).addChild(rect); - final BufferedImage image = new BufferedImage(100, 200, BufferedImage.TYPE_INT_ARGB); - final Graphics2D graphics = image.createGraphics(); - canvas.render(graphics); - for (int x = 0; x < 100; x++) { - for (int y = 0; y < 200; y++) { - // red pixel, RGBA is 255, 0, 0, 255 - assertEquals(-65536, image.getRGB(x, y)); - } - } - } - - public void testRenderNull() { - try { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - canvas.render(null); - fail("render(null) expected IllegalArgumentException"); - } - catch (final IllegalArgumentException e) { - // expected - } - } - - public void testRenderQuality() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - assertEquals(POffscreenCanvas.DEFAULT_RENDER_QUALITY, canvas.getRenderQuality()); - canvas.setRenderQuality(PPaintContext.HIGH_QUALITY_RENDERING); - assertEquals(PPaintContext.HIGH_QUALITY_RENDERING, canvas.getRenderQuality()); - canvas.setRenderQuality(PPaintContext.LOW_QUALITY_RENDERING); - assertEquals(PPaintContext.LOW_QUALITY_RENDERING, canvas.getRenderQuality()); - - try { - canvas.setRenderQuality(-1); - } - catch (final IllegalArgumentException e) { - // expected - } - } - - public void testPaintImmediately() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - canvas.paintImmediately(); - } - - public void testPopCursor() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - canvas.popCursor(); - } - - public void testPushCursor() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - canvas.pushCursor(null); - canvas.pushCursor(Cursor.getDefaultCursor()); - } - - public void testInteracting() { - final POffscreenCanvas canvas = new POffscreenCanvas(100, 200); - canvas.setInteracting(true); - canvas.setInteracting(false); - } -} \ No newline at end of file