deweese 02/01/31 13:57:36 Modified: sources/org/apache/batik/bridge RepaintManager.java SVGRectElementBridge.java UpdateManager.java sources/org/apache/batik/gvt AbstractGraphicsNode.java CompositeGraphicsNode.java UpdateTracker.java sources/org/apache/batik/gvt/filter GraphicsNodeRable8Bit.java sources/org/apache/batik/gvt/renderer StaticRenderer.java Log: 1) Fixed a bug where the image size was not updated when content changed. 2) Made the Static Renderer less concervative about replacing offscreen buffers. 3) Fixed a bug that prevented the use of cached image data when panning. Revision Changes Path 1.4 +6 -3 xml-batik/sources/org/apache/batik/bridge/RepaintManager.java Index: RepaintManager.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/RepaintManager.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- RepaintManager.java 29 Jan 2002 22:24:32 -0000 1.3 +++ RepaintManager.java 31 Jan 2002 21:57:35 -0000 1.4 @@ -8,13 +8,15 @@ package org.apache.batik.bridge; +import java.util.List; + import org.apache.batik.gvt.UpdateTracker; /** * This class manages the rendering of a GVT tree. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: RepaintManager.java,v 1.3 2002/01/29 22:24:32 deweese Exp $ + * @version $Id: RepaintManager.java,v 1.4 2002/01/31 21:57:35 deweese Exp $ */ public class RepaintManager extends Thread { @@ -50,8 +52,9 @@ updateManager.getUpdateRunnableQueue().invokeAndWait (new Runnable() { public void run() { - updateManager.updateRendering - (ut.getDirtyAreas()); + List dirtyAreas = ut.getDirtyAreas(); + updateManager.modifiedAreas(dirtyAreas); + updateManager.updateRendering(dirtyAreas); ut.clear(); } }); 1.6 +25 -5 xml-batik/sources/org/apache/batik/bridge/SVGRectElementBridge.java Index: SVGRectElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGRectElementBridge.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- SVGRectElementBridge.java 23 Jan 2002 14:14:07 -0000 1.5 +++ SVGRectElementBridge.java 31 Jan 2002 21:57:35 -0000 1.6 @@ -27,7 +27,7 @@ * Bridge class for the <rect> element. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: SVGRectElementBridge.java,v 1.5 2002/01/23 14:14:07 deweese Exp $ + * @version $Id: SVGRectElementBridge.java,v 1.6 2002/01/31 21:57:35 deweese Exp $ */ public class SVGRectElementBridge extends SVGShapeElementBridge { @@ -198,11 +198,31 @@ Rectangle2D r = (Rectangle2D)node.getShape(); // System.out.println("Old r: " + r); - r.setRect(Float.parseFloat(((MutationEvent)evt).getNewValue()), - r.getY(), - r.getWidth(), - r.getHeight()); + MutationEvent mevt = (MutationEvent)evt; + if (mevt.getAttrName().equals("x")){ + r.setRect(Float.parseFloat(((MutationEvent)evt).getNewValue()), + r.getY(), + r.getWidth(), + r.getHeight()); + } else if (mevt.getAttrName().equals("y")){ + r.setRect(r.getX(), + Float.parseFloat(((MutationEvent)evt).getNewValue()), + r.getWidth(), + r.getHeight()); + + } else if (mevt.getAttrName().equals("width")){ + r.setRect(r.getX(), + r.getY(), + Float.parseFloat(((MutationEvent)evt).getNewValue()), + r.getHeight()); + + }else if (mevt.getAttrName().equals("height")){ + r.setRect(r.getX(), + r.getY(), + r.getWidth(), + Float.parseFloat(((MutationEvent)evt).getNewValue())); + } // System.out.println("New r: " + r); node.setShape(r); 1.4 +15 -2 xml-batik/sources/org/apache/batik/bridge/UpdateManager.java Index: UpdateManager.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/UpdateManager.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- UpdateManager.java 29 Jan 2002 16:19:00 -0000 1.3 +++ UpdateManager.java 31 Jan 2002 21:57:35 -0000 1.4 @@ -47,7 +47,7 @@ * This class provides features to manage the update of an SVG document. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: UpdateManager.java,v 1.3 2002/01/29 16:19:00 deweese Exp $ + * @version $Id: UpdateManager.java,v 1.4 2002/01/31 21:57:35 deweese Exp $ */ public class UpdateManager implements RunnableQueue.RunHandler { @@ -288,6 +288,20 @@ } /** + * Call this to let the Update Manager know that certain areas + * in the image have been modified and need to be rerendered.. + */ + public void modifiedAreas(List areas) { + AffineTransform at = renderer.getTransform(); + Iterator i = areas.iterator(); + while (i.hasNext()) { + Shape s = (Shape)i.next(); + Rectangle r = at.createTransformedShape(s).getBounds(); + renderer.flush(r); + } + } + + /** * Updates the rendering buffer. * @param u2d The user to device transform. * @param dbr Whether the double buffering should be used. @@ -322,7 +336,6 @@ while (i.hasNext()) { Shape s = (Shape)i.next(); Rectangle r = at.createTransformedShape(s).getBounds(); - renderer.flush(r); rects.add(r); } 1.33 +23 -4 xml-batik/sources/org/apache/batik/gvt/AbstractGraphicsNode.java Index: AbstractGraphicsNode.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/AbstractGraphicsNode.java,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- AbstractGraphicsNode.java 23 Jan 2002 14:31:30 -0000 1.32 +++ AbstractGraphicsNode.java 31 Jan 2002 21:57:35 -0000 1.33 @@ -54,7 +54,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> * @author <a href="mailto:[EMAIL PROTECTED]">Emmanuel Tissandier</a> * @author <a href="mailto:[EMAIL PROTECTED]">Thomas DeWeese</a> - * @version $Id: AbstractGraphicsNode.java,v 1.32 2002/01/23 14:31:30 deweese Exp $ + * @version $Id: AbstractGraphicsNode.java,v 1.33 2002/01/31 21:57:35 deweese Exp $ */ public abstract class AbstractGraphicsNode implements GraphicsNode { @@ -127,6 +127,11 @@ protected WeakReference graphicsNodeRable; /** + * The GraphicsNodeRable for this node with all filtering applied + */ + protected WeakReference enableBackgroundGraphicsNodeRable; + + /** * A Weak Reference to this. */ protected WeakReference weakRef; @@ -393,14 +398,14 @@ public Filter getEnableBackgroundGraphicsNodeRable (boolean createIfNeeded) { GraphicsNodeRable ret = null; - if (graphicsNodeRable != null) { - ret = (GraphicsNodeRable)graphicsNodeRable.get(); + if (enableBackgroundGraphicsNodeRable != null) { + ret = (GraphicsNodeRable)enableBackgroundGraphicsNodeRable.get(); if (ret != null) return ret; } if (createIfNeeded) { ret = new GraphicsNodeRable8Bit(this); ret.setUsePrimitivePaint(false); - graphicsNodeRable = new WeakReference(ret); + enableBackgroundGraphicsNodeRable = new WeakReference(ret); } return ret; } @@ -880,6 +885,20 @@ ((AbstractGraphicsNode) parent).invalidateGeometryCache(); } bounds = null; + + if (graphicsNodeRable != null) { + GraphicsNodeRable8Bit gnr; + gnr = (GraphicsNodeRable8Bit)graphicsNodeRable.get(); + if (gnr != null) + gnr.clearCache(); + } + + if (enableBackgroundGraphicsNodeRable != null) { + GraphicsNodeRable8Bit gnr = + (GraphicsNodeRable8Bit)enableBackgroundGraphicsNodeRable.get(); + if (gnr != null) + gnr.clearCache(); + } } /** 1.27 +6 -7 xml-batik/sources/org/apache/batik/gvt/CompositeGraphicsNode.java Index: CompositeGraphicsNode.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/CompositeGraphicsNode.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- CompositeGraphicsNode.java 23 Jan 2002 14:14:08 -0000 1.26 +++ CompositeGraphicsNode.java 31 Jan 2002 21:57:35 -0000 1.27 @@ -33,7 +33,7 @@ * A CompositeGraphicsNode is a graphics node that can contain graphics nodes. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: CompositeGraphicsNode.java,v 1.26 2002/01/23 14:14:08 deweese Exp $ + * @version $Id: CompositeGraphicsNode.java,v 1.27 2002/01/31 21:57:35 deweese Exp $ */ public class CompositeGraphicsNode extends AbstractGraphicsNode implements List { @@ -255,7 +255,7 @@ // Make sure we haven't been interrupted if (Thread.currentThread().isInterrupted()) { // The Thread has been interrupted. - // Invalidate any cached values and proceed. + // Invalidate any cached values and proceed. invalidateGeometryCache(); } } @@ -263,19 +263,18 @@ } /** - * Returns the bounds of this node's primitivePaint after applying the input - * transform (if any), concatenated with this node's transform (if any). + * Returns the bounds of this node's primitivePaint after applying + * the input transform (if any), concatenated with this node's + * transform (if any). * * @param txf the affine transform with which this node's transform should - * be concatenated. Should not be null. - */ + * be concatenated. Should not be null. */ public Rectangle2D getTransformedPrimitiveBounds(AffineTransform txf) { AffineTransform t = txf; if (transform != null) { t = new AffineTransform(txf); t.concatenate(transform); } - int i = 0; Rectangle2D tpb = null; while (tpb == null && i < count) { 1.5 +3 -2 xml-batik/sources/org/apache/batik/gvt/UpdateTracker.java Index: UpdateTracker.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/UpdateTracker.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- UpdateTracker.java 29 Jan 2002 21:46:43 -0000 1.4 +++ UpdateTracker.java 31 Jan 2002 21:57:35 -0000 1.5 @@ -29,7 +29,7 @@ * This class tracks the changes on a GVT tree * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: UpdateTracker.java,v 1.4 2002/01/29 21:46:43 deweese Exp $ + * @version $Id: UpdateTracker.java,v 1.5 2002/01/31 21:57:35 deweese Exp $ */ public class UpdateTracker extends GraphicsNodeChangeAdapter { @@ -76,7 +76,8 @@ Rectangle2D srcNRgn = gn.getBounds(); AffineTransform nat = gn.getTransform(); nodeBounds.put(gnWRef, srcNRgn); // remember the new bounds... - + // System.out.println("Old: " + srcORgn); + // System.out.println("New: " + srcNRgn); Shape oRgn = srcORgn; Shape nRgn = srcNRgn; 1.15 +10 -1 xml-batik/sources/org/apache/batik/gvt/filter/GraphicsNodeRable8Bit.java Index: GraphicsNodeRable8Bit.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/filter/GraphicsNodeRable8Bit.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- GraphicsNodeRable8Bit.java 18 Sep 2001 21:19:00 -0000 1.14 +++ GraphicsNodeRable8Bit.java 31 Jan 2002 21:57:35 -0000 1.15 @@ -40,7 +40,7 @@ * createRendering methods. * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: GraphicsNodeRable8Bit.java,v 1.14 2001/09/18 21:19:00 deweese Exp $ + * @version $Id: GraphicsNodeRable8Bit.java,v 1.15 2002/01/31 21:57:35 deweese Exp $ */ public class GraphicsNodeRable8Bit extends AbstractRable @@ -94,6 +94,15 @@ } this.node = node; + } + + /** + * Clear any cached Red. + */ + public void clearCache() { + cachedRed = null; + cachedUsr2dev = null; + cachedGn2dev = null; } /** 1.21 +15 -15 xml-batik/sources/org/apache/batik/gvt/renderer/StaticRenderer.java Index: StaticRenderer.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/renderer/StaticRenderer.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- StaticRenderer.java 29 Jan 2002 16:19:00 -0000 1.20 +++ StaticRenderer.java 31 Jan 2002 21:57:35 -0000 1.21 @@ -45,7 +45,7 @@ * rendering in an offscreen buffer image. * * @author <a href="mailto:[EMAIL PROTECTED]>Vincent Hardy</a> - * @version $Id: StaticRenderer.java,v 1.20 2002/01/29 16:19:00 deweese Exp $ + * @version $Id: StaticRenderer.java,v 1.21 2002/01/31 21:57:35 deweese Exp $ */ public class StaticRenderer implements ImageRenderer { /** @@ -149,11 +149,9 @@ rootCR = null; workingOffScreen = null; - workingBaseRaster = null; workingRaster = null; currentOffScreen = null; - currentBaseRaster = null; currentRaster = null; // renderingHints = new RenderingHints(defaultRenderingHints); @@ -176,11 +174,9 @@ rootCR = null; workingOffScreen = null; - workingBaseRaster = null; workingRaster = null; currentOffScreen = null; - currentBaseRaster = null; currentRaster = null; } @@ -200,6 +196,9 @@ * the identity transform will be set. */ public void setTransform(AffineTransform usr2dev){ + if (this.usr2dev.equals(usr2dev)) + return; + if(usr2dev == null) this.usr2dev = new AffineTransform(); else @@ -234,6 +233,9 @@ * @param isDoubleBuffered the new value for double buffering */ public void setDoubleBuffered(boolean isDoubleBuffered){ + if (this.isDoubleBuffered == isDoubleBuffered) + return; + this.isDoubleBuffered = isDoubleBuffered; if (isDoubleBuffered) { // Now double buffering, so make sure they can't see work buffers. @@ -293,9 +295,13 @@ */ public void clearOffScreen() { + // No need to clear in double buffer case people will + // only see it when it is done... + if (isDoubleBuffered) + return; + WritableRaster syncRaster; ColorModel cm; - updateWorkingBuffers(); if ((rootCR == null) || (workingBaseRaster == null)) @@ -427,6 +433,7 @@ r = (Rectangle)r.clone(); r.x -= Math.round((float)usr2dev.getTranslateX()); r.y -= Math.round((float)usr2dev.getTranslateY()); + // System.out.println("Flushing Rect:" + r); tcr.flushCache(r); } @@ -484,15 +491,8 @@ rootCR = null; } - if (rootCR == null) { - workingBaseRaster = null; - workingRaster = null; - workingOffScreen = null; - - rootCR = renderGNR(); - - if (rootCR == null) return; - } + rootCR = renderGNR(); + if (rootCR == null) return; SampleModel sm = rootCR.getSampleModel(); int w = offScreenWidth;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]