deweese     2003/03/07 04:36:30

  Modified:    sources/org/apache/batik/gvt/renderer DynamicRenderer.java
               sources/org/apache/batik/swing/svg JSVGComponent.java
  Added:       samples/tests/spec/scripting rootSizeChange.svg
  Log:
  Fixed a bug in the update engine when the size/location of the
  root graphics node changed (reported on batik mail lists)
  
  Revision  Changes    Path
  1.14      +52 -1     
xml-batik/sources/org/apache/batik/gvt/renderer/DynamicRenderer.java
  
  Index: DynamicRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/gvt/renderer/DynamicRenderer.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- DynamicRenderer.java      6 Jun 2002 16:08:20 -0000       1.13
  +++ DynamicRenderer.java      7 Mar 2003 12:36:29 -0000       1.14
  @@ -10,12 +10,14 @@
   
   import java.awt.geom.AffineTransform;
   import java.awt.geom.Rectangle2D;
  +import java.awt.Point;
   import java.awt.RenderingHints;
   import java.awt.Rectangle;
   import java.awt.Shape;
   import java.awt.image.BufferedImage;
   import java.awt.image.Raster;
   import java.awt.image.WritableRaster;
  +import java.awt.image.SampleModel;
   
   import java.util.List;
   import java.util.Iterator;
  @@ -67,6 +69,55 @@
       public void flush(List areas) {
           // Since we don't cache we don't need to flush
           return;
  +    }
  +
  +    protected void updateWorkingBuffers() {
  +        if (rootFilter == null) {
  +            rootFilter = rootGN.getGraphicsNodeRable(true);
  +            rootCR = null;
  +        }
  +
  +        rootCR = renderGNR();
  +        if (rootCR == null) {
  +            // No image to display so clear everything out...
  +            workingRaster = null;
  +            workingOffScreen = null;
  +            workingBaseRaster = null;
  +            
  +            currentOffScreen = null;
  +            currentBaseRaster = null;
  +            currentRaster = null;
  +            return;
  +        }
  +
  +        SampleModel sm = rootCR.getSampleModel();
  +        int         w  = offScreenWidth;
  +        int         h  = offScreenHeight;
  +
  +        if ((workingBaseRaster == null) ||
  +            (workingBaseRaster.getWidth()  < w) ||
  +            (workingBaseRaster.getHeight() < h)) {
  +
  +            sm = sm.createCompatibleSampleModel(w, h);
  +            
  +            workingBaseRaster 
  +                = Raster.createWritableRaster(sm, new Point(0,0));
  +
  +            workingRaster = workingBaseRaster.createWritableChild
  +                (0, 0, w, h, 0, 0, null);
  +
  +            workingOffScreen =  new BufferedImage
  +                (rootCR.getColorModel(), 
  +                 workingRaster,
  +                 rootCR.getColorModel().isAlphaPremultiplied(), null);
  +
  +        }
  +
  +        if (!isDoubleBuffered) {
  +            currentOffScreen  = workingOffScreen;
  +            currentBaseRaster = workingBaseRaster;
  +            currentRaster     = workingRaster;
  +        }
       }
   
       /**
  
  
  
  1.65      +1 -2      xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java
  
  Index: JSVGComponent.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- JSVGComponent.java        26 Feb 2003 11:13:46 -0000      1.64
  +++ JSVGComponent.java        7 Mar 2003 12:36:30 -0000       1.65
  @@ -1432,7 +1432,6 @@
                                   if (ml.size() < l.size()) {
                                       l = ml;
                                   }
  -
                                   Iterator i = l.iterator();
                                   while (i.hasNext()) {
                                       Rectangle r = (Rectangle)i.next();
  
  
  
  1.1                  xml-batik/samples/tests/spec/scripting/rootSizeChange.svg
  
  Index: rootSizeChange.svg
  ===================================================================
  <?xml version="1.0" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000802//EN"
  "http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd";>
  
  <!-- ====================================================================== -->
  <!-- Copyright (C) The Apache Software Foundation. All rights reserved.     -->
  <!--                                                                        -->
  <!-- This software is published under the terms of the Apache Software      -->
  <!-- License version 1.1, a copy of which has been included with this       -->
  <!-- distribution in the LICENSE file.                                      -->
  <!-- ====================================================================== -->
  
  <!-- ====================================================================== -->
  <!-- Modification of a circle attributes                                    -->
  <!--                                                                        -->
  <!-- @author [EMAIL PROTECTED]                                               -->
  <!-- @version $Id: rootSizeChange.svg,v 1.1 2003/03/07 12:36:30 deweese Exp $ -->
  <!-- ====================================================================== -->
  
  <?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>  
  
  <svg id="body" width="450" height="500" viewBox="0 0 450 500"
       onload="updateGroup1(); updateGroup2()">
      <title>Testing Update engine when root changes size/location.</title>
  
      <desc>To ensure proper test results you may need to turn off
      double buffering and pause the animation and force a repaint, if
      you see lots of junk then the repaint engine is not working
      properly.</desc>
      <script type="text/ecmascript">
        var time1 = 90;
        function updateGroup1() {
              var elt = document.getElementById("g1");
            var x = Math.cos(time1*3.1415926/180)*150 + 225;
            var y = Math.sin(.5*(time1+90)*3.1415926/180)*150 + 250;
              elt.setAttributeNS(null, "transform", 
                               "translate("+x+","+y+")");
            time1 += 5;
            setTimeout('updateGroup1()', 100);
        }
        var time2 = 90;
        function updateGroup2() {
              var elt = document.getElementById("g2");
            var x = Math.cos(time2*3.1415926/180)*150 + 225;
            var y = Math.sin(.5*(time2+90)*3.1415926/180)*150 + 250;
              elt.setAttributeNS(null, "transform", 
                               "translate("+x+","+y+")");
            time2 -= 5;
            setTimeout('updateGroup2()', 100);
        }
      </script>
  
      <g id="test-content">
         <g id="g1">
             <rect x="-15" y="-25" width="30" height="50" 
                   fill="none" stroke="black"/>
             <circle cx="0" cy="0" r="10" fill="red"/>
         </g> 
         <g id="g2">
             <rect x="-15" y="-25" width="30" height="50" 
                   fill="none" stroke="black"/>
             <circle cx="0" cy="0" r="10" fill="blue"/>
         </g> 
      </g>
  </svg>
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to