Revision: 342 http://skycastle.svn.sourceforge.net/skycastle/?rev=342&view=rev Author: zzorn Date: 2008-01-06 05:09:18 -0800 (Sun, 06 Jan 2008) Log Message: ----------- Refactored the LayeredView to use Renderer2D:s directly, instead of Layers. Removed Paths: ------------- trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/AbstractLayer.java trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/Layer.java trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/RendererLayer.java Deleted: trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/AbstractLayer.java =================================================================== --- trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/AbstractLayer.java 2008-01-06 04:23:12 UTC (rev 341) +++ trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/AbstractLayer.java 2008-01-06 13:09:18 UTC (rev 342) @@ -1,78 +0,0 @@ -package org.skycastle.util.view2d.layer; - -import org.skycastle.util.ParameterChecker; -import org.skycastle.util.region.RectangularRegion; -import org.skycastle.util.view2d.renderer.RendererListener; - -import java.util.HashSet; -import java.util.Set; - -/** - * Common functionality of layers. - * - * @author Hans H\xE4ggstr\xF6m - */ -public abstract class AbstractLayer - implements Layer -{ - - //====================================================================== - // Private Fields - - private final Set<RendererListener> myRendererListeners = new HashSet<RendererListener>(); - private final RendererListener myRendererListener = new RendererListener() - { - - public void onAreaChanged( RectangularRegion changedArea ) - { - notifyAreaChanged( changedArea ); - } - - }; - - //====================================================================== - // Public Methods - - //---------------------------------------------------------------------- - // Layer Implementation - - public final void addRendererListener( RendererListener listener ) - { - ParameterChecker.checkNotNull( listener, "addedRendererListener" ); - ParameterChecker.checkNotAlreadyContained( listener, myRendererListeners, "myRendererListeners" ); - - myRendererListeners.add( listener ); - } - - - public final void removeRendererListener( RendererListener listener ) - { - ParameterChecker.checkNotNull( listener, "removedRendererListener" ); - ParameterChecker.checkContained( listener, myRendererListeners, "myRendererListeners" ); - - myRendererListeners.remove( listener ); - } - - //====================================================================== - // Protected Methods - - protected final RendererListener getRendererListener() - { - return myRendererListener; - } - - - /** - * Notifies listeners that the specified area of the image has changed. - * - * @param changedArea the area, specified in world coordinates. Null if the whole image has changed. - */ - protected final void notifyAreaChanged( final RectangularRegion changedArea ) - { - for ( RendererListener rendererListener : myRendererListeners ) - { - rendererListener.onAreaChanged( changedArea ); - } - } - -} Deleted: trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/Layer.java =================================================================== --- trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/Layer.java 2008-01-06 04:23:12 UTC (rev 341) +++ trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/Layer.java 2008-01-06 13:09:18 UTC (rev 342) @@ -1,57 +0,0 @@ -package org.skycastle.util.view2d.layer; - -import org.skycastle.util.region.RectangularRegion; -import org.skycastle.util.view2d.camera.Camera2D; -import org.skycastle.util.view2d.camera.CameraListener; -import org.skycastle.util.view2d.renderer.RendererListener; - -import java.awt.image.BufferedImage; - -/** - * Helper class for the LayeredView. Contains a renderer, and if the renderer is used in buffered mode, an image buffer. - * <p/> - * A layer may be cached if it is also buffered, if so, the buffer is stored in the layer, and re-drawn only when the - * layer image changes for some area. - * <p/> - * If a layer is not cached, it uses a common image buffer if it is buffered, or draws directly on the target image - * if unbuffered. - * <p/> - * There may also be an overcaching policy for the view, if so, the cached image is rendered larger than the - * view size, allowing some panning to occur without re-rendering the image. - * <p/> - * The layer keeps track of which parts of the cache it holds outside the view are up-to-date, and which ones will need to be re-drawn.. - * <p/> - * The layer can also support rendering itself in a separarte thread. - * <p/> - * REFACTOR: Perhaps combine the layer and renderer concepts, and add an abstract base class for renderers that takes care of buffering and such. - * - * @author Hans H\xE4ggstr\xF6m - */ -public interface Layer - extends CameraListener -{ - /** - * Renders the layer to a buffer. - * - * @param target the buffer to render to. - * @param screenRegion the region of the target buffer to render to. Coordinates in pixels. - * @param worldRegion the world region to render to the specified screen region. - * @param camera the camera transformation used. - */ - void render( BufferedImage target, - RectangularRegion screenRegion, - RectangularRegion worldRegion, - Camera2D camera ); - - /** - * @param listener a listener that is notified when the rendered picture changes for some specified area, - * and should be re-drawn there - */ - void addRendererListener( RendererListener listener ); - - /** - * @param listener listener to remove. - */ - void removeRendererListener( RendererListener listener ); - -} Deleted: trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/RendererLayer.java =================================================================== --- trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/RendererLayer.java 2008-01-06 04:23:12 UTC (rev 341) +++ trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/view2d/layer/RendererLayer.java 2008-01-06 13:09:18 UTC (rev 342) @@ -1,96 +0,0 @@ -package org.skycastle.util.view2d.layer; - -import org.skycastle.util.ImageUtils; -import org.skycastle.util.ParameterChecker; -import org.skycastle.util.region.RectangularRegion; -import org.skycastle.util.view2d.camera.Camera2D; -import org.skycastle.util.view2d.renderer.Renderer2D; - -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; - -/** - * A simple layer, that encapsulates a Renderer2D. - * - * @author Hans H\xE4ggstr\xF6m - */ -public class RendererLayer - extends AbstractLayer -{ - - //====================================================================== - // Private Fields - - private final Renderer2D myRenderer2D; - - private BufferedImage myBuffer = null; - - //====================================================================== - // Public Methods - - //---------------------------------------------------------------------- - // Constructors - - /** - * Creates a new RendererLayer. - * - * @param renderer2D the renderer to use. - */ - public RendererLayer( final Renderer2D renderer2D ) - { - ParameterChecker.checkNotNull( renderer2D, "renderer2D" ); - - myRenderer2D = renderer2D; - - myRenderer2D.addRendererListener( getRendererListener() ); - } - - //---------------------------------------------------------------------- - // CameraListener Implementation - - public void onCameraChanged( Camera2D camera, boolean positionChanged, boolean zoomChanged ) - { - // Nothing to do - } - - //---------------------------------------------------------------------- - // Layer Implementation - - public void render( BufferedImage target, RectangularRegion screenRegion, RectangularRegion worldRegion, Camera2D camera ) - { - if ( myRenderer2D.isBuffered() ) - { - // Create or re-create the buffer if needed - if ( bufferShouldBeCreated( target ) ) - { - myBuffer = new BufferedImage( target.getWidth(), target.getHeight(), BufferedImage.TYPE_INT_ARGB ); - } - - // Clear buffer from previous content - ImageUtils.clear( myBuffer ); - - // Render image - myRenderer2D.render( myBuffer, (Graphics2D) myBuffer.getGraphics(), screenRegion, worldRegion, camera ); - - // Copy image to target buffer - final Graphics2D graphics = (Graphics2D) target.getGraphics(); - graphics.drawImage( myBuffer, 0, 0, null ); - } - else - { - // Render directly to target buffer - myRenderer2D.render( target, (Graphics2D) target.getGraphics(), screenRegion, worldRegion, camera ); - } - } - - //====================================================================== - // Private Methods - - private boolean bufferShouldBeCreated( final BufferedImage target ) - { - return myBuffer == null || - myBuffer.getWidth() != target.getWidth() || - myBuffer.getHeight() != target.getHeight(); - } - -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.