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 &lt;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]

Reply via email to