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]