deweese     2003/04/01 02:35:39

  Modified:    samples/tests/spec/scripting xAnimOnClick.svg
               sources/org/apache/batik/ext/awt
                        MultipleGradientPaintContext.java
               sources/org/apache/batik/gvt PatternPaint.java
                        PatternPaintContext.java
  Log:
  Significant performance improvement for patterns that are filtered or have
  filters applied to them (take Batik70 for example).
  
  Revision  Changes    Path
  1.4       +7 -21     xml-batik/samples/tests/spec/scripting/xAnimOnClick.svg
  
  Index: xAnimOnClick.svg
  ===================================================================
  RCS file: /home/cvs/xml-batik/samples/tests/spec/scripting/xAnimOnClick.svg,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- xAnimOnClick.svg  11 Feb 2002 14:42:52 -0000      1.3
  +++ xAnimOnClick.svg  1 Apr 2003 10:35:39 -0000       1.4
  @@ -25,20 +25,11 @@
       <text x="50%" y="45" class="title">&lt;rect&gt; x Animation in 'onclick'</text>
   
       <script type="text/ecmascript">
  -
  -    var r;
  -    var doc;
  -    var t;
  -    var start;
  -    var end;
  -    var inc =2;
  -    var frac=2;    
  -    var cont;
  +    var t, start, end, inc, cont, frac=0;    
   
       function startAnim(evt, target, xStart, xEnd){
  -        r = evt.target;
  -        doc = r.ownerDocument;
  -        t = doc.getElementById(target);
  +     if (cont == 1) return;
  +        t = document.getElementById(target);
           start = xStart
           end   = xEnd;
           cont = 1;
  @@ -51,17 +42,12 @@
   
       function cyclopse() {
           t.setAttribute('x', (end-start)*frac/100+start);
  -        if (frac == 100) {
  -          inc = -2;
  -        } else if (frac == 0) {
  -          inc = 2;
  -        }
  +        if (frac == 100) inc = -2;
  +        if (frac ==   0) inc =  2;
           frac += inc;
  -        if (cont == 1) {
  +        if (cont == 1)
             setTimeout('cyclopse()', 50);
  -        }
       }
  -
       </script>
   
       <g id="test-content">
  
  
  
  1.14      +2 -2      
xml-batik/sources/org/apache/batik/ext/awt/MultipleGradientPaintContext.java
  
  Index: MultipleGradientPaintContext.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/ext/awt/MultipleGradientPaintContext.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- MultipleGradientPaintContext.java 10 Dec 2002 16:19:17 -0000      1.13
  +++ MultipleGradientPaintContext.java 1 Apr 2003 10:35:39 -0000       1.14
  @@ -196,7 +196,7 @@
               len++;
           }
   
  -        //if the first gradient stop is not equal to one, fix this condition
  +        //if the last gradient stop is not equal to one, fix this condition
           if (fractions[fractions.length - 1] != 1f) {
               fixLast = true;
               len++;
  
  
  
  1.11      +48 -15    xml-batik/sources/org/apache/batik/gvt/PatternPaint.java
  
  Index: PatternPaint.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/PatternPaint.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- PatternPaint.java 23 Jan 2002 14:14:08 -0000      1.10
  +++ PatternPaint.java 1 Apr 2003 10:35:39 -0000       1.11
  @@ -19,6 +19,7 @@
   import java.awt.geom.Rectangle2D;
   
   import java.awt.image.ColorModel;
  +import java.awt.image.Raster;
   
   import org.apache.batik.gvt.filter.GraphicsNodeRable8Bit;
   import org.apache.batik.gvt.filter.GraphicsNodeRable;
  @@ -68,6 +69,8 @@
        */
       private boolean overflow;
   
  +    private PatternPaintContext lastContext;
  +
       /**
        * Constructs a new <tt>PatternPaint</tt>.
        *
  @@ -148,29 +151,39 @@
                                         Rectangle2D     userBounds,
                                         AffineTransform xform,
                                         RenderingHints  hints) {
  -
  -        // System.out.println("userBounds : " + userBounds);
  -        // System.out.println("patternTransform : " + patternTransform);
  -
           // Concatenate the patternTransform to xform
           if (patternTransform != null) {
               xform = new AffineTransform(xform);
               xform.concatenate(patternTransform);
  -         
  -            try {
  -                AffineTransform patternTransformInv = 
  -                 patternTransform.createInverse();
  -                userBounds = patternTransformInv.
  -                    createTransformedShape(userBounds).getBounds2D();
  -            }
  -            catch(NoninvertibleTransformException e){  }
           }
   
  -        return new PatternPaintContext(cm, xform,
  +        if ((lastContext!= null) &&
  +            lastContext.getColorModel().equals(cm)) {
  +            
  +            double p[] = new double[6];
  +            double q[] = new double[6];
  +            xform.getMatrix(p);
  +            lastContext.getUsr2Dev().getMatrix(q);
  +            if ((p[0] == q[0]) && (p[1] == q[1]) && 
  +                (p[2] == q[2]) && (p[3] == q[3])) {
  +                if ((p[4] == q[4]) && (p[5] == q[5]))
  +                    return lastContext;
  +                else 
  +                    return new PatternPaintContextWrapper
  +                        (lastContext, 
  +                         (int)(q[4]-p[4]+0.5),
  +                         (int)(q[5]-p[5]+0.5));
  +            }
  +        }
  +        // System.out.println("CreateContext Called: " + this);
  +        // System.out.println("CM : " + cm);
  +        // System.out.println("xForm : " + xform);
  +        
  +        lastContext = new PatternPaintContext(cm, xform,
                                          hints, tile,
                                          patternRegion,
  -                                       userBounds,
                                          overflow);
  +        return lastContext;
       }
   
       /**
  @@ -178,5 +191,25 @@
        */
       public int getTransparency(){
           return TRANSLUCENT;
  +    }
  +
  +    static class PatternPaintContextWrapper implements PaintContext {
  +        PatternPaintContext ppc;
  +        int xShift, yShift;
  +        PatternPaintContextWrapper(PatternPaintContext ppc,
  +                            int xShift, int yShift) {
  +            this.ppc = ppc;
  +            this.xShift = xShift;
  +            this.yShift = yShift;
  +        }
  +
  +        public void dispose(){ }
  +
  +        public ColorModel getColorModel(){
  +            return ppc.getColorModel();
  +        }
  +        public Raster getRaster(int x, int y, int width, int height){
  +            return ppc.getRaster(x+xShift, y+yShift, width, height);
  +        }
       }
   }
  
  
  
  1.10      +7 -4      xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java
  
  Index: PatternPaintContext.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PatternPaintContext.java  17 Dec 2001 16:02:17 -0000      1.9
  +++ PatternPaintContext.java  1 Apr 2003 10:35:39 -0000       1.10
  @@ -58,6 +58,9 @@
        */
       private RenderedImage tiled;
   
  +    protected AffineTransform usr2dev;
  +
  +    public AffineTransform getUsr2Dev() { return usr2dev; }
   
       private static Rectangle EVERYTHING = 
           new Rectangle(Integer.MIN_VALUE/4, Integer.MIN_VALUE/4, 
  @@ -67,7 +70,7 @@
        * @param destCM     ColorModel that receives the paint data
        * @param usr2dev    user space to device space transform
        * @param hints      RenderingHints
  -     * @param userBounds of the region tiled by this paint. In user space.
  +     * @param patternRegion region tiled by this paint. In user space.
        * @param overflow   controls whether the pattern region clips the
        *                   pattern tile
        */
  @@ -76,7 +79,6 @@
                                  RenderingHints  hints,
                                  Filter          tile,
                                  Rectangle2D     patternRegion,
  -                               Rectangle2D     userBounds,
                                  boolean         overflow) {
   
           if(usr2dev == null){
  @@ -91,7 +93,8 @@
               throw new IllegalArgumentException();
           }
   
  -        // System.out.println("UsrB: " + userBounds);
  +        this.usr2dev    = usr2dev;
  +
           // System.out.println("PatB: " + patternRegion);
           // System.out.println("Tile: " + tile);
   
  
  
  

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

Reply via email to