deweese 2002/07/25 14:42:42 Modified: sources/org/apache/batik/gvt AbstractGraphicsNode.java CompositeGraphicsNode.java UpdateTracker.java sources/org/apache/batik/gvt/event GraphicsNodeChangeEvent.java Log: 1) Adding/removing children of an element no longer causes the entire contents of the parent to be repainted, only the region of the child effected Revision Changes Path 1.44 +22 -1 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.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- AbstractGraphicsNode.java 12 Jun 2002 15:19:53 -0000 1.43 +++ AbstractGraphicsNode.java 25 Jul 2002 21:42:42 -0000 1.44 @@ -611,11 +611,32 @@ // // Event support methods // + public void fireGraphicsNodeChangeStarted(Rectangle2D from, + Rectangle2D to) { + if (changeStartedEvent == null) + changeStartedEvent = new GraphicsNodeChangeEvent + (this, GraphicsNodeChangeEvent.CHANGE_STARTED); + changeStartedEvent.setFrom(from); + changeStartedEvent.setTo(to); + fireGraphicsNodeChangeStarted(changeStartedEvent); + } + + // + // Event support methods + // public void fireGraphicsNodeChangeStarted() { if (changeStartedEvent == null) changeStartedEvent = new GraphicsNodeChangeEvent (this, GraphicsNodeChangeEvent.CHANGE_STARTED); + else { + changeStartedEvent.setFrom(null); + changeStartedEvent.setTo(null); + } + fireGraphicsNodeChangeStarted(changeStartedEvent); + } + public void fireGraphicsNodeChangeStarted + (GraphicsNodeChangeEvent changeStartedEvent) { // If we had per node listeners we would fire them here... RootGraphicsNode rootGN = getRoot(); 1.29 +30 -6 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.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- CompositeGraphicsNode.java 6 Mar 2002 09:06:39 -0000 1.28 +++ CompositeGraphicsNode.java 25 Jul 2002 21:42:42 -0000 1.29 @@ -473,8 +473,14 @@ throw new IllegalArgumentException(o+" is not a GraphicsNode"); } checkRange(index); - fireGraphicsNodeChangeStarted(); GraphicsNode node = (GraphicsNode) o; + { + Rectangle2D rgn = node.getBounds(); + AffineTransform at = node.getTransform(); + if ((rgn != null) && (at != null)) + rgn = at.createTransformedShape(rgn).getBounds2D(); + fireGraphicsNodeChangeStarted(rgn,rgn); + } // Reparent the graphics node and tidy up the tree's state if (node.getParent() != null) { node.getParent().getChildren().remove(node); @@ -513,7 +519,13 @@ throw new IllegalArgumentException(o+" is not a GraphicsNode"); } GraphicsNode node = (GraphicsNode) o; - fireGraphicsNodeChangeStarted(); + { + Rectangle2D rgn = node.getBounds(); + AffineTransform at = node.getTransform(); + if ((rgn != null) && (at != null)) + rgn = at.createTransformedShape(rgn).getBounds2D(); + fireGraphicsNodeChangeStarted(rgn,rgn); + } // Reparent the graphics node and tidy up the tree's state if (node.getParent() != null) { node.getParent().getChildren().remove(node); @@ -557,7 +569,13 @@ "Index: "+index+", Size: "+count); } GraphicsNode node = (GraphicsNode) o; - fireGraphicsNodeChangeStarted(); + { + Rectangle2D rgn = node.getBounds(); + AffineTransform at = node.getTransform(); + if ((rgn != null) && (at != null)) + rgn = at.createTransformedShape(rgn).getBounds2D(); + fireGraphicsNodeChangeStarted(rgn,rgn); + } // Reparent the graphics node and tidy up the tree's state if (node.getParent() != null) { node.getParent().getChildren().remove(node); @@ -631,10 +649,16 @@ public Object remove(int index) { // Check for correct argument checkRange(index); - fireGraphicsNodeChangeStarted(); + GraphicsNode oldNode = children[index]; + { + Rectangle2D rgn = oldNode.getBounds(); + AffineTransform at = oldNode.getTransform(); + if ((rgn != null) && (at != null)) + rgn = at.createTransformedShape(rgn).getBounds2D(); + fireGraphicsNodeChangeStarted(rgn,rgn); + } // Remove the node at the specified index modCount++; - GraphicsNode oldNode = children[index]; int numMoved = count - index - 1; if (numMoved > 0) { System.arraycopy(children, index+1, children, index, numMoved); 1.13 +22 -41 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.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- UpdateTracker.java 17 Jun 2002 20:17:02 -0000 1.12 +++ UpdateTracker.java 25 Jul 2002 21:42:42 -0000 1.13 @@ -34,7 +34,8 @@ public class UpdateTracker extends GraphicsNodeChangeAdapter { Map dirtyNodes = null; - Map nodeBounds = new HashMap(); + Map fromBounds = new HashMap(); + Map toBounds = new HashMap(); public UpdateTracker(){ } @@ -69,16 +70,16 @@ AffineTransform oat; oat = (AffineTransform)dirtyNodes.get(gnWRef); - Rectangle2D srcORgn = (Rectangle2D)nodeBounds.get(gnWRef); + Rectangle2D srcORgn = (Rectangle2D)fromBounds.remove(gnWRef); - Rectangle2D srcNRgn = gn.getBounds(); + Rectangle2D srcNRgn = (Rectangle2D)toBounds.remove(gnWRef); + if (srcNRgn == null) srcNRgn = gn.getBounds(); AffineTransform nat = gn.getTransform(); if (nat != null){ nat = (nat == null) ? null : new AffineTransform(nat); } - nodeBounds.put(gnWRef, srcNRgn); // remember the new bounds... // System.out.println("Rgns: " + srcORgn + " - " + srcNRgn); // System.out.println("ATs: " + oat + " - " + nat); Shape oRgn = srcORgn; @@ -101,15 +102,6 @@ gnWRef = gn.getWeakReference(); - if (dirtyNodes.containsKey(gnWRef)) - break; // We already have the parent in the list of - // dirty nodes. so let it handle this... - - if (nodeBounds.containsKey(gnWRef)) { - // Update the bounds in the nodeBounds array - nodeBounds.put(gnWRef, gn.getBounds()); - } - AffineTransform at = gn.getTransform(); if (oat != null){ @@ -179,12 +171,22 @@ dirtyNodes.put(gnWRef, at); } - - while (!nodeBounds.containsKey(gnWRef)) { - nodeBounds.put(gnWRef, gn.getBounds()); - gn = gn.getParent(); - if (gn == null) break; - gnWRef = gn.getWeakReference(); + Rectangle2D r2d = gnce.getFrom(); + if (r2d == null) + r2d = gn.getBounds(); + if (r2d != null) { + Rectangle2D rgn = (Rectangle2D)fromBounds.remove(gnWRef); + if (rgn != null) + r2d.add(rgn); + fromBounds.put(gnWRef, r2d); + } + + r2d = gnce.getTo(); + if (r2d != null) { + Rectangle2D rgn = (Rectangle2D)toBounds.remove(gnWRef); + if (rgn != null) + r2d.add(rgn); + toBounds.put(gnWRef, r2d); } } @@ -193,26 +195,5 @@ */ public void clear() { dirtyNodes = null; - } - - public static class DirtyInfo { - // Always references a GraphicsNode. - WeakReference gn; - - // The transform from gn to parent at time of construction. - AffineTransform gn2parent; - - public DirtyInfo(GraphicsNode gn, AffineTransform at) { - this.gn = gn.getWeakReference(); - this.gn2parent = at; - } - - public GraphicsNode getGraphicsNode() { - return (GraphicsNode)gn.get(); - } - - public AffineTransform getGn2Parent() { - return gn2parent; - } } } 1.2 +9 -2 xml-batik/sources/org/apache/batik/gvt/event/GraphicsNodeChangeEvent.java Index: GraphicsNodeChangeEvent.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/event/GraphicsNodeChangeEvent.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- GraphicsNodeChangeEvent.java 23 Jan 2002 14:14:09 -0000 1.1 +++ GraphicsNodeChangeEvent.java 25 Jul 2002 21:42:42 -0000 1.2 @@ -8,6 +8,7 @@ package org.apache.batik.gvt.event; +import java.awt.geom.Rectangle2D; import java.awt.event.InputEvent; import org.apache.batik.gvt.GraphicsNode; @@ -38,6 +39,9 @@ */ public static final int CHANGE_COMPLETED = CHANGE_FIRST+1; + protected Rectangle2D from; + protected Rectangle2D to; + /** * Constructs a new graphics node event with the specified source and ID. * @param source the graphics node where the event originated @@ -46,6 +50,9 @@ public GraphicsNodeChangeEvent(GraphicsNode source, int id) { super(source, id); } + public void setFrom(Rectangle2D from) { this.from = from; } + public void setTo (Rectangle2D to) { this.to = to; } - + public Rectangle2D getFrom() { return from; } + public Rectangle2D getTo() { return to; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]